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

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 界面--聊天选项/状态设置
  3. // Copyright : Kingsoft 2003
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2003-3-5
  6. *****************************************************************************************/
  7. #include "KWin32.h"
  8. #include "KIniFile.h"
  9. #include "../elem/wnds.h"
  10. #include "../Elem/WndMessage.h"
  11. #include "UiChatStatus.h"
  12. #include "../UiBase.h"
  13. #include "../../../core/src/coreshell.h"
  14. #include "../../../Engine/src/Text.h"
  15. #include "../UiSoundSetting.h"
  16. extern iCoreShell* g_pCoreShell;
  17. #define SCHEME_INI "聊天状态设置窗口.ini"
  18. KUiChatStatus* KUiChatStatus::m_pSelf = NULL;
  19. //--------------------------------------------------------------------------
  20. // 功能:打开窗口,返回唯一的一个类对象实例
  21. //--------------------------------------------------------------------------
  22. KUiChatStatus* KUiChatStatus::OpenWindow()
  23. {
  24. if (m_pSelf == NULL)
  25. {
  26. m_pSelf = new KUiChatStatus;
  27. if (m_pSelf)
  28. {
  29. UiSoundPlay(UI_SI_WND_OPENCLOSE);
  30. m_pSelf->Initialize();
  31. m_pSelf->Show();
  32. }
  33. }
  34. return m_pSelf;
  35. }
  36. //--------------------------------------------------------------------------
  37. // 功能:如果窗口正被显示,则返回实例指针
  38. //--------------------------------------------------------------------------
  39. KUiChatStatus* KUiChatStatus::GetIfVisible()
  40. {
  41. if (m_pSelf && m_pSelf->IsVisible())
  42. return m_pSelf;
  43. return NULL;
  44. }
  45. //--------------------------------------------------------------------------
  46. // 功能:关闭窗口,同时可以选则是否删除对象实例
  47. //--------------------------------------------------------------------------
  48. void KUiChatStatus::CloseWindow()
  49. {
  50. if (m_pSelf)
  51. {
  52. m_pSelf->Destroy();
  53. m_pSelf = NULL;
  54. }
  55. }
  56. //初始化
  57. void KUiChatStatus::Initialize()
  58. {
  59. AddChild(&m_OnLineBtn);
  60. AddChild(&m_LeaveBtn);
  61. AddChild(&m_BusyBtn);
  62. AddChild(&m_AutoReplyBtn);
  63. AddChild(&m_HideBtn);
  64. AddChild(&m_CloseBtn);
  65. AddChild(&m_AddMsg);
  66. AddChild(&m_RemoveMsg);
  67. AddChild(&m_SetDefaultMsg);
  68. AddChild(&m_ReplyMsgEdit);
  69. AddChild(&m_MsgList);
  70. AddChild(&m_MsgScroll);
  71. m_MsgList.SetScrollbar(&m_MsgScroll);
  72. char Scheme[256];
  73. g_UiBase.GetCurSchemePath(Scheme, 256);
  74. LoadScheme(Scheme);
  75. m_Style &= ~WND_S_VISIBLE;
  76. Wnd_AddWindow(this);
  77. }
  78. //载入界面方案
  79. void KUiChatStatus::LoadScheme(const char* pScheme)
  80. {
  81. char Buff[128];
  82. KIniFile Ini;
  83. if (m_pSelf)
  84. {
  85. sprintf(Buff, "%s\"SCHEME_INI, pScheme);
  86. if (Ini.Load(Buff))
  87. {
  88. m_pSelf->Init(&Ini, "Main");
  89. m_pSelf->m_OnLineBtn.Init(&Ini, "OnLineBtn");
  90. m_pSelf->m_LeaveBtn.Init(&Ini, "LeaveBtn");
  91. m_pSelf->m_BusyBtn.Init(&Ini, "BusyBtn");
  92. m_pSelf->m_AutoReplyBtn.Init(&Ini, "AutoReplyBtn");
  93. m_pSelf->m_HideBtn.Init(&Ini, "HideBtn");
  94. m_pSelf->m_CloseBtn.Init(&Ini, "CloseBtn");
  95. m_pSelf->m_AddMsg.Init(&Ini, "AddMsg");
  96. m_pSelf->m_RemoveMsg.Init(&Ini, "RemoveMsg");
  97. m_pSelf->m_SetDefaultMsg.Init(&Ini, "SetDefaultMsg");
  98. m_pSelf->m_ReplyMsgEdit.Init(&Ini, "ReplyMsgEdit");
  99. m_pSelf->m_MsgList.Init(&Ini, "MsgList");
  100. m_pSelf->m_MsgScroll.Init(&Ini, "Scroll");
  101. }
  102. }
  103. }
  104. //窗口函数
  105. int KUiChatStatus::WndProc(unsigned int uMsg, unsigned int uParam, int nParam)
  106. {
  107. switch(uMsg)
  108. {
  109. case WND_N_BUTTON_CLICK:
  110. if (uParam == (unsigned int)(KWndWindow*)&m_OnLineBtn)
  111. {
  112. m_OnLineBtn.CheckButton(true);
  113. m_LeaveBtn.CheckButton(false);
  114. m_BusyBtn.CheckButton(false);
  115. m_AutoReplyBtn.CheckButton(false);
  116. m_HideBtn.CheckButton(false);
  117. }
  118. else if (uParam == (unsigned int)(KWndWindow*)&m_LeaveBtn)
  119. {
  120. m_OnLineBtn.CheckButton(false);
  121. m_LeaveBtn.CheckButton(true);
  122. m_BusyBtn.CheckButton(false);
  123. m_AutoReplyBtn.CheckButton(false);
  124. m_HideBtn.CheckButton(false);
  125. }
  126. else if (uParam == (unsigned int)(KWndWindow*)&m_BusyBtn)
  127. {
  128. m_OnLineBtn.CheckButton(false);
  129. m_LeaveBtn.CheckButton(false);
  130. m_BusyBtn.CheckButton(true);
  131. m_AutoReplyBtn.CheckButton(false);
  132. m_HideBtn.CheckButton(false);
  133. }
  134. else if (uParam == (unsigned int)(KWndWindow*)&m_AutoReplyBtn)
  135. {
  136. m_OnLineBtn.CheckButton(false);
  137. m_LeaveBtn.CheckButton(false);
  138. m_BusyBtn.CheckButton(false);
  139. m_AutoReplyBtn.CheckButton(true);
  140. m_HideBtn.CheckButton(false);
  141. }
  142. else if (uParam == (unsigned int)(KWndWindow*)&m_HideBtn)
  143. {
  144. m_OnLineBtn.CheckButton(false);
  145. m_LeaveBtn.CheckButton(false);
  146. m_BusyBtn.CheckButton(false);
  147. m_AutoReplyBtn.CheckButton(false);
  148. m_HideBtn.CheckButton(true);
  149. }
  150. else if (uParam == (unsigned int)(KWndWindow*)&m_AddMsg)
  151. OnAddMsg();
  152. else if (uParam == (unsigned int)(KWndWindow*)&m_RemoveMsg)
  153. m_MsgList.RemoveAMessage(m_MsgList.GetCurSel());
  154. else if (uParam == (unsigned int)(KWndWindow*)&m_SetDefaultMsg)
  155. OnSetDefMsg();
  156. else if (uParam == (unsigned int)(KWndWindow*)&m_CloseBtn)
  157. CloseWindow();
  158. break;
  159. case WND_N_EDIT_SPECIAL_KEY_DOWN:
  160. if (uParam == VK_RETURN)
  161. OnAddMsg();
  162. break;
  163. case WND_N_LIST_ITEM_SEL:
  164. OnSelMsg(nParam);
  165. break;
  166. case WND_N_SCORLLBAR_POS_CHANGED:
  167. if (uParam = (unsigned int)(KWndWindow*)(&m_MsgScroll))
  168. m_MsgList.SetFirstShowLine(nParam);
  169. break;
  170. default:
  171. return KWndImage::WndProc(uMsg, uParam, nParam);
  172. }
  173. return 0;
  174. }
  175. // 加入一条消息
  176. void KUiChatStatus::OnAddMsg()
  177. {
  178. char Buffer[512];
  179. int nLen = m_ReplyMsgEdit.GetText(Buffer, 512, true);
  180. if (nLen)
  181. {
  182. nLen = TEncodeText(Buffer, nLen);
  183. if (nLen)
  184. m_MsgList.AddOneMessage(Buffer, nLen);
  185. m_ReplyMsgEdit.SetText("");
  186. }
  187. }
  188. void KUiChatStatus::OnSelMsg(int nIndex)
  189. {
  190. char Buffer[512];
  191. int nLen = m_MsgList.GetOneMessage(nIndex, Buffer, 512, true);
  192. if (nLen > 0)
  193. {
  194. m_ReplyMsgEdit.SetText(Buffer);
  195. }
  196. }
  197. void KUiChatStatus::OnSetDefMsg()
  198. {
  199. }