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

模拟服务器

开发平台:

C/C++

  1. // -------------------------------------------------------------------------
  2. // 文件名 : UiGetMoney.cpp
  3. // 创建者 : Wooy(Wu yue)
  4. // 创建时间 : 2003-1-7
  5. // 功能描述 : 取钱界面
  6. // -------------------------------------------------------------------------
  7. #include "KWin32.h"
  8. #include "KIniFile.h"
  9. #include "../Elem/AutoLocateWnd.h"
  10. #include "../Elem/WndMessage.h"
  11. #include "../Elem/Wnds.h"
  12. #include "../UiBase.h"
  13. #include "UiGetMoney.h"
  14. #include "../UiSoundSetting.h"
  15. #define SCHEME_INI  "取钱界面.ini"
  16. KUiGetMoney* KUiGetMoney::m_pSelf = NULL;
  17. KUiGetMoney::KUiGetMoney()
  18. {
  19. m_pRequester = NULL;
  20. m_nMaxMoney = 0;
  21. }
  22. //--------------------------------------------------------------------------
  23. // 功能:打开窗口,返回唯一的一个类对象实例
  24. //--------------------------------------------------------------------------
  25. KUiGetMoney* KUiGetMoney::OpenWindow(int nMoney, int nMaxMoney,
  26. KWndWindow* pRequester, unsigned int uParam, KWndWindow* pMoneyWnd)
  27. {
  28. if (m_pSelf == NULL)
  29. {
  30. m_pSelf = new KUiGetMoney;
  31. if (m_pSelf)
  32. m_pSelf->Initialize();
  33. }
  34. if (m_pSelf)
  35. {
  36. UiSoundPlay(UI_SI_WND_OPENCLOSE);
  37. m_pSelf->m_pRequester = pRequester;
  38. m_pSelf->m_uRequesterParam = uParam;
  39. if (nMaxMoney > 0)
  40. m_pSelf->m_nMaxMoney = nMaxMoney;
  41. else
  42. m_pSelf->m_nMaxMoney = 0;
  43. m_pSelf->m_Money.SetIntText(nMoney);
  44. m_pSelf->Show(pMoneyWnd);
  45. m_pSelf->BringToTop();
  46. }
  47. return m_pSelf;
  48. }
  49. //--------------------------------------------------------------------------
  50. // 功能:关闭销毁窗口
  51. //--------------------------------------------------------------------------
  52. void KUiGetMoney::CloseWindow(bool bDestroy)
  53. {
  54. if (m_pSelf)
  55. {
  56. m_pSelf->m_pRequester = NULL;
  57. if (bDestroy)
  58. {
  59. m_pSelf->Destroy();
  60. m_pSelf = NULL;
  61. }
  62. else
  63. m_pSelf->Hide();
  64. }
  65. }
  66. KUiGetMoney* KUiGetMoney::GetIfVisible()
  67. {
  68. if (m_pSelf && m_pSelf->IsVisible())
  69. return m_pSelf;
  70. return NULL;
  71. }
  72. //显示窗口
  73. void KUiGetMoney::Show(KWndWindow* pMoneyWnd)
  74. {
  75. int Left, Top;
  76. if (pMoneyWnd)
  77. {
  78. pMoneyWnd->GetAbsolutePos(&Left, &Top);
  79. int nWidth;
  80. pMoneyWnd->GetSize(&nWidth, NULL);
  81. Left += nWidth / 2;
  82. ALW_GetWndPosition(Left, Top, m_Width, m_Height, true);
  83. }
  84. else
  85. ALW_GetWndPosition(Left, Top, m_Width, m_Height);
  86. SetPosition(Left, Top);
  87. KWndImage::Show();
  88. Wnd_SetFocusWnd(&m_Money);
  89. Wnd_SetExclusive((KWndWindow*)this);
  90. }
  91. //隐藏窗口
  92. void KUiGetMoney::Hide()
  93. {
  94. Wnd_ReleaseExclusive((KWndWindow*)this);
  95. KWndImage::Hide();
  96. }
  97. //--------------------------------------------------------------------------
  98. // 功能:初始化
  99. //--------------------------------------------------------------------------
  100. int KUiGetMoney::Initialize()
  101. {
  102. AddChild(&m_Money);
  103. AddChild(&m_OkBtn);
  104. AddChild(&m_CancelBtn);
  105. Wnd_AddWindow(this);
  106. char Scheme[256];
  107. g_UiBase.GetCurSchemePath(Scheme, 256);
  108. LoadScheme(Scheme);
  109. return true;
  110. }
  111. //--------------------------------------------------------------------------
  112. // 功能:载入窗口的界面方案
  113. //--------------------------------------------------------------------------
  114. void KUiGetMoney::LoadScheme(const char* pScheme)
  115. {
  116. if (m_pSelf)
  117. {
  118. char Buff[128];
  119. KIniFile Ini;
  120. sprintf(Buff, "%s\%s", pScheme, SCHEME_INI);
  121. if (Ini.Load(Buff))
  122. {
  123. m_pSelf->Init(&Ini, "Main");
  124. m_pSelf->m_Money.Init(&Ini, "MoneyInput");
  125. m_pSelf->m_OkBtn.Init(&Ini, "OkBtn");
  126. m_pSelf->m_CancelBtn.Init(&Ini, "CancelBtn");
  127. }
  128. }
  129. }
  130. //--------------------------------------------------------------------------
  131. // 功能:窗口消息函数
  132. //--------------------------------------------------------------------------
  133. int KUiGetMoney::WndProc(unsigned int uMsg, unsigned int uParam, int nParam)
  134. {
  135. int nRet = 0;
  136. switch(uMsg)
  137. {
  138. case WND_N_BUTTON_CLICK:
  139. if (uParam == (unsigned int)(KWndWindow*)&m_OkBtn)
  140. OnOk();
  141. else if (uParam == (unsigned int)(KWndWindow*)&m_CancelBtn)
  142. OnCancel();
  143. break;
  144. case WM_KEYDOWN:
  145. if (uParam == VK_RETURN)
  146. {
  147. OnOk();
  148. nRet = 1;
  149. }
  150. else if (uParam == VK_ESCAPE)
  151. {
  152. OnCancel();
  153. nRet = 1;
  154. }
  155. break;
  156. case WND_N_EDIT_SPECIAL_KEY_DOWN:
  157. if (nParam == VK_RETURN &&
  158. uParam == (unsigned int)(KWndWindow*)&m_Money)
  159. {
  160. OnOk();
  161. nRet = 1;
  162. }
  163. break;
  164. case WND_N_EDIT_CHANGE:
  165. OnCheckInput();
  166. break;
  167. default:
  168. nRet = KWndImage::WndProc(uMsg, uParam, nParam);
  169. }
  170. return nRet;
  171. }
  172. //--------------------------------------------------------------------------
  173. // 功能:响应点击确认按钮
  174. //--------------------------------------------------------------------------
  175. void KUiGetMoney::OnOk()
  176. {
  177. OnCheckInput();
  178. int nMoney = m_Money.GetIntNumber();
  179. if (m_pRequester)
  180. m_pRequester->WndProc(WND_M_OTHER_WORK_RESULT, m_uRequesterParam, WND_OPER_RESULT(nMoney));
  181. CloseWindow(true);
  182. }
  183. void KUiGetMoney::OnCheckInput()
  184. {
  185. int nMoney = m_Money.GetIntNumber();
  186. if (nMoney < 0)
  187. nMoney = 0;
  188. else if (nMoney > m_nMaxMoney)
  189. nMoney = m_nMaxMoney;
  190. char szBuff1[16], szBuff2[16];
  191. itoa(nMoney, szBuff1, 10);
  192. m_Money.GetText(szBuff2, sizeof(szBuff2), true);
  193. if (strcmp(szBuff1, szBuff2))
  194. m_Money.SetIntText(nMoney);
  195. }
  196. void KUiGetMoney::OnCancel()
  197. {
  198. if (m_pRequester)
  199. m_pRequester->WndProc(WND_M_OTHER_WORK_RESULT, m_uRequesterParam, WND_OPER_RESULT(-1));
  200. CloseWindow(true);
  201. }