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

游戏

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// File:    WinMain.cpp
  3. /// Purpose: Application entry point and main processing loop
  4. ///////////////////////////////////////////////////////////////////////////////
  5. /// Configuation Management
  6. /// 
  7. /// Who         When          Description
  8. /// ===========================================================================
  9. /// R. Walter   28-Dec-2003   Initial Version/Release
  10. ///
  11. ///////////////////////////////////////////////////////////////////////////////
  12. /// Copyright 2003: Robert Walter   All rights reserved
  13. ///////////////////////////////////////////////////////////////////////////////
  14. /// APPLICATION DEFINES ///////////////////////////////////////////////////////
  15. #define WIN32_LEAN_AND_MEAN /** no MFC **/
  16. #define INITGUID
  17. /// HEADER FILE INCLUDES //////////////////////////////////////////////////////
  18. #include <windows.h>
  19. #include <windowsx.h>
  20. #include "CSuperBrickBreaker.h"
  21. /// CONSTANTS /////////////////////////////////////////////////////////////////
  22. const char* WIN_CLASS_NM = "WINCLASSNAME";
  23. const char* WINDOW_NM    = "WINDOWNAME";
  24. const DWORD SCREEN_HEIGHT = 600;
  25. const DWORD SCREEN_WIDTH  = 800;
  26. const DWORD SCREEN_BPP    = 16;
  27. const DWORD FRAME_RATE    = 20;
  28. const int FAILED_REG_CLASS  = 1;
  29. const int FAILED_WIN_CREATE = 2;
  30. const int FAILED_DD_INIT    = 3;
  31. const int FAILED_DI_INIT    = 4;
  32. const int FAILED_DS_INIT    = 5;
  33. const int FAILED_GAME_INIT  = 6;
  34. const int FAILED_GAME_MAIN  = 7;
  35. /// TYPE DEFINITIONS //////////////////////////////////////////////////////////
  36. /// FUNCTION PROTOTYPES ///////////////////////////////////////////////////////
  37. LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
  38. /// GLOBAL VARIABLES //////////////////////////////////////////////////////////
  39. HWND gbl_main_hwnd;
  40. /// APPLICATION ENTRY POINT ///////////////////////////////////////////////////
  41. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
  42. {
  43.     // initialize and register main window class
  44.     WNDCLASSEX l_winclass;
  45.     l_winclass.cbClsExtra = 0;
  46.     l_winclass.cbSize = sizeof(WNDCLASSEX);
  47.     l_winclass.cbWndExtra = 0;
  48.     l_winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
  49.     l_winclass.hCursor = LoadCursor(NULL, IDI_APPLICATION);
  50.     l_winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  51.     l_winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  52.     l_winclass.hInstance = hInstance;
  53.     l_winclass.lpfnWndProc = MainWndProc;
  54.     l_winclass.lpszClassName = WIN_CLASS_NM;
  55.     l_winclass.lpszMenuName = NULL;
  56.     l_winclass.style = CS_OWNDC;
  57.     if (!RegisterClassEx(&l_winclass))
  58.     {
  59.         return(FAILED_REG_CLASS);
  60.     }
  61.     // create main window based on registered class
  62.     gbl_main_hwnd = CreateWindowEx
  63.                     (
  64.                         NULL,                  // dwExStyle    -- extended window style
  65.                         WIN_CLASS_NM,          // lpClassName  -- pointer to registered class name
  66.                         WINDOW_NM,             // lpWindowName -- pointer to window name (caption)
  67.                         WS_POPUP | WS_VISIBLE, // dwStyle      -- window style
  68.                         0,                     // x            -- x position of window on screen
  69.                         0,                     // y            -- y position of window on screen
  70.                         SCREEN_WIDTH,          // nWidth       -- window width
  71.                         SCREEN_HEIGHT,         // nHeight      -- window height
  72.                         NULL,                  // hWndParent   -- handle to parent window
  73.                         NULL,                  // hMenu        -- handle to window menu
  74.                         hInstance,             // hInstance    -- handle to this application instance
  75.                         NULL                   // lpParam      -- pointer to window creation data
  76.                     );
  77.     if (!gbl_main_hwnd)
  78.     {
  79.         return(FAILED_WIN_CREATE);
  80.     }
  81.     /// declare main game class to be used for this application ///////////////
  82.     CSuperBrickBreaker l_game;
  83. /// initialize DirectDraw /////////////////////////////////////////////////
  84. // set the screen properties
  85. l_game.SetScreenProperties
  86. (
  87.     /* screen width */  SCREEN_WIDTH,
  88. /* screen height */ SCREEN_HEIGHT,
  89. /* screen bpp */    SCREEN_BPP
  90. );
  91. // set the frame rate for the game
  92. l_game.SetFrameRate(/* frame rate */ 10);
  93. // set the application instance
  94. l_game.SetApplicationInstance(/* app instance */ hInstance);
  95. // set the main window handle
  96. l_game.SetWindowHandle(/* window handle */ gbl_main_hwnd);
  97. ShowCursor(FALSE);
  98. // initialize DirectDraw
  99. if (!l_game.InitializeDirectDraw())
  100. {
  101. return(FAILED_DD_INIT);
  102. }
  103. /// initialize DirectInput ////////////////////////////////////////////
  104.     if (!l_game.InitializeDirectInput())
  105. {
  106. return(FAILED_DI_INIT);
  107. }
  108. /// initialize game objects////////////////////////////////////////////
  109. if (!l_game.GameInitialize())
  110. {
  111.     return(FAILED_GAME_INIT);
  112. }
  113. /// main windows message loop /////////////////////////////////////////
  114. MSG msg;
  115. while (true)
  116. {
  117. // capture the start of this frame
  118. l_game.FrameRateStart();
  119. if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  120. {
  121. if (msg.message == WM_QUIT)
  122. {
  123. break;
  124. }
  125. TranslateMessage(&msg);
  126. DispatchMessage(&msg);
  127. }
  128. // process the next frame in the game
  129. if (!l_game.GameMain())
  130. {
  131. return(FAILED_GAME_MAIN);
  132. }
  133. // lock the frame rate
  134. l_game.FrameRateEnd();
  135. }
  136. /// shutdown game objects//////////////////////////////////////////////////
  137. l_game.GameShutdown();
  138. ShowCursor(TRUE);
  139.     return(msg.wParam);
  140. }
  141. /// FUNCTION DEFINITIONS //////////////////////////////////////////////////////
  142. ///////////////////////////////////////////////////////////////////////////////
  143. /// Function: MainWndProc
  144. /// Purpose:  Message handling function for the main window
  145. ///////////////////////////////////////////////////////////////////////////////
  146. LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
  147. {
  148.     switch(msg)
  149.     {
  150.     case WM_CREATE:
  151.         {
  152.             // tell windows we handled the message
  153.             // simply by returning zero
  154.             return(0);
  155.         } break;
  156.     case WM_PAINT:
  157.         {
  158.             // tell windows we handled the message
  159.             // by validating the window
  160.             PAINTSTRUCT ps;
  161.             HDC         hdc;
  162.             hdc = BeginPaint(hwnd, &ps);
  163.             EndPaint(hwnd, &ps);
  164.             return(0);
  165.         } break;
  166.     case WM_DESTROY:
  167.         {
  168.             // send quit message to application
  169.             PostQuitMessage(0);
  170.             return(0);
  171.         } break;
  172.     default: return DefWindowProc(hwnd, msg, wparam, lparam);
  173.     };
  174. }
  175. /// END OF FILE ///////////////////////////////////////////////////////////////