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

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 界面窗口体系结构--带文字按键窗口
  3. // Copyright : Kingsoft 2002
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2002-10-4
  6. *****************************************************************************************/
  7. #include "KWin32.h"
  8. #include "KIniFile.h"
  9. #include "../Elem/WndMessage.h"
  10. #include "WndLabeledButton.h"
  11. #include "Wnds.h"
  12. #include "../../../Engine/Src/Text.h"
  13. #include "../../../Represent/iRepresent/iRepresentShell.h"
  14. extern iRepresentShell* g_pRepresentShell;
  15. //===========================================
  16. // 简单的带文字按钮窗口。
  17. // 文字单行,居中处理,文字中不包含控制符。
  18. //===========================================
  19. //--------------------------------------------------------------------------
  20. // 功能:构造函数
  21. //--------------------------------------------------------------------------
  22. KWndLabeledButton::KWndLabeledButton()
  23. {
  24. m_Label[0]  = 0;
  25. m_Label[31] = 0;
  26. m_nLabelLen = 0;
  27. m_nFontSize = 16;
  28. m_nLabelYOffset = 0;
  29. }
  30. void KWndLabeledButton::Clone(KWndLabeledButton* pCopy)
  31. {
  32. if (pCopy)
  33. {
  34. KWndButton::Clone(pCopy);
  35. pCopy->m_nFontSize = m_nFontSize;
  36. pCopy->m_FontColor = m_FontColor;
  37. pCopy->m_OverColor = m_OverColor;
  38. pCopy->m_nLabelYOffset = m_nLabelYOffset;
  39. pCopy->m_FontBorderColor = m_FontBorderColor;
  40. pCopy->m_OverBorderColor = m_OverBorderColor;
  41. strcpy(pCopy->m_Label, m_Label);
  42. }
  43. }
  44. //--------------------------------------------------------------------------
  45. // 功能:初始化窗口
  46. //--------------------------------------------------------------------------
  47. int KWndLabeledButton::Init(KIniFile* pIniFile, const char* pSection)
  48. {
  49. if (KWndButton::Init(pIniFile, pSection))
  50. {
  51. pIniFile->GetInteger(pSection, "Font", 16, &m_nFontSize);
  52. pIniFile->GetInteger(pSection, "LabelYOffset", 0, &m_nLabelYOffset);
  53. if (m_nFontSize < 12)
  54. m_nFontSize = 16;
  55. //===读取文字====
  56. char Buff[32];
  57. pIniFile->GetString(pSection, "Color", "", Buff, sizeof(Buff));
  58. m_FontColor = GetColor(Buff);
  59. pIniFile->GetString(pSection, "BorderColor", "", Buff, sizeof(Buff));
  60. m_FontBorderColor = GetColor(Buff);
  61. pIniFile->GetString(pSection, "OverColor", "", Buff, sizeof(Buff));
  62. m_OverColor = GetColor(Buff);
  63. pIniFile->GetString(pSection, "OverBorderColor", "", Buff, sizeof(Buff));
  64. m_OverBorderColor = GetColor(Buff);
  65. pIniFile->GetString(pSection, "Label", "", Buff, sizeof(Buff));
  66. SetLabel(Buff);
  67. return true;
  68. }
  69. return false;
  70. }
  71. //--------------------------------------------------------------------------
  72. // 功能:设置按钮标题文字
  73. //--------------------------------------------------------------------------
  74. void KWndLabeledButton::SetLabel(const char* pLabel)
  75. {
  76. if (pLabel)
  77. {
  78. m_nLabelLen = strlen(pLabel);
  79. if (m_nLabelLen > 31)
  80. m_nLabelLen = 31;
  81. memcpy(m_Label, pLabel, m_nLabelLen);
  82. m_Label[m_nLabelLen] = 0;
  83. }
  84. }
  85. int KWndLabeledButton::GetLabel(char* pLabel, int nSize)
  86. {
  87. int nRet = 0;
  88. if (pLabel)
  89. {
  90. if (m_nLabelLen < nSize)
  91. {
  92. memcpy(pLabel, m_Label, m_nLabelLen + 1);
  93. nRet = m_nLabelLen;
  94. }
  95. else
  96. {
  97. pLabel[0] = 0;
  98. nRet = 0;
  99. }
  100. }
  101. return nRet;
  102. }
  103. //--------------------------------------------------------------------------
  104. // 功能:设置按钮标题文字颜色
  105. //--------------------------------------------------------------------------
  106. void KWndLabeledButton::SetLabelColor(unsigned int Color)
  107. {
  108. m_FontColor = Color;
  109. }
  110. //--------------------------------------------------------------------------
  111. // 功能:窗体绘制
  112. //--------------------------------------------------------------------------
  113. void KWndLabeledButton::PaintWindow()
  114. {
  115. KWndButton::PaintWindow();
  116. if (g_pRepresentShell)
  117. {
  118. char Buffer[32];
  119. int nMaxLen = m_Width * 2 / m_nFontSize;
  120. const char* pShowString = TGetLimitLenString(m_Label, -1, Buffer, nMaxLen);
  121. if (pShowString)
  122. {
  123. int nLen = strlen(pShowString);
  124. unsigned int uColor = m_FontColor;
  125. unsigned int uBorderColor = m_FontBorderColor;
  126. if (m_Flag & WNDBTN_F_OVER)
  127. {
  128. uColor = m_OverColor;
  129. uBorderColor = m_OverBorderColor;
  130. }
  131. g_pRepresentShell->OutputText(m_nFontSize, pShowString, nLen,
  132. m_nAbsoluteLeft + (m_Width - nLen * m_nFontSize / 2) / 2,
  133. m_nAbsoluteTop + m_nLabelYOffset,
  134. uColor , 0,
  135. TEXT_IN_SINGLE_PLANE_COORD, uBorderColor);
  136. }
  137. }
  138. }
  139. //=====================================================
  140. // 复杂的带文字按钮窗口。
  141. // 文字可以为单行,也可以为多行,单行时候可以指定
  142. // 水平以及垂直的对齐方式。文字中可以包含控制符。
  143. //=====================================================
  144. //--------------------------------------------------------------------------
  145. // 功能:初始化窗口
  146. //--------------------------------------------------------------------------
  147. int KWndRichLabeledButton::Init(KIniFile* pIniFile, const char* pSection)
  148. {
  149. if (KWndButton::Init(pIniFile, pSection))
  150. {
  151. m_Label.Init(pIniFile, pSection);
  152. m_Label.SetPosition(m_nAbsoluteLeft, m_nAbsoluteTop);
  153. }
  154. return false;
  155. }
  156. //--------------------------------------------------------------------------
  157. // 功能:设置按钮标题文字
  158. //--------------------------------------------------------------------------
  159. void KWndRichLabeledButton::SetLabel(const char* pLabel, int nLen)
  160. {
  161. m_Label.SetText(pLabel, nLen);
  162. }
  163. //--------------------------------------------------------------------------
  164. // 功能:设置按钮标题文字颜色
  165. //--------------------------------------------------------------------------
  166. void KWndRichLabeledButton::SetLabelColor(unsigned int Color)
  167. {
  168. m_Label.SetTextColor(Color);
  169. }
  170. //--------------------------------------------------------------------------
  171. // 功能:窗体绘制
  172. //--------------------------------------------------------------------------
  173. void KWndRichLabeledButton::PaintWindow()
  174. {
  175. KWndButton::PaintWindow();
  176. m_Label.SetPosition(m_nAbsoluteLeft, m_nAbsoluteTop);
  177. m_Label.PaintWindow();
  178. }