BoxManWnd.cpp
上传用户:qiangti
上传日期:2022-04-06
资源大小:644k
文件大小:4k
源码类别:

其他智力游戏

开发平台:

Visual C++

  1. /*++
  2. Copyright (c) AFE(Active-Free-Elegance)
  3. Module Name:
  4.      BoxManWnd.cpp
  5. Abstract:
  6. The Main Frame Class of the Game.
  7. Author:
  8.     Weijian Luo (Arthur Luo)   15-Jun-2005
  9. E-mail: skybluehacker@yahoo.com.cn
  10. Revision History:      1.0
  11. --*/
  12. #include "stdafx.h"
  13. #include "skyblue_BoxMan.h"
  14. #include "BoxManWnd.h"
  15. #include "HelpDlg.h"
  16. #include "MissionLevelDlg.h"
  17. #include <Mmsystem.h>   //音效  Winmm.lib
  18. #ifdef _DEBUG
  19. #define new DEBUG_NEW
  20. #undef THIS_FILE
  21. static char THIS_FILE[] = __FILE__;
  22. #endif
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CBoxManWnd
  25. IMPLEMENT_DYNCREATE(CBoxManWnd, CWnd)
  26. CBoxManWnd::CBoxManWnd()
  27. {
  28. }
  29. CBoxManWnd::~CBoxManWnd()
  30. {
  31. }
  32. BEGIN_MESSAGE_MAP(CBoxManWnd, CWnd)
  33. //{{AFX_MSG_MAP(CBoxManWnd)
  34. ON_COMMAND(ID_MENU_GAME_EXIT, OnMenuGameExit)
  35. ON_WM_PAINT()
  36. ON_WM_KEYDOWN()
  37. ON_COMMAND(ID_MENU_GAME_HELP, OnMenuGameHelp)
  38. ON_COMMAND(ID_MENU_GAME_LEVEL, OnMenuGameLevel)
  39. ON_COMMAND(ID_MENU_GAME_MUSIC, OnMenuGameMusic)
  40. ON_WM_INITMENU()
  41. //}}AFX_MSG_MAP
  42. END_MESSAGE_MAP()
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CBoxManWnd message handlers
  45. //
  46. // 退出游戏
  47. //
  48. void CBoxManWnd::OnMenuGameExit() 
  49. {
  50. PostQuitMessage(0);
  51. }
  52. //
  53. //  绘图
  54. //
  55. void CBoxManWnd::OnPaint() 
  56. {
  57. CPaintDC dc(this); // PaintDC设备环境
  58. CDC memDC;         //内存设备环境
  59. CRect rt;          //子窗口矩形
  60. CBitmap memBmp;    //内存位图
  61. //兼容关联显示设备
  62. memDC.CreateCompatibleDC(&dc);  
  63. //获取子区域大小
  64. GetClientRect(&rt);  
  65. //初始化位图,使得与显示设备兼容
  66. memBmp.CreateCompatibleBitmap(&dc,rt.Width(),rt.Height());
  67. //关联位图
  68. memDC.SelectObject(&memBmp);
  69. //在内存设备环境绘制
  70. m_boxMan.DrawGameArea(&memDC);
  71. //从内存设备环境一次拷贝整个绘制图像到屏幕
  72. dc.BitBlt(0,0,rt.Width(),rt.Height(),&memDC,0,0,SRCCOPY);
  73. // Do not call CWnd::OnPaint() for painting messages
  74. }
  75. //
  76. // 键盘消息
  77. //
  78. void CBoxManWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
  79. {
  80. m_boxMan.KeyDown(nChar, nRepCnt, nFlags);
  81. Invalidate(FALSE);
  82. CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
  83. }
  84. //
  85. // 帮助
  86. //
  87. void CBoxManWnd::OnMenuGameHelp() 
  88. {
  89. CHelpDlg helpDlg;
  90. helpDlg.DoModal();
  91. }
  92. //
  93. // 选关
  94. //
  95. void CBoxManWnd::OnMenuGameLevel() 
  96. {
  97. CMissionLevelDlg missionDlg;
  98. missionDlg.m_iMisslionLev = m_boxMan.GetNowMissionNum();
  99. if(missionDlg.DoModal() == IDOK)
  100. {
  101. int iMissionLev = 1;
  102. iMissionLev = missionDlg.m_iMisslionLev;
  103. m_boxMan.ChangeMissionNum(iMissionLev);
  104. Invalidate(FALSE);
  105. }
  106. }
  107. void CBoxManWnd::OnMenuGameMusic() 
  108. {
  109. //作“自反”改变
  110. m_bSound = (!m_bSound);  
  111. //CBoxMan对象修改启用声音状态
  112. m_boxMan.IsSound(m_bSound); 
  113. //菜单修改是否已经选用标记效果
  114. if (m_pSubMenu)
  115. {
  116. if (m_bSound == TRUE) 
  117. {
  118. m_pSubMenu->CheckMenuItem(ID_MENU_GAME_MUSIC, MF_CHECKED | MF_BYCOMMAND);
  119. }
  120. else 
  121. {
  122. m_pSubMenu->CheckMenuItem(ID_MENU_GAME_MUSIC, MF_UNCHECKED | MF_BYCOMMAND);
  123. }
  124. }
  125. }
  126. void CBoxManWnd::OnInitMenu(CMenu* pMenu) 
  127. {
  128. CWnd::OnInitMenu(pMenu);
  129. //添加以下部分
  130. //保存主菜单的句柄到m_pSubMenu
  131. if ((m_pSubMenu = pMenu->GetSubMenu(0)) == 0) 
  132. {
  133. AfxMessageBox("初始化菜单失败");
  134. PostQuitMessage(0);
  135. }
  136. }
  137. void CBoxManWnd::SetCheckSound(void)
  138. {
  139. m_bSound = (!m_bSound);
  140. m_boxMan.IsSound(m_bSound);
  141. if (m_pSubMenu)
  142. {
  143. if (m_bSound == TRUE) 
  144. {
  145. m_pSubMenu->CheckMenuItem(ID_MENU_GAME_MUSIC, MF_CHECKED | MF_BYCOMMAND);
  146. }
  147. else 
  148. {
  149. m_pSubMenu->CheckMenuItem(ID_MENU_GAME_MUSIC, MF_UNCHECKED | MF_BYCOMMAND);
  150. }
  151. }
  152. }