Button.cpp
上传用户:cydong117
上传日期:2009-11-10
资源大小:638k
文件大小:8k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. // 弥措 滚瓢狼 荐
  2. #include "stdafx.h"
  3. #define MAX_TXT_BUTTON_COUNT 5
  4. /////////////////////////////////////////////////////////////////////////
  5. // CTextButton : 积己磊
  6. /////////////////////////////////////////////////////////////////////////
  7. CTextButton::CTextButton()
  8. {
  9. m_pTxtBtn.ClearAllNodes();
  10. m_nTxtHeight = 0;
  11. m_nMaxLine = 0;
  12. m_bIsReady = FALSE;
  13. m_IsUseSubTxt = FALSE;
  14. }
  15. /////////////////////////////////////////////////////////////////////////
  16. // ~CTextButton : 家戈磊
  17. /////////////////////////////////////////////////////////////////////////
  18. CTextButton::~CTextButton()
  19. {
  20. ReleaseButtons();
  21. }
  22. /////////////////////////////////////////////////////////////////////////
  23. // AddButton : Text 滚瓢阑 眠啊茄促.
  24. /////////////////////////////////////////////////////////////////////////
  25. // pszTxt: 拳搁俊 钎矫瞪 Text
  26. // xRect: 滚瓢栏肺 牢侥瞪 Rect 康开
  27. // nLinePos: 嘛鳃镑狼 Line Count
  28. // pszParam: 努腐 登菌阑锭 静老 Parameter蔼
  29. /////////////////////////////////////////////////////////////////////////
  30. BOOL CTextButton::AddButton(CHAR *pszTxt,RECT xRect,INT nLinePos,CHAR *pszParam,COLORREF nColor,COLORREF cColor)
  31. {
  32. if(m_bIsReady)
  33. {
  34. SIZE tSize;
  35. CMTxtBtn* tCMTxtBtn;
  36. tCMTxtBtn = new  CMTxtBtn;
  37. tSize = g_xMainWnd.GetStrLength(NULL,NULL,pszTxt);
  38. m_nTxtHeight  = tSize.cy;
  39. strcpy(tCMTxtBtn->Txt,pszTxt);
  40. tCMTxtBtn->xRect = xRect;
  41. tCMTxtBtn->nLinePos = nLinePos;
  42. strcpy(tCMTxtBtn->Param,pszParam);
  43. tCMTxtBtn->bIsClicked = FALSE;
  44. tCMTxtBtn->nColor = nColor;
  45. tCMTxtBtn->cColor = cColor;
  46. m_pTxtBtn.AddNode(tCMTxtBtn);
  47. return TRUE;
  48. }
  49. else 
  50. return FALSE;
  51. }
  52. BOOL CTextButton::AddButton(CHAR *pszTxt,CHAR *pszTxt2,RECT xRect,INT nLinePos,CHAR *pszParam,COLORREF nColor,COLORREF cColor)
  53. {
  54. if(m_bIsReady)
  55. {
  56. SIZE tSize;
  57. CMTxtBtn* tCMTxtBtn;
  58. tCMTxtBtn = new  CMTxtBtn;
  59. tSize = g_xMainWnd.GetStrLength(NULL,NULL,pszTxt);
  60. m_nTxtHeight  = tSize.cy;
  61. strcpy(tCMTxtBtn->Txt,pszTxt);
  62. strcpy(tCMTxtBtn->sTxt,pszTxt2);
  63. tCMTxtBtn->xRect = xRect;
  64. tCMTxtBtn->nLinePos = nLinePos;
  65. strcpy(tCMTxtBtn->Param,pszParam);
  66. tCMTxtBtn->bIsClicked = FALSE;
  67. tCMTxtBtn->nColor = nColor;
  68. tCMTxtBtn->cColor = cColor;
  69. m_pTxtBtn.AddNode(tCMTxtBtn);
  70. m_IsUseSubTxt = TRUE;
  71. return TRUE;
  72. }
  73. else 
  74. return FALSE;
  75. }
  76. /////////////////////////////////////////////////////////////////////////
  77. // ClickCheck : Button Click 俊 狼茄 Click Checking 阑 茄促.
  78. /////////////////////////////////////////////////////////////////////////
  79. // xPos: 角力 付快胶 谅钎甫 罐酒 棵巴
  80. // xWndPos: 角力 Text啊 静捞扁 矫累 窍绰 镑狼 谅钎甫 罐绢 棵巴
  81. // CurrentTopLine: 泅力 Window 惑俊 嘛洒绰 啊厘 拉临
  82. /////////////////////////////////////////////////////////////////////////
  83. CMTxtBtn* CTextButton::ClickCheck(POINT xWndPos,POINT xPos,INT CurrentTopLine)
  84. {
  85. if(m_bIsReady)
  86. {
  87. m_pTxtBtn.MoveCurrentToTop();
  88. for(int i = 0; i<m_pTxtBtn.ListLength();i++)
  89. {
  90. if((m_pTxtBtn.GetCurrentData()->nLinePos >= CurrentTopLine) && (m_pTxtBtn.GetCurrentData()->nLinePos <= CurrentTopLine+m_nMaxLine))
  91. {
  92. if(IsCurrsorOnThisButton(m_pTxtBtn.GetCurrentData(),xWndPos,xPos,CurrentTopLine))
  93. {
  94. m_pTxtBtn.GetCurrentData()->bIsClicked = !m_pTxtBtn.GetCurrentData()->bIsClicked;
  95. return m_pTxtBtn.GetCurrentData();
  96. }
  97. }
  98. m_pTxtBtn.MoveNextNode();
  99. }
  100. }
  101. return NULL;
  102. }
  103. /////////////////////////////////////////////////////////////////////////
  104. // ReleaseButtons : 捞固 棱囚 乐绰 葛电 滚瓢甸阑 朝赴促.
  105. /////////////////////////////////////////////////////////////////////////
  106. BOOL CTextButton::ReleaseButtons(VOID)
  107. {
  108. if(m_bIsReady)
  109. {
  110. m_pTxtBtn.ClearAllNodes();
  111. // m_bIsReady = FALSE;
  112. m_nTxtHeight = 0;
  113. return TRUE;
  114. }
  115. else
  116. return FALSE;
  117. }
  118. /////////////////////////////////////////////////////////////////////////
  119. // InitTxtBtn : 夯 努贰胶甫 荤侩 且荐 乐档废 霖厚 茄促.
  120. /////////////////////////////////////////////////////////////////////////
  121. // nTextHeight: 角力 Text狼 Height  
  122. // WndRect: 扩档快狼 农扁  
  123. // nMaxLine: 嘛阑荐 乐绰 弥措 扼牢荐
  124. /////////////////////////////////////////////////////////////////////////
  125. BOOL CTextButton::InitTxtBtn(INT nMaxLine,POINT StartPos,INT nLineGap)
  126. {
  127. m_bIsReady = TRUE;
  128. m_nMaxLine = nMaxLine;
  129. m_xStartPos = StartPos;
  130. m_nLineGap = nLineGap;
  131. return TRUE;
  132. }
  133. /////////////////////////////////////////////////////////////////////////
  134. // GetButton : 秦寸 Button狼 器牢磐甫 掘绰促.
  135. /////////////////////////////////////////////////////////////////////////
  136. // nIndex : Index
  137. /////////////////////////////////////////////////////////////////////////
  138. CMTxtBtn* CTextButton::GetButton(INT nIndex)
  139. {
  140. if(nIndex<0 || nIndex>m_pTxtBtn.GetCounter()) return NULL;
  141. m_pTxtBtn.MoveCurrentToTop();
  142. m_pTxtBtn.MoveNode(nIndex);
  143. return m_pTxtBtn.GetCurrentData();
  144. }
  145. /////////////////////////////////////////////////////////////////////////
  146. // GetButtonCount : Button狼 荐甫 掘绰促.
  147. /////////////////////////////////////////////////////////////////////////
  148. INT CTextButton::GetButtonCount(VOID)
  149. {
  150. return m_pTxtBtn.GetCounter();
  151. }
  152. VOID CTextButton::ClickFreeAllBtn(VOID)
  153. {
  154. m_pTxtBtn.MoveCurrentToTop();
  155. for(int i = 0 ; i < m_pTxtBtn.GetCounter() ; i++)
  156. {
  157. m_pTxtBtn.GetCurrentData()->bIsClicked = FALSE;
  158. m_pTxtBtn.MoveNextNode();
  159. }
  160. }
  161. /////////////////////////////////////////////////////////////////////////
  162. // ClickCheck : Button Click 俊 狼茄 Click Checking 阑 茄促.
  163. /////////////////////////////////////////////////////////////////////////
  164. // xPos: 角力 付快胶 谅钎甫 罐酒 棵巴
  165. // xWndPos: 角力 Text啊 静捞扁 矫累 窍绰 镑狼 谅钎甫 罐绢 棵巴
  166. // CurrentTopLine: 泅力 Window 惑俊 嘛洒绰 啊厘 拉临
  167. /////////////////////////////////////////////////////////////////////////
  168. CMTxtBtn* CTextButton::ButtonDownCheck(POINT xWndPos,POINT xPos,INT CurrentTopLine)
  169. {
  170. /// CMTxtBtn* xResult=NULL;
  171. /* int nTempX,nTempY;
  172. int StdPosX,StdPosY; // 框流捞绰 扩档快郴俊辑 扁霖 痢阑 拌魂 茄促.*/
  173. if(m_bIsReady)
  174. {
  175. m_pTxtBtn.MoveCurrentToTop();
  176. for(int i = 0; i<m_pTxtBtn.ListLength();i++)
  177. {
  178. if((m_pTxtBtn.GetCurrentData()->nLinePos >= CurrentTopLine) && (m_pTxtBtn.GetCurrentData()->nLinePos <= CurrentTopLine+m_nMaxLine))
  179. {
  180. if(IsCurrsorOnThisButton(m_pTxtBtn.GetCurrentData(),xWndPos,xPos,CurrentTopLine))
  181. {
  182. m_pTxtBtn.GetCurrentData()->bIsClicked = TRUE; 
  183. return m_pTxtBtn.GetCurrentData();
  184. }
  185. m_pTxtBtn.GetCurrentData()->bIsClicked = FALSE;
  186. }
  187. m_pTxtBtn.MoveNextNode();
  188. }
  189. }
  190. return NULL;
  191. }
  192. CMTxtBtn* CTextButton::ButtonUpCheck(POINT xWndPos,POINT xPos,INT CurrentTopLine)
  193. {
  194. if(m_bIsReady)
  195. {
  196. m_pTxtBtn.MoveCurrentToTop();
  197. for(int i = 0; i<m_pTxtBtn.ListLength();i++)
  198. {
  199. if((m_pTxtBtn.GetCurrentData()->nLinePos >= CurrentTopLine) && (m_pTxtBtn.GetCurrentData()->nLinePos <= CurrentTopLine+m_nMaxLine))
  200. {
  201. if(IsCurrsorOnThisButton(m_pTxtBtn.GetCurrentData(),xWndPos,xPos,CurrentTopLine))
  202. {
  203. m_pTxtBtn.GetCurrentData()->bIsClicked = FALSE;   
  204. return m_pTxtBtn.GetCurrentData();
  205. }
  206. }
  207. m_pTxtBtn.MoveNextNode();
  208. }
  209. }
  210. return NULL;
  211. }
  212. BOOL CTextButton::IsCurrsorOnThisButton(CMTxtBtn* pBtn,POINT xWndPos,POINT xPos,INT CurrentTopLine)
  213. {
  214. int nTempX,nTempY;
  215. int StdPosX,StdPosY; // 框流捞绰 扩档快郴俊辑 扁霖 痢阑 拌魂 茄促.
  216. StdPosY = xWndPos.y + (pBtn->nLinePos - CurrentTopLine)*(m_nTxtHeight+m_nLineGap)+m_xStartPos.y; // 啊函 困摹俊辑狼 Top阑 备茄促.
  217. StdPosX = xWndPos.x + pBtn->xRect.left+m_xStartPos.x; // 啊函 困摹俊辑狼 Left甫 备茄促.
  218. nTempX = StdPosX + pBtn->xRect.right;
  219. nTempY = StdPosY + pBtn->xRect.bottom;
  220. if((xPos.x>StdPosX)&&(xPos.x<nTempX))
  221. {
  222. if((xPos.y>StdPosY)&&(xPos.y<nTempY))
  223. {
  224. return TRUE;
  225. }
  226. }
  227. return FALSE;
  228. }