SelGate.cpp
上传用户:szopptop
上传日期:2013-04-23
资源大小:1047k
文件大小:7k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. // SelGate.cpp : Defines the entry point for the application.
  2. //
  3. #include "stdafx.h"
  4. // **************************************************************************************
  5. BOOL InitApplication(HANDLE hInstance);
  6. BOOL InitInstance(HANDLE hInstance, int nCmdShow);
  7. LPARAM APIENTRY MainWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam);
  8. BOOL jRegSetKey(LPCTSTR pSubKeyName, LPCTSTR pValueName, DWORD dwFlags, LPBYTE pValue, DWORD nValueSize);
  9. BOOL jRegGetKey(LPCTSTR pSubKeyName, LPCTSTR pValueName, LPBYTE pValue);
  10. BOOL CALLBACK ConfigDlgFunc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
  11. // **************************************************************************************
  12. //
  13. // Global Variables Definition
  14. //
  15. // **************************************************************************************
  16. HINSTANCE g_hInst = NULL; // Application instance
  17. HWND g_hMainWnd = NULL; // Main window handle
  18. HWND g_hLogMsgWnd = NULL;
  19. HWND g_hToolBar = NULL;
  20. HWND g_hStatusBar = NULL;
  21. static WSADATA g_wsd;
  22. //list<CUserInfo> TUserInfoList;
  23. //CUserInfo TUserInfoList[1500];
  24. TBBUTTON tbButtons[] = 
  25. {
  26. { 0, IDM_STARTSERVICE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
  27. { 1, IDM_STOPSERVICE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}
  28. };
  29. int g_nStatusPartsWidths[_NUMOFMAX_STATUS_PARTS] = { 10, 10, 10, -1 };
  30. // **************************************************************************************
  31. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  32. {
  33.     MSG msg;
  34. // if (CheckAvailableIOCP())
  35. // {
  36. if (!InitApplication(hInstance))
  37. return (FALSE);
  38. if (!InitInstance(hInstance, nCmdShow))
  39. return (FALSE);
  40. while (GetMessage(&msg, NULL, 0, 0))
  41. {
  42. TranslateMessage(&msg);
  43. DispatchMessage(&msg);
  44. }
  45. /* }
  46. else
  47. {
  48. TCHAR szMsg[1024];
  49. LoadString(hInstance, IDS_NOTWINNT, szMsg, sizeof(szMsg));
  50. MessageBox(NULL, szMsg, _LOGINGATE_SERVER_TITLE, MB_OK|MB_ICONINFORMATION);
  51. return -1;
  52. }
  53. */
  54.     return (msg.wParam);
  55. }
  56. // **************************************************************************************
  57. //
  58. //
  59. //
  60. // **************************************************************************************
  61. BOOL InitApplication(HANDLE hInstance)
  62. {
  63.     WNDCLASS  wc;
  64.     wc.style            = CS_GLOBALCLASS|CS_HREDRAW|CS_VREDRAW;
  65.     wc.lpfnWndProc      = (WNDPROC)MainWndProc;
  66.     wc.cbClsExtra       = 0;
  67.     wc.cbWndExtra       = 0;
  68.     wc.hIcon            = LoadIcon((HINSTANCE)hInstance, MAKEINTRESOURCE(IDI_MIR2));
  69.     wc.hInstance        = (HINSTANCE)hInstance;
  70.     wc.hCursor          = LoadCursor(NULL, IDC_ARROW);
  71.     wc.hbrBackground    = (HBRUSH)(COLOR_WINDOW + 1);
  72.     wc.lpszMenuName     = MAKEINTRESOURCE(IDR_MAINMENU);
  73.     wc.lpszClassName    = _SELGATE_SERVER_CLASS;
  74. return RegisterClass(&wc);
  75. }
  76. // **************************************************************************************
  77. //
  78. //
  79. //
  80. // **************************************************************************************
  81. BOOL InitInstance(HANDLE hInstance, int nCmdShow)
  82. {
  83. g_hInst = (HINSTANCE)hInstance;
  84. INITCOMMONCONTROLSEX icex;
  85. icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
  86. icex.dwICC = ICC_LISTVIEW_CLASSES | ICC_BAR_CLASSES | ICC_INTERNET_CLASSES;
  87. InitCommonControlsEx(&icex);
  88.     g_hMainWnd = CreateWindowEx(0, _SELGATE_SERVER_CLASS, _SELGATE_SERVER_TITLE, 
  89. WS_OVERLAPPEDWINDOW|WS_VISIBLE,
  90. CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,                 
  91. NULL, NULL, (HINSTANCE)hInstance, NULL);
  92. g_hToolBar = CreateToolbarEx(g_hMainWnd, WS_CHILD|CCS_TOP|WS_VISIBLE|WS_BORDER,
  93. _IDW_TOOLBAR, sizeof(tbButtons) / sizeof(TBBUTTON), (HINSTANCE)hInstance, IDB_TOOLBAR,
  94. (LPCTBBUTTON)&tbButtons, sizeof(tbButtons) / sizeof(TBBUTTON),
  95. _BMP_CX, _BMP_CY, _BMP_CX, _BMP_CY, sizeof(TBBUTTON));
  96. RECT rcMainWnd, rcToolBar, rcStatusBar;
  97. GetClientRect(g_hMainWnd, &rcMainWnd);
  98. GetWindowRect(g_hToolBar, &rcToolBar);
  99. g_hStatusBar = CreateWindowEx(0L, STATUSCLASSNAME, _T(""), WS_CHILD|WS_BORDER|WS_VISIBLE|SBS_SIZEGRIP,
  100. 0, rcMainWnd.bottom - _STATUS_HEIGHT, (rcMainWnd.right - rcMainWnd.left), _STATUS_HEIGHT, g_hMainWnd, (HMENU)_IDW_STATUSBAR, g_hInst, NULL);
  101. int nStatusPartsWidths[_NUMOFMAX_STATUS_PARTS];
  102. int nCnt = 0;
  103. for (int i = _NUMOFMAX_STATUS_PARTS - 1; i >= 0; i--)
  104. nStatusPartsWidths[nCnt++] = (rcMainWnd.right - rcMainWnd.left) - (90 * i);
  105. SendMessage(g_hStatusBar, SB_SETPARTS, _NUMOFMAX_STATUS_PARTS, (LPARAM)nStatusPartsWidths);
  106. SendMessage(g_hStatusBar, SB_SETTEXT, MAKEWORD(1, 0), (LPARAM)_T("Not Connected"));
  107. GetWindowRect(g_hStatusBar, &rcStatusBar);
  108.     g_hLogMsgWnd = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, _TEXT(""), 
  109. WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS,
  110. 0, (rcToolBar.bottom - rcToolBar.top) - 2, (rcMainWnd.right - rcMainWnd.left), 
  111. (rcMainWnd.bottom - rcMainWnd.top) - (rcToolBar.bottom - rcToolBar.top) - (rcStatusBar.bottom - rcStatusBar.top) + 2,
  112. g_hMainWnd, NULL, (HINSTANCE)hInstance, NULL);
  113. ListView_SetExtendedListViewStyleEx(g_hLogMsgWnd, 0, LVS_EX_FULLROWSELECT);
  114. LV_COLUMN lvc;
  115. TCHAR szText[64];
  116. lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
  117. lvc.fmt = LVCFMT_LEFT;
  118. lvc.cx = 100;
  119. lvc.pszText = szText;
  120. for (i = 0; i < 3; i++)
  121. {
  122. lvc.iSubItem = i;
  123. LoadString((HINSTANCE)hInstance, IDS_LVS_LABEL1 + i, szText, sizeof(szText));
  124. ListView_InsertColumn(g_hLogMsgWnd, i, &lvc);
  125. }
  126. ListView_SetColumnWidth( g_hLogMsgWnd, 2, 500 );
  127. SendMessage(g_hToolBar, TB_SETSTATE, (WPARAM)IDM_STOPSERVICE, (LPARAM)MAKELONG(TBSTATE_INDETERMINATE, 0));
  128. ShowWindow(g_hMainWnd, SW_SHOW);
  129. UpdateWindow(g_hMainWnd);
  130. if (WSAStartup(MAKEWORD(2, 2), &g_wsd) != 0)
  131. return (FALSE);
  132. //
  133. BYTE btInstalled;
  134. if (!jRegGetKey(_SELGATE_SERVER_REGISTRY, _TEXT("Installed"), (LPBYTE)&btInstalled))
  135. DialogBox(g_hInst, MAKEINTRESOURCE(IDD_CONFIGDLG), NULL, (DLGPROC)ConfigDlgFunc);
  136. return TRUE;
  137. }
  138. // **************************************************************************************
  139. //
  140. //
  141. //
  142. // **************************************************************************************
  143. int AddNewLogMsg()
  144. {
  145. LV_ITEM lvi;
  146. TCHAR szText[64];
  147. int nCount = ListView_GetItemCount(g_hLogMsgWnd);
  148. if (nCount >= 50)
  149. {
  150. ListView_DeleteItem(g_hLogMsgWnd, 0);
  151. nCount--;
  152. }
  153. lvi.mask = LVIF_TEXT;
  154. lvi.iItem = nCount;
  155. lvi.iSubItem = 0;
  156. _tstrdate(szText);
  157. lvi.pszText = szText;
  158. ListView_InsertItem(g_hLogMsgWnd, &lvi);
  159. _tstrtime(szText);
  160. ListView_SetItemText(g_hLogMsgWnd, nCount, 1, szText);
  161. return nCount;
  162. }
  163. void InsertLogMsg(UINT nID)
  164. {
  165. TCHAR szText[256];
  166. int nCount = AddNewLogMsg();
  167. LoadString(g_hInst, nID, szText, sizeof(szText));
  168. ListView_SetItemText(g_hLogMsgWnd, nCount, 2, szText);
  169. ListView_Scroll(g_hLogMsgWnd, 0, 8);
  170. }
  171. void InsertLogMsg(LPTSTR lpszMsg)
  172. {
  173. int nCount = AddNewLogMsg();
  174. ListView_SetItemText(g_hLogMsgWnd, nCount, 2, lpszMsg);
  175. ListView_Scroll(g_hLogMsgWnd, 0, 8);
  176. }