UiESCDlg.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:7k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // -------------------------------------------------------------------------
  2. // 文件名 : UiESCDlg.cpp
  3. // 创建者 : 彭建波
  4. // 创建时间 : 2002-9-16 10:32:27
  5. // 功能描述 :
  6. //
  7. // -------------------------------------------------------------------------
  8. #include "KWin32.h"
  9. #include "KIniFile.h"
  10. #include "../Elem/WndMessage.h"
  11. #include "../Elem/Wnds.h"
  12. #include "UiESCDlg.h"
  13. #include "UiSelPlayer.h"
  14. #include "UiInit.h"
  15. #include "UiOptions.h"
  16. #include "UiItem.h"
  17. #include "UiSkills.h"
  18. #include "UiStatus.h"
  19. #include "UiConnectInfo.h"
  20. #include "../UiShell.h"
  21. #include "../../../core/src/coreshell.h"
  22. #include "../UiBase.h"
  23. #include "../UiSoundSetting.h"
  24. #include "UiHelper2.h"
  25. #include "UiTaskNote.h"
  26. extern iCoreShell* g_pCoreShell;
  27. #define SCHEME_INI_INIT  "ESC打开的界面.ini"
  28. KUiESCDlg* KUiESCDlg::m_pSelf = NULL;
  29. //--------------------------------------------------------------------------
  30. // 功能:打开窗口,返回唯一的一个类对象实例
  31. //--------------------------------------------------------------------------
  32. KUiESCDlg* KUiESCDlg::OpenWindow()
  33. {
  34. if (m_pSelf == NULL)
  35. {
  36. m_pSelf = new KUiESCDlg;
  37. if (m_pSelf)
  38. m_pSelf->Initialize();
  39. }
  40. if (m_pSelf)
  41. {
  42. UiSoundPlay(UI_SI_WND_OPENCLOSE);
  43. m_pSelf->Show();
  44. m_pSelf->BringToTop();
  45. }
  46. return m_pSelf;
  47. }
  48. KUiESCDlg::~KUiESCDlg()
  49. {
  50. Hide();
  51. }
  52. //--------------------------------------------------------------------------
  53. // 功能:关闭销毁窗口
  54. //--------------------------------------------------------------------------
  55. void KUiESCDlg::CloseWindow(bool bDestroy)
  56. {
  57. if (m_pSelf)
  58. {
  59. if (bDestroy)
  60. {
  61. m_pSelf->Destroy();
  62. m_pSelf = NULL;
  63. }
  64. else
  65. m_pSelf->Hide();
  66. }
  67. }
  68. KUiESCDlg* KUiESCDlg::GetIfVisible()
  69. {
  70. if (m_pSelf && m_pSelf->IsVisible())
  71. return m_pSelf;
  72. return NULL;
  73. }
  74. //显示窗口
  75. void KUiESCDlg::Show()
  76. {
  77. KWndShowAnimate::Show();
  78. Wnd_SetExclusive((KWndWindow*)this);
  79. }
  80. //隐藏窗口
  81. void KUiESCDlg::Hide()
  82. {
  83. Wnd_ReleaseExclusive((KWndWindow*)this);
  84. KWndShowAnimate::Hide();
  85. }
  86. //--------------------------------------------------------------------------
  87. // 功能:初始化
  88. //--------------------------------------------------------------------------
  89. int KUiESCDlg::Initialize()
  90. {
  91. AddChild(&m_ContinueGameBtn);
  92. AddChild(&m_ExitGameBtn);
  93. AddChild(&m_OptionsBtn);
  94. //AddChild(&m_ExitBtn);
  95. AddChild(&m_HelpBtn);
  96. //AddChild(&m_TaskBtn);
  97. Wnd_AddWindow(this, WL_TOPMOST);
  98. char Scheme[256];
  99. g_UiBase.GetCurSchemePath(Scheme, 256);
  100. LoadScheme(Scheme);
  101. return true;
  102. }
  103. //--------------------------------------------------------------------------
  104. // 功能:载入窗口的界面方案
  105. //--------------------------------------------------------------------------
  106. void KUiESCDlg::LoadScheme(const char* pScheme)
  107. {
  108. char Buff[128];
  109. KIniFile Ini;
  110. sprintf(Buff, "%s\%s", pScheme, SCHEME_INI_INIT);
  111. if (Ini.Load(Buff))
  112. {
  113. Init(&Ini, "Main");
  114. m_ContinueGameBtn.Init(&Ini, "ContiumeGame");
  115. m_OptionsBtn.Init(&Ini, "Options");
  116. //m_ExitBtn.Init(&Ini, "CloseGame");
  117. m_ExitGameBtn.Init(&Ini, "ExitGame");
  118. m_HelpBtn.Init(&Ini, "GameHelp");
  119. //m_TaskBtn.Init(&Ini, "GameTask");
  120. }
  121. }
  122. //--------------------------------------------------------------------------
  123. // 功能:窗口消息函数
  124. //--------------------------------------------------------------------------
  125. int KUiESCDlg::WndProc(unsigned int uMsg, unsigned int uParam, int nParam)
  126. {
  127. int nRet = 0;
  128. switch(uMsg)
  129. {
  130. case WND_N_BUTTON_CLICK:
  131. OnClickButton((KWndWindow*)uParam);
  132. break;
  133. case WM_KEYDOWN:
  134. nRet = OnKeyDown(uParam);
  135. break;
  136. default:
  137. nRet = KWndShowAnimate::WndProc(uMsg, uParam, nParam);
  138. }
  139. return nRet;
  140. }
  141. int KUiESCDlg::OnKeyDown(unsigned int uKey)
  142. {
  143. int nRet = 1;
  144. KWndButton* pActive = NULL;
  145. KWndButton* pToActive = NULL;
  146. if (uKey == VK_RETURN)
  147. {
  148. if (pActive = GetActiveBtn())
  149. OnClickButton(pActive);
  150. }
  151. else if (uKey == VK_ESCAPE)
  152. CloseWindow(false);
  153. else if (uKey == VK_UP)
  154. {
  155. pActive = GetActiveBtn();
  156. if (pActive == &m_ExitGameBtn)
  157. pToActive = &m_ContinueGameBtn;
  158. //else if (pActive == &m_ExitBtn)
  159. // pToActive = &m_ExitGameBtn;
  160. else if (pActive == &m_HelpBtn)
  161. pToActive = &m_ExitGameBtn;
  162. //else if (pActive == &m_TaskBtn)
  163. // pToActive = &m_HelpBtn;
  164. else if (pActive == &m_OptionsBtn)
  165. pToActive = &m_HelpBtn;
  166. else if (pActive == &m_ContinueGameBtn)
  167. pToActive = &m_OptionsBtn;
  168. else
  169. pToActive = &m_ExitGameBtn;
  170. }
  171. else if (uKey == VK_DOWN)
  172. {
  173. pActive = GetActiveBtn();
  174. if (pActive == &m_ExitGameBtn)
  175. pToActive = &m_HelpBtn;
  176. //else if (pActive == &m_ExitBtn)
  177. // pToActive = &m_HelpBtn;
  178. else if (pActive == &m_HelpBtn)
  179. pToActive = &m_OptionsBtn;
  180. //else if (pActive == &m_TaskBtn)
  181. // pToActive = &m_OptionsBtn;
  182. else if (pActive == &m_OptionsBtn)
  183. pToActive = &m_ContinueGameBtn;
  184. else if (pActive == &m_ContinueGameBtn)
  185. pToActive = &m_ExitGameBtn;
  186. else
  187. pToActive = &m_ExitGameBtn;
  188. }
  189. else
  190. nRet = 0;
  191. if (pToActive)
  192. {
  193. POINT Pos;
  194. SIZE Size;
  195. pToActive->GetAbsolutePos((int*)&Pos.x, (int*)&Pos.y);
  196. pToActive->GetSize((int*)&Size.cx, (int*)&Size.cy);
  197. Pos.x += Size.cx / 2;
  198. Pos.y += Size.cy / 2;
  199. Wnd_SetCursorPos(Pos.x, Pos.y);
  200. }
  201. return nRet;
  202. }
  203. //--------------------------------------------------------------------------
  204. // 功能:响应点击按钮
  205. //--------------------------------------------------------------------------
  206. void KUiESCDlg::OnClickButton(KWndWindow* pWnd)
  207. {
  208. if (pWnd == (KWndWindow*)&m_ContinueGameBtn)
  209. Hide();
  210. else if (pWnd == (KWndWindow*)&m_OptionsBtn)
  211. {
  212. Hide();
  213. KUiOptions::OpenWindow();
  214. }
  215. else if (pWnd == (KWndWindow*)&m_ExitGameBtn)
  216. {
  217. Hide();
  218. g_pCoreShell->OperationRequest(GOI_EXIT_GAME, 0, 0);
  219. g_LoginLogic.ReturnToIdle();
  220. UiEndGame();
  221. KUiInit::OpenWindow(true, false);
  222. }
  223. //else if (pWnd == (KWndWindow*)&m_ExitBtn)
  224. //{
  225. // UiPostQuitMsg();
  226. //}
  227. else if (pWnd == (KWndWindow*)&m_HelpBtn)
  228. {
  229. Hide();
  230. KUiHelper2::OpenWindow(true);
  231. }
  232. //else if (pWnd == (KWndWindow*)&m_TaskBtn)
  233. //{
  234. // Hide();
  235. // KUiTaskNote::OpenWindow(true);
  236. //}
  237. }
  238. KWndButton* KUiESCDlg::GetActiveBtn()
  239. {
  240. KWndButton* pBtn = NULL;
  241. if (m_ContinueGameBtn.IsButtonActive())
  242. pBtn = &m_ContinueGameBtn;
  243. else if (m_OptionsBtn.IsButtonActive())
  244. pBtn = &m_OptionsBtn;
  245. //else if (m_ExitBtn.IsButtonActive())
  246. // pBtn = &m_ExitBtn;
  247. else if (m_HelpBtn.IsButtonActive())
  248. pBtn = &m_HelpBtn;
  249. //else if (m_TaskBtn.IsButtonActive())
  250. // pBtn = &m_TaskBtn;
  251. else if (m_ExitGameBtn.IsButtonActive())
  252. pBtn = &m_ExitGameBtn;
  253. return pBtn;
  254. }