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

模拟服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #define WRITESTRLENTH 50
  3. #define BTN_POS_X 165
  4. #define BTN_POS_Y 483
  5. #define _IDX_UP_BTN_IMG 1
  6. #define _IDX_ON_BTN_IMG 2
  7. #define _IDX_DOWN_BTN_IMG 3
  8. CNoticeBox::CNoticeBox()
  9. {
  10. m_bActive = FALSE;
  11. m_bInited = FALSE;
  12. m_bIsSelected = FALSE;
  13. m_bSet = FALSE;
  14. ZeroMemory(&m_rcWnd,sizeof(RECT));
  15. }
  16. BOOL CNoticeBox::Load(CWHWilImageData* pxBtnImage=NULL)
  17. {
  18. if(pxBtnImage!=NULL)
  19. {
  20. // Init Button;
  21. m_bSet = TRUE;
  22. m_pxBtnImage = pxBtnImage;
  23. m_xMsgBtn.CreateGameBtn(pxBtnImage, _IDX_ON_BTN_IMG, _IDX_DOWN_BTN_IMG, BTN_POS_X,BTN_POS_Y);
  24. }
  25. else
  26. {
  27. m_bSet = FALSE;
  28. }
  29. return m_bSet;
  30. }
  31. BOOL CNoticeBox::DestoryMessageBox(VOID) // DestoryMessage box
  32. {
  33. m_bActive = FALSE;
  34. m_bInited = FALSE;
  35. m_bSet = FALSE;
  36. m_xMsg.ClearAllNodes();
  37. return FALSE;
  38. }
  39. BOOL CNoticeBox::HideMessageBox(VOID) // Hide Message box
  40. {
  41. m_bActive = FALSE;
  42. return FALSE;
  43. }
  44. CNoticeBox::~CNoticeBox() // Destructor
  45. {
  46. }
  47. BOOL CNoticeBox::SetBoxImage(INT nImageIndex)
  48. {
  49. POINT xSize,xPos;
  50. if(m_bSet)
  51. {
  52. m_pxBtnImage->NewSetIndex(nImageIndex);
  53. m_wpData = (WORD*)m_pxBtnImage->m_pbCurrImage;
  54. m_shWidth = m_pxBtnImage->m_lpstNewCurrWilImageInfo->shWidth;
  55. m_shHeight = m_pxBtnImage->m_lpstNewCurrWilImageInfo->shHeight;
  56. xSize.x = g_xMainWnd.m_rcWindow.right - g_xMainWnd.m_rcWindow.left;
  57. xSize.y = g_xMainWnd.m_rcWindow.bottom - g_xMainWnd.m_rcWindow.top;
  58. xPos.x = (xSize.x - m_shWidth)/2;
  59. xPos.y = (xSize.y - m_shHeight)/2;
  60. SetRect(&m_rcWnd, xPos.x, xPos.y, xPos.x + m_shWidth, xPos.y + m_shHeight);
  61. }
  62. return m_bSet;
  63. }
  64. BOOL CNoticeBox::ShowMessageBox(CHAR* szMsg,INT nImgIndex) // Show Message box with Initialization
  65. {
  66. INT Lenth;
  67. if(!m_bActive)
  68. {
  69. if(SetBoxImage(nImgIndex))
  70. {
  71. if(ShowMessage(szMsg))
  72. {
  73. m_xMsg.ClearAllNodes();
  74. StringDivideLen(WRITESTRLENTH,Lenth, m_szMsg,&m_xMsg);
  75. m_xMsgBtn.ChangeRect(m_rcWnd.left + BTN_POS_X, m_rcWnd.top + BTN_POS_Y);
  76. }
  77. else
  78. {
  79. m_bActive = FALSE;
  80. }
  81. }
  82. else
  83. {
  84. m_bActive = FALSE;
  85. m_bInited = FALSE;
  86. }
  87. }
  88. return m_bActive;
  89. }
  90. // Message Process
  91. HRESULT CNoticeBox::OnButtonDown(POINT tpMouse) // Button Down
  92. {
  93. HRESULT hResult=0;
  94. if(m_xMsgBtn.OnLButtonDown(tpMouse))
  95. {
  96. g_xClientSocket.SendNoticeOK();
  97. hResult = 1;
  98. }
  99. if(!hResult)
  100. {
  101. if(IsInRect(tpMouse.x,tpMouse.y,m_rcWnd))
  102. {
  103. m_bGrabbedMousePos.x  = tpMouse.x - m_rcWnd.left;
  104. m_bGrabbedMousePos.y  = tpMouse.y - m_rcWnd.top;
  105. m_bIsSelected = TRUE;
  106. hResult = 0;
  107. }
  108. }
  109. return hResult;
  110. }
  111. HRESULT CNoticeBox::OnButtonUp(POINT tpMouse) // Button Up
  112. {
  113. m_bIsSelected = FALSE; 
  114. HRESULT hResult=0;
  115. if(m_xMsgBtn.OnLButtonUp(tpMouse))
  116. hResult = 1; // Here
  117. return hResult;
  118. }
  119. // Render Process
  120. BOOL CNoticeBox::RenderMessageBox(INT nLoopTIme) // Render Function
  121. {
  122. INT nCount;
  123. if(m_bActive&&m_bInited&&m_bSet)
  124. {
  125. g_xMainWnd.DrawWithImageForCompClipRgn( m_rcWnd.left, m_rcWnd.top, m_shWidth, m_shHeight, m_wpData, 800, 600 );
  126. POINT xTxtPos;
  127. nCount = m_xMsg.GetCounter();
  128. m_xMsg.MoveCurrentToTop();
  129. xTxtPos.x = m_rcWnd.left + 40;
  130. xTxtPos.y = m_rcWnd.top  + 20;
  131. for(int i = 0 ; i < nCount ; i++)
  132. {
  133. g_xMainWnd.PutsHan(NULL,xTxtPos.x,xTxtPos.y,RGB(255,255,255),RGB(0,0,0),*m_xMsg.GetCurrentData());
  134. xTxtPos.y = xTxtPos.y + 16; // Line Skip
  135. m_xMsg.MoveNextNode();
  136. }
  137. // Draw Button
  138. m_xMsgBtn.ShowGameBtn();
  139. return FALSE;
  140. }
  141. return TRUE;
  142. }
  143. VOID CNoticeBox::MoveWnd(POINT ptMouse) // Move Window
  144. {
  145. if ( m_bActive && m_bIsSelected)
  146. {
  147. SetRect(&m_rcWnd, ptMouse.x-m_bGrabbedMousePos.x, ptMouse.y-m_bGrabbedMousePos.y,
  148. ptMouse.x-m_bGrabbedMousePos.x+m_shWidth, ptMouse.y-m_bGrabbedMousePos.y+m_shHeight);
  149. m_xMsgBtn.ChangeRect(m_rcWnd.left + BTN_POS_X, m_rcWnd.top + BTN_POS_Y);
  150. }
  151. else
  152. {
  153. m_xMsgBtn.OnMouseMove(ptMouse);
  154. }
  155. }
  156. BOOL CNoticeBox::ShowMessage(CHAR* szMsg) // Show Message box with Initialization
  157. {
  158. if(SetMsg(szMsg))
  159. m_bActive = TRUE;
  160. else
  161. m_bActive = FALSE;
  162. return m_bActive;
  163. }
  164. BOOL CNoticeBox::SetMsg(CHAR* szMsg) // Init Messages
  165. {
  166. INT nLength;
  167. nLength = strlen(szMsg);
  168. if(nLength!=0)
  169. {
  170. ZeroMemory(m_szMsg,MAX_PATH);
  171. strcpy(m_szMsg,szMsg);
  172. m_bInited = TRUE;
  173. }
  174. else
  175. m_bInited = FALSE;
  176. return m_bInited;
  177. }
  178. BOOL CNoticeBox::StringDivideLen(INT nDivideLen, INT& nDividedLine, CHAR* szSrc,CDLList<CHAR*>* m_pxpStr)
  179. {
  180. CHAR* szTmpCheck;
  181. CHAR szResult[MAX_PATH];
  182. INT nStartLen = 0;
  183. INT nEndLen = 0;
  184. INT nResultLen = 0;
  185. INT nWordCheck = 0;
  186. nDividedLine = 1;
  187. if ( szSrc[0] != NULL )
  188. {
  189. ZeroMemory(szResult,MAX_PATH);
  190. for ( INT nCnt = 0; nCnt < (INT)strlen(szSrc); nCnt++)
  191. {
  192. nEndLen = nCnt+1;
  193. // 泅犁何盒鳖瘤狼 巩磊凯阑 佬绰促.
  194. szTmpCheck = szSrc+nStartLen;
  195. INT nsLen;
  196. nsLen = strlen(szTmpCheck);
  197. // 泅犁鳖瘤 佬绢柯 何盒捞 倾侩承捞甫 逞绢脊阑锭.
  198. if (nsLen > nDivideLen )
  199. {
  200. // 泅犁 2官捞飘 巩磊扼搁. 
  201. if ( szSrc[nEndLen-1] < 0 )
  202. {
  203. // 泅犁 菊俊巩磊啊 2官捞飘 巩磊啊 酒聪扼搁
  204. if ( !(nWordCheck%2) )
  205. {
  206. nStartLen += strlen(szTmpCheck)-1;
  207. nCnt--;
  208. CHAR* pszNewLine;
  209. pszNewLine = new CHAR[nResultLen+1];
  210. memcpy(pszNewLine,szResult,nResultLen);
  211. pszNewLine[nResultLen]=NULL;
  212. m_pxpStr->AddNode(pszNewLine);
  213. nResultLen = 0;
  214. nDividedLine++;
  215. }
  216. else
  217. {
  218. nStartLen += strlen(szTmpCheck)-2;
  219. nCnt -= 2;
  220. CHAR* pszNewLine;
  221. pszNewLine = new CHAR[nResultLen];
  222. memcpy(pszNewLine,szResult,nResultLen-1);
  223. pszNewLine[nResultLen-1]=NULL;
  224. m_pxpStr->AddNode(pszNewLine);
  225. nResultLen = 0;
  226. nDividedLine++;
  227. nWordCheck--;
  228. }
  229. }
  230. // 1官捞飘 巩磊. 
  231. // 泅犁焊促 茄官捞飘菊何盒鳖瘤父 绊妨秦林搁 等促.
  232. else
  233. {
  234. nStartLen += strlen(szTmpCheck)-1;
  235. nCnt--;
  236. CHAR* pszNewLine;
  237. pszNewLine = new CHAR[nResultLen+1];
  238. memcpy(pszNewLine,szResult,nResultLen);
  239. pszNewLine[nResultLen]=NULL;
  240. m_pxpStr->AddNode(pszNewLine);
  241. nResultLen=0;
  242. nDividedLine++;
  243. }
  244. }
  245. else if(szSrc[nEndLen-1] == 'n' || szSrc[nEndLen-1] == 0x1B) // 碍力俺青     n栏肺窍搁  Error ????
  246. {
  247. nStartLen += strlen(szTmpCheck)-1;
  248. CHAR* pszNewLine;
  249. pszNewLine = new CHAR[nResultLen+1];
  250. memcpy(pszNewLine,szResult,nResultLen);
  251. pszNewLine[nResultLen]=NULL;
  252. m_pxpStr->AddNode(pszNewLine);
  253. nResultLen=0;
  254. nDividedLine++;
  255. }
  256. else
  257. {
  258. if ( szSrc[nEndLen-1] < 0 )
  259. nWordCheck++;
  260. szResult[nResultLen] = szSrc[nEndLen-1];
  261. nResultLen++;
  262. }
  263. }
  264. if(nResultLen!=0)
  265. {
  266. CHAR* pszNewLine;
  267. pszNewLine = new CHAR[nResultLen+1];
  268. memcpy(pszNewLine,szResult,nResultLen);
  269. pszNewLine[nResultLen]=NULL;
  270. m_pxpStr->AddNode(pszNewLine);
  271. nDividedLine++;
  272. nResultLen=0;
  273. }
  274. return TRUE;
  275. }
  276. return FALSE;
  277. }