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

模拟服务器

开发平台:

C/C++

  1. // -------------------------------------------------------------------------
  2. // 文件名 : WndToolBar.cpp
  3. // 创建者 : 万里
  4. // 创建时间 : 2003-7-23 21:56:43
  5. // 功能描述 :
  6. //
  7. // -------------------------------------------------------------------------
  8. #include "KWin32.h"
  9. #include "KIniFile.h"
  10. #include "../Elem/WndMessage.h"
  11. #include "WndToolBar.h"
  12. #include "Wnds.h"
  13. #include "ComWindow.h"
  14. #include "../../../Represent/iRepresent/iRepresentShell.h"
  15. extern iRepresentShell* g_pRepresentShell;
  16. //--------------------------------------------------------------------------
  17. // 功能:构造函数
  18. //--------------------------------------------------------------------------
  19. KWndToolBar::KWndToolBar()
  20. {
  21. m_nButtonNum = 0;
  22. m_pButtons = NULL;
  23. }
  24. KWndToolBar::~KWndToolBar()
  25. {
  26. FreeAllWindow();
  27. }
  28. void KWndToolBar::Clone(KWndToolBar* pCopy)
  29. {
  30. if (pCopy)
  31. {
  32. KWndImage::Clone(pCopy);
  33. if (m_nButtonNum && m_pButtons)
  34. {
  35. }
  36. else
  37. {
  38. pCopy->FreeAllWindow();
  39. }
  40. }
  41. }
  42. //--------------------------------------------------------------------------
  43. // 功能:初始化窗口
  44. //--------------------------------------------------------------------------
  45. int KWndToolBar::Init(KIniFile* pIniFile, const char* pSection)
  46. {
  47. if (KWndImage::Init(pIniFile, pSection))
  48. {
  49. int n = 0;
  50. char szName[32];
  51. char szTitle[32];
  52. while(1)
  53. {
  54. sprintf(szName, "Button%d", n);
  55. if (pIniFile->GetString(pSection, szName, "", szTitle, 32))
  56. {
  57. AddOneWindow(pIniFile, szTitle);
  58. }
  59. else
  60. break;
  61. n++;
  62. }
  63. return true;
  64. }
  65. return false;
  66. }
  67. //--------------------------------------------------------------------------
  68. // 功能:窗口函数
  69. //--------------------------------------------------------------------------
  70. int KWndToolBar::WndProc(unsigned int uMsg, unsigned int uParam, int nParam)
  71. {
  72. if (!KWndImage::WndProc(uMsg, uParam, nParam))
  73. {
  74. if (m_pParentWnd)
  75. return m_pParentWnd->WndProc(uMsg, uParam, nParam);
  76. }
  77. return 0;
  78. }
  79. //窗体绘制
  80. void KWndToolBar::PaintWindow()
  81. {
  82. KWndImage::PaintWindow();
  83. }
  84. void KWndToolBar::AddOneWindow(KIniFile* pIniFile, const char* pSection)
  85. {
  86. m_pButtons = (KButtonInfo*)realloc(m_pButtons, sizeof(KButtonInfo) * (m_nButtonNum + 1));
  87. if (m_pButtons && m_nButtonNum >= 0)
  88. {
  89. char szType[32];
  90. if (pIniFile->GetString(pSection, "ClassType", "", szType, 32))
  91. {
  92. strncpy(m_pButtons[m_nButtonNum].szTitle, pSection, 32);
  93. m_pButtons[m_nButtonNum].m_pButton = gGetComClassFactory()->CreateComObject(szType);
  94. if (m_pButtons[m_nButtonNum].m_pButton)
  95. {
  96. m_pButtons[m_nButtonNum].m_pButton->Init(pIniFile, pSection);
  97. AddChild(m_pButtons[m_nButtonNum].m_pButton);
  98. m_nButtonNum++;
  99. }
  100. }
  101. }
  102. }
  103. void KWndToolBar::FreeAllWindow()
  104. {
  105. if (m_pButtons && m_nButtonNum)
  106. {
  107. for (int n = 0; n < m_nButtonNum; n++)
  108. {
  109. if (m_pButtons[n].m_pButton)
  110. {
  111. delete m_pButtons[n].m_pButton;
  112. }
  113. }
  114. free(m_pButtons);
  115. m_pButtons = NULL;
  116. m_nButtonNum = 0;
  117. }
  118. }
  119. void KWndToolBar::UpdateData()
  120. {
  121. for (int n = 0; n < m_nButtonNum; n++)
  122. {
  123. if (m_pButtons[n].m_pButton)
  124. {
  125. m_pButtons[n].m_pButton->UpdateData();
  126. }
  127. }
  128. }