winmain.cpp
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:4k
源码类别:

游戏

开发平台:

Visual C++

  1. /*---------------------------------------------
  2.    HEAD.C -- Displays beginning (head) of file
  3.              (c) Charles Petzold, 1998
  4.   ---------------------------------------------*/
  5. #include <windows.h>
  6. #define ID_LIST     1
  7. #define MAXNOTICE 64
  8. HWND     hwndList;
  9. bool InitServer();
  10. void TerminateServer();
  11. DWORD WINAPI AcceptThread( LPVOID pParam );
  12. DWORD WINAPI WorkerThread( LPVOID pParam ); 
  13. LRESULT CALLBACK WndProc  (HWND, UINT, WPARAM, LPARAM) ;
  14. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  15.                     PSTR szCmdLine, int iCmdShow)
  16. {
  17.      static TCHAR szAppName[] = TEXT ("serverv2") ;
  18.      HWND         hwnd ;
  19.      MSG          msg ;
  20.      WNDCLASS     wndclass ;
  21.      
  22.      wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  23.      wndclass.lpfnWndProc   = WndProc ;
  24.      wndclass.cbClsExtra    = 0 ;
  25.      wndclass.cbWndExtra    = 0 ;
  26.      wndclass.hInstance     = hInstance ;
  27.      wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
  28.      wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  29.      wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ;
  30.      wndclass.lpszMenuName  = NULL ;
  31.      wndclass.lpszClassName = szAppName ;
  32.      
  33.      if (!RegisterClass (&wndclass))
  34.      {
  35.           MessageBox (NULL, TEXT ("This program requires Windows NT!"),
  36.                       szAppName, MB_ICONERROR) ;
  37.           return 0 ;
  38.      }
  39.      
  40.      hwnd = CreateWindow (szAppName, TEXT ("Server v2.0"),
  41.                           WS_OVERLAPPEDWINDOW ^WS_SIZEBOX^WS_MAXIMIZEBOX, 
  42.                           CW_USEDEFAULT, CW_USEDEFAULT,
  43.                           400,300,
  44.                           NULL, NULL, hInstance, NULL) ;
  45.      
  46.      ShowWindow (hwnd, iCmdShow) ;
  47.      UpdateWindow (hwnd) ;
  48.      
  49.      while (GetMessage (&msg, NULL, 0, 0))
  50.      {
  51.           TranslateMessage (&msg) ;
  52.           DispatchMessage (&msg) ;
  53.      }
  54.      return msg.wParam ;
  55. }
  56. LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  57. {
  58.      int cxChar, cyChar ;
  59.      
  60.      switch (message)
  61.      {
  62.      case WM_CREATE :
  63.           cxChar = LOWORD (GetDialogBaseUnits ()) ;
  64.           cyChar = HIWORD (GetDialogBaseUnits ()) ;
  65.            
  66.           hwndList = CreateWindow (TEXT ("listbox"), NULL,
  67.                               WS_CHILDWINDOW | WS_VISIBLE | LBS_STANDARD ^ LBS_SORT,
  68.                               cxChar, cyChar,
  69.                               cxChar * 44 + GetSystemMetrics (SM_CXVSCROLL),
  70.                               cyChar * 16,
  71.                               hwnd, (HMENU) ID_LIST,
  72.                               (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),
  73.                               NULL) ;
  74.           
  75.   if ( !InitServer() )
  76.   PostQuitMessage (0) ;
  77.   CreateThread( NULL, 0, AcceptThread, NULL, 0, NULL );
  78.   CreateThread( NULL, 0, WorkerThread, NULL, 0, NULL );
  79.           return 0 ;
  80.           
  81.      case WM_SETFOCUS :
  82.           SetFocus (hwndList) ;
  83.           return 0 ;
  84.           
  85. //     case WM_COMMAND :
  86. //          return 0 ;
  87.    
  88.      case WM_DESTROY :
  89.   TerminateServer();
  90.           PostQuitMessage (0) ;
  91.           return 0 ;
  92.      }
  93.      return DefWindowProc (hwnd, message, wParam, lParam) ;
  94. }
  95. void Notice( int num, ...)
  96. {
  97. TCHAR *s = new TCHAR[MAXNOTICE];
  98. s[0] = 0;
  99. va_list vl;
  100.     va_start( vl, num );
  101.     // Step through the list.
  102.     for( int i = 0; i<num ; i++ )
  103.         lstrcat( s, va_arg( vl, TCHAR * ) );
  104.     va_end( vl );
  105. // Display msg
  106. SendMessage( hwndList, LB_ADDSTRING, 0, (LPARAM)s );
  107. }
  108. void Notice( LPCTSTR head, int msgid ) {
  109. TCHAR *s = new TCHAR[MAXNOTICE];
  110. lstrcpy( s, head );
  111. int len = strlen( s );
  112. itoa( msgid, &s[len], 16 );
  113. s[len+4] = 0;
  114. // Display msg
  115. SendMessage( hwndList, LB_ADDSTRING, 0, (LPARAM)s );
  116. }
  117.