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

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 界面窗口体系结构--页面窗口
  3. // Copyright : Kingsoft 2002
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2002-8-9
  6. ------------------------------------------------------------------------------------------
  7.     类是于M$ Win32里面的 PropertiePage
  8. *****************************************************************************************/
  9. #include "KWin32.h"
  10. #include "KIniFile.h"
  11. #include "../Elem/WndMessage.h"
  12. #include "WndButton.h"
  13. #include "WndPage.h"
  14. //--------------------------------------------------------------------------
  15. // 功能:窗口函数
  16. //--------------------------------------------------------------------------
  17. // 当点击页面切换按钮或在页面空白区时需要将消息转发给PageSet处理
  18. //--------------------------------------------------------------------------
  19. int KWndPage::WndProc(unsigned int uMsg, unsigned int uParam, int nParam)
  20. {
  21. if ((uMsg == WM_LBUTTONDOWN || uMsg == WM_MOUSEMOVE ||
  22. uMsg == WM_LBUTTONUP || uMsg == WND_N_BUTTON_CLICK) && m_pParentWnd)
  23. {
  24. return m_pParentWnd->WndProc(uMsg, uParam, nParam);
  25. }
  26. return KWndImage::WndProc(uMsg, uParam, nParam);
  27. }
  28. //------------------------------------------------------------------------------------------
  29. // 多个页面集合窗口
  30. //------------------------------------------------------------------------------------------
  31. //--------------------------------------------------------------------------
  32. // 功能:构造函数
  33. //--------------------------------------------------------------------------
  34. KWndPageSet::KWndPageSet()
  35. {
  36. m_pPageBtnPairList = NULL;
  37. m_nNumPage = 0;
  38. m_nAcitvePage = -1;
  39. }
  40. //--------------------------------------------------------------------------
  41. // 功能:析构函数
  42. //--------------------------------------------------------------------------
  43. KWndPageSet::~KWndPageSet()
  44. {
  45. if (m_pPageBtnPairList)
  46. {
  47. free(m_pPageBtnPairList);
  48. m_pPageBtnPairList = NULL;
  49. }
  50. m_nNumPage = 0;
  51. }
  52. //--------------------------------------------------------------------------
  53. // 功能:窗口函数
  54. //--------------------------------------------------------------------------
  55. int KWndPageSet::WndProc(unsigned int uMsg, unsigned int uParam, int nParam)
  56. {
  57. if (uMsg != WND_N_BUTTON_CLICK)
  58. return KWndImage::WndProc(uMsg, uParam, nParam);
  59. OnPageBtnClick((KWndWindow*)uParam);
  60. return 0;
  61. }
  62. //--------------------------------------------------------------------------
  63. // 功能:添加页面
  64. //--------------------------------------------------------------------------
  65. bool KWndPageSet::AddPage(KWndPage* pPage, KWndButton* pPageBtn)
  66. {
  67. if (pPage && pPageBtn)
  68. {
  69. AddChild(pPage);
  70. KWndPageBtnPair* pNewList = (KWndPageBtnPair*)realloc(m_pPageBtnPairList, sizeof(KWndPageBtnPair) * (m_nNumPage + 1));
  71. if (pNewList)
  72. {
  73. m_pPageBtnPairList = pNewList;
  74. m_pPageBtnPairList[m_nNumPage].pPage = pPage;
  75. m_pPageBtnPairList[m_nNumPage].pPageBtn = pPageBtn;
  76. m_nNumPage++;
  77. if ((m_nNumPage) == 1) //只有这个刚加入的页面
  78. ActivePage(0);
  79. else
  80. {
  81. pPage->Hide();
  82. int nActivePage = m_nAcitvePage;
  83. m_nAcitvePage = -1;
  84. ActivePage(nActivePage);
  85. }
  86. return true;
  87. }
  88. }
  89. return false;
  90. }
  91. //--------------------------------------------------------------------------
  92. // 功能:激活指定的页面
  93. //--------------------------------------------------------------------------
  94. bool KWndPageSet::ActivePage(int nPageIndex)
  95. {
  96. if (nPageIndex >= 0 && nPageIndex < m_nNumPage && nPageIndex != m_nAcitvePage)
  97. {
  98. if (m_nAcitvePage >= 0)
  99. m_pPageBtnPairList[m_nAcitvePage].pPage->Hide();
  100. m_nAcitvePage = nPageIndex;
  101. m_pPageBtnPairList[m_nAcitvePage].pPage->Show();
  102. for (int i = 0; i < m_nNumPage; i++)
  103. {
  104. m_pPageBtnPairList[i].pPageBtn->SplitSmaleFamily();
  105. AddChild(m_pPageBtnPairList[i].pPageBtn);
  106. m_pPageBtnPairList[i].pPageBtn->CheckButton(i == nPageIndex);
  107. }
  108. return true;
  109. }
  110. return false;
  111. }
  112. //--------------------------------------------------------------------------
  113. // 功能:响应按下切换页面按钮的操作
  114. //--------------------------------------------------------------------------
  115. void KWndPageSet::OnPageBtnClick(KWndWindow* pBtn)
  116. {
  117. for (int i = 0; i < m_nNumPage; i++)
  118. {
  119. if (m_pPageBtnPairList[i].pPageBtn == pBtn)
  120. {
  121. if (i != m_nAcitvePage)
  122. ActivePage(i);
  123. for (i = 0; i < m_nNumPage; i++)
  124. m_pPageBtnPairList[i].pPageBtn->CheckButton(m_pPageBtnPairList[i].pPageBtn == pBtn);
  125. break;
  126. }
  127. }
  128. }
  129. //--------------------------------------------------------------------------
  130. // 功能:激活指定的页面
  131. //--------------------------------------------------------------------------
  132. KWndPage* KWndPageSet::GetActivePage()
  133. {
  134. if (m_nAcitvePage >= 0)
  135. return m_pPageBtnPairList[m_nAcitvePage].pPage;
  136. else
  137. return NULL;
  138. }