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

游戏

开发平台:

Visual C++

  1. #include "global.h"
  2. #include "ddutil.h"
  3. extern CDisplay Display;
  4. extern HWND hMainWnd, hChildWnd;
  5. //-----------------------------------------------------------------------------
  6. // Global variables for command analyse
  7. //-----------------------------------------------------------------------------
  8. bool bKeyPressed[6] = { 0,0,0,0,0,0 };
  9. bool bFired = false;
  10. unsigned int uiRecentCmd = 0, uiCurrentCmd = 0;
  11. unsigned int KeyMap[6] = { 0, VK_RIGHT, VK_DOWN, VK_UP, VK_LEFT, VK_SPACE};
  12. //-----------------------------------------------------------------------------
  13. // Name: MainWndProc()
  14. // Desc: Callback message procedure of the main window
  15. //-----------------------------------------------------------------------------
  16. LRESULT CALLBACK MainWndProc( HWND hwnd, UINT message,
  17.  WPARAM wParam, LPARAM lParam)
  18. {
  19.     switch ( message )
  20.     {
  21.     case WM_CREATE:
  22.         break;
  23. case WM_ACTIVATE:
  24. if ( LOWORD(wParam) == WA_INACTIVE )
  25. g_bActive = false;
  26. else {
  27. g_bActive = true;
  28. SetFocus( hChildWnd ); 
  29. }
  30. break;
  31. case WM_COMMAND:
  32. break;
  33. case WM_MOVE:
  34. Display.UpdateBounds();
  35.     break;
  36. case WM_SIZE:
  37. Display.UpdateBounds();
  38.     break;
  39.     case WM_DESTROY:
  40.         PostQuitMessage(0);
  41.         break;
  42.     }
  43.     return DefWindowProc( hwnd, message, wParam, lParam );
  44. }
  45. //-----------------------------------------------------------------------------
  46. // Name: GameWndProc()
  47. // Desc: Callback message procedure of the game window
  48. //-----------------------------------------------------------------------------
  49. LRESULT CALLBACK GameWndProc( HWND hwnd, UINT message,
  50.  WPARAM wParam, LPARAM lParam )
  51. {
  52. int i;
  53. uiCurrentCmd = 0;
  54. bFired = false;
  55.     
  56. switch (message)
  57.     {
  58. case WM_CREATE:
  59. g_bActive = true;
  60. break;
  61. case WM_LBUTTONDOWN:
  62. SetFocus(hwnd);
  63. break;
  64. case WM_KEYDOWN:
  65. for(i=1;i<5;i++) { // Pressed any direction button?
  66. if( wParam == KeyMap[i] ) {
  67. bKeyPressed[i] = true;
  68. uiCurrentCmd = i;
  69. uiRecentCmd = i;
  70. goto end_gameproc;
  71. }
  72. }
  73. // Not a direction button
  74. if ( wParam == KeyMap[5] ) // the fire button ?
  75. bFired = true;
  76. break;
  77. case WM_KEYUP:
  78. for( i=1; i<5; i++)
  79. if( wParam == KeyMap[i] ) {
  80. bKeyPressed[i] = false;
  81. break;
  82. }
  83. break;
  84. case WM_CLOSE:
  85. g_bActive = false;
  86. break;
  87. }
  88. // No input msg received
  89. if ( bKeyPressed[uiRecentCmd] ) // if the recent cmd is valid
  90. uiCurrentCmd = uiRecentCmd;
  91. else { // test all keys to find a valid one
  92. for( i=4; i>0; i--)
  93. if( bKeyPressed[i] ) 
  94. break;
  95. uiRecentCmd = i; // 4 - 0
  96. uiCurrentCmd = i;
  97. }
  98. end_gameproc:
  99. return DefWindowProc ( hwnd, message, wParam, lParam );
  100. }