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

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 界面--消息窗口
  3. // Copyright : Kingsoft 2002
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2002-8-14
  6. ------------------------------------------------------------------------------------------
  7. *****************************************************************************************/
  8. #include "KWin32.h"
  9. #include "KIniFile.h"
  10. #include "../Elem/Wnds.h"
  11. #include "../Elem/WndMessage.h"
  12. #include "UiInformation.h"
  13. #include "../UiSoundSetting.h"
  14. #define SCHEME_INI "提示.ini"
  15. KUiInformation g_UiInformation;
  16. void UIMessageBox(const char* pMsg,
  17.   KWndWindow* pCaller /*= 0*/,
  18.   const char* pszFirstBtnText /*= "确定"*/,
  19.   const char* pszSecondBtnText /*= 0*/,   
  20.   unsigned int uParam /*= 0*/)
  21. {
  22. g_UiInformation.Show(pMsg, pszFirstBtnText, pszSecondBtnText, pCaller, uParam);
  23. }
  24. void UiCloseMessageBox()
  25. {
  26. g_UiInformation.Close();
  27. }
  28. //--------------------------------------------------------------------------
  29. // 功能:构造函数
  30. //--------------------------------------------------------------------------
  31. KUiInformation::KUiInformation()
  32. {
  33. m_pCallerWnd = NULL;
  34. m_nOrigFirstBtnXPos = 0;
  35. m_nCentreBtnXPos = 0;
  36. }
  37. //--------------------------------------------------------------------------
  38. // 功能:初始化
  39. //--------------------------------------------------------------------------
  40. void KUiInformation::Initialize()
  41. {
  42. m_pCallerWnd = NULL;
  43. AddChild(&m_Information);
  44. AddChild(&m_FirstBtn);
  45. AddChild(&m_SecondBtn);
  46. m_Style &= ~WND_S_VISIBLE;
  47. Wnd_AddWindow(this, WL_TOPMOST);
  48. }
  49. //--------------------------------------------------------------------------
  50. // 功能:载入窗口的界面方案
  51. //--------------------------------------------------------------------------
  52. void KUiInformation::LoadScheme(const char* pScheme)
  53. {
  54. char Buff[128];
  55. KIniFile Ini;
  56. sprintf(Buff, "%s\%s", pScheme, SCHEME_INI);
  57. if (Ini.Load(Buff))
  58. {
  59. KWndShowAnimate::Init(&Ini, "Main");
  60. m_Information .Init(&Ini, "Info");
  61. m_FirstBtn .Init(&Ini, "FirstBtn");
  62. m_SecondBtn.Init(&Ini, "SecondBtn");
  63. m_FirstBtn.GetPosition(&m_nOrigFirstBtnXPos, 0);
  64. m_FirstBtn.GetSize(&m_nCentreBtnXPos, 0);
  65. m_nCentreBtnXPos = (m_Width - m_nCentreBtnXPos) / 2;
  66. }
  67. }
  68. //--------------------------------------------------------------------------
  69. // 功能:显示窗口
  70. //--------------------------------------------------------------------------
  71. void KUiInformation::Show(const char* pInformation,
  72. const char* pszFirstBtnText,
  73. const char* pszSecondBtnText /*= 0*/,
  74. KWndWindow* pCallerWnd /*= 0*/,
  75. unsigned int uParam /*= 0*/,
  76.                 int nInformationLen /*= -1*/)
  77. {
  78. if (pInformation)
  79. {
  80. m_pCallerWnd = pCallerWnd;
  81. m_uCallerParam = uParam;
  82. m_Information.SetText(pInformation, nInformationLen);
  83. if (pszSecondBtnText && pszFirstBtnText == NULL)
  84. {
  85. pszFirstBtnText = pszSecondBtnText;
  86. pszSecondBtnText = NULL;
  87. }
  88. if (pszFirstBtnText)
  89. {
  90. m_FirstBtn.SetText(pszFirstBtnText);
  91. m_FirstBtn.Show();
  92. int y;
  93. m_FirstBtn.GetPosition(0, &y);
  94. if (pszSecondBtnText == NULL)
  95. m_FirstBtn.SetPosition(m_nCentreBtnXPos, y);
  96. else
  97. m_FirstBtn.SetPosition(m_nOrigFirstBtnXPos, y);
  98. }
  99. else
  100. {
  101. m_FirstBtn.Hide();
  102. }
  103. if (pszSecondBtnText)
  104. {
  105. m_SecondBtn.SetText(pszSecondBtnText);
  106. m_SecondBtn.Show();
  107. }
  108. else
  109. {
  110. m_SecondBtn.Hide();
  111. }
  112. UiSoundPlay(UI_SI_WND_OPENCLOSE);
  113. BringToTop();
  114. KWndShowAnimate::Show();
  115. Wnd_SetExclusive((KWndWindow*)this);
  116. }
  117. }
  118. //--------------------------------------------------------------------------
  119. // 功能:隐藏窗口
  120. //--------------------------------------------------------------------------
  121. void KUiInformation::Hide(int nBtnIndex)
  122. {
  123. if (m_pCallerWnd)
  124. {
  125. m_pCallerWnd->WndProc(WND_M_OTHER_WORK_RESULT,
  126. m_uCallerParam, WND_OPER_RESULT(nBtnIndex));
  127. m_pCallerWnd = NULL;
  128. }
  129. Wnd_ReleaseExclusive((KWndWindow*)this);
  130. KWndShowAnimate::Hide();
  131. }
  132. //关闭窗口,不通调用窗口
  133. void KUiInformation::Close()
  134. {
  135. Wnd_ReleaseExclusive((KWndWindow*)this);
  136. KWndShowAnimate::Hide();
  137. }
  138. //--------------------------------------------------------------------------
  139. // 功能:窗口函数
  140. //--------------------------------------------------------------------------
  141. int KUiInformation::WndProc(unsigned int uMsg, unsigned int uParam, int nParam)
  142. {
  143. int nRet = 0;
  144. switch(uMsg)
  145. {
  146. case WND_N_BUTTON_CLICK:
  147. if (uParam == (unsigned int)(KWndWindow*)&m_FirstBtn)
  148. Hide(0);
  149. else if (uParam == (unsigned int)(KWndWindow*)&m_SecondBtn)
  150. Hide(1);
  151. break;
  152. case WM_KEYDOWN:
  153. if (uParam  == VK_RETURN || uParam == VK_SPACE || uParam == VK_ESCAPE)
  154. {
  155. if (!m_SecondBtn.IsVisible())
  156. {
  157. Hide(m_FirstBtn.IsVisible() ? 0 : -1);
  158. nRet = true;
  159. }
  160. }
  161. break;
  162. default:
  163. nRet = KWndShowAnimate::WndProc(uMsg, uParam, nParam);
  164. break;
  165. }
  166. return nRet;
  167. }