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

模拟服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #define WRITESTRLENTH 50
  3. CMirMsgBox::CMirMsgBox():CMsgBox() // Constructor
  4. {
  5. m_xBoxPos.x = 0;
  6. m_xBoxPos.y = 0;
  7. m_nImgIndex = 0;
  8. }
  9. BOOL CMirMsgBox::Load(CWHWilImageData* pxBtnImage=NULL)
  10. {
  11. if(pxBtnImage!=NULL)
  12. {
  13. // Init Button;
  14. m_xMsgBtn[0].CreateGameBtn(pxBtnImage,241,243,0,0); // OK
  15. m_xMsgBtn[1].CreateGameBtn(pxBtnImage,244,246,0,0); // YES
  16. m_xMsgBtn[2].CreateGameBtn(pxBtnImage,247,249,0,0); // NO
  17. m_xMsgBtn[3].CreateGameBtn(pxBtnImage,250,252,0,0); // Cancle
  18. m_pxBtnImage = pxBtnImage;
  19. m_bSet = TRUE;
  20. }
  21. else
  22. {
  23. m_bSet = FALSE;
  24. }
  25. return m_bSet;
  26. }
  27. CMirMsgBox::~CMirMsgBox() // Destructor
  28. {
  29. }
  30. // Function
  31. /*
  32. #define MSG_BTN_OK 1
  33. #define MSG_BTN_YESNO 2
  34. #define MSG_BTN_YESNOCANCLE 4
  35. #define MSG_EDITEXIST 128
  36. */
  37. BOOL CMirMsgBox::ShowMessageBox(CHAR* szMsg,INT nType) // Show Message box with Initialization
  38. {
  39. return ShowMessageBox(szMsg,nType,239);
  40. }
  41. BOOL CMirMsgBox::ShowMessageBox(CHAR* szMsg,INT nType,INT nImgIndex) // Show Message box with Initialization
  42. {
  43. INT Lenth;
  44. if(!m_bActive)
  45. {
  46. if(SetBoxImage(nImgIndex,nType))
  47. {
  48. if(CMsgBox::ShowMessageBox(szMsg,nType))
  49. {
  50. // m_xMsg俊促 String 
  51. m_xMsg.ClearAllNodes();
  52. StringDivideLen(WRITESTRLENTH,Lenth, m_szMsg,&m_xMsg);
  53. // Text Setting
  54. // Button Setting
  55. switch(m_nType)
  56. {
  57. case MSG_BTN_YESNO:
  58. case MSG_BTN_YESNO|MSG_EDITEXIST:
  59. {
  60. m_nStart=1;
  61. m_nEnd = 3;
  62. m_xMsgBtn[1].ChangeRect(m_xBoxPos.x+78,m_xBoxPos.y+134);
  63. m_xMsgBtn[2].ChangeRect(m_xBoxPos.x+210,m_xBoxPos.y+134);
  64. break;
  65. }
  66. case MSG_BTN_YESNOCANCLE:
  67. case MSG_BTN_YESNOCANCLE|MSG_EDITEXIST:
  68. {
  69. m_nStart=1;
  70. m_nEnd = 4;
  71. m_xMsgBtn[1].ChangeRect(m_xBoxPos.x+54,m_xBoxPos.y+134);
  72. m_xMsgBtn[2].ChangeRect(m_xBoxPos.x+144,m_xBoxPos.y+134);
  73. m_xMsgBtn[3].ChangeRect(m_xBoxPos.x+234,m_xBoxPos.y+134);
  74. break;
  75. }
  76. case MSG_BTN_OK:
  77. {
  78. m_nStart=0;
  79. m_nEnd = 1;
  80. m_xMsgBtn[0].ChangeRect(m_xBoxPos.x+144,m_xBoxPos.y+134);
  81. break;
  82. }
  83. case MSG_BTN_OK|MSG_EDITEXIST:
  84. default:
  85. {
  86. m_nStart=0;
  87. m_nEnd = 1;
  88. m_xMsgBtn[0].ChangeRect(m_xBoxPos.x+260,m_xBoxPos.y+134);
  89. break;
  90. }
  91. }
  92. }
  93. else
  94. {
  95. m_bActive = FALSE;
  96. }
  97. }
  98. else
  99. {
  100. m_bActive = FALSE;
  101. m_bInited = FALSE;
  102. }
  103. }
  104. return m_bActive;
  105. }
  106. BOOL CMirMsgBox::SetBoxImage(INT nImageIndex,INT nType)
  107. {
  108. POINT xSize,xPos;
  109. if(m_bSet)
  110. {
  111. if((nType&MSG_EDITEXIST)==MSG_EDITEXIST)
  112. {
  113. m_pxBtnImage->NewSetIndex(nImageIndex+1);
  114. }
  115. else
  116. {
  117. m_pxBtnImage->NewSetIndex(nImageIndex);
  118. }
  119. m_wpData = (WORD*)m_pxBtnImage->m_pbCurrImage;
  120. m_shWidth = m_pxBtnImage->m_lpstNewCurrWilImageInfo->shWidth;
  121. m_shHeight = m_pxBtnImage->m_lpstNewCurrWilImageInfo->shHeight;
  122. xSize.x = g_xMainWnd.m_rcWindow.right - g_xMainWnd.m_rcWindow.left;
  123. xSize.y = g_xMainWnd.m_rcWindow.bottom - g_xMainWnd.m_rcWindow.top;
  124. xPos.x = (xSize.x - m_shWidth)/2;
  125. xPos.y = (xSize.y - m_shHeight*2)/2;
  126. m_xBoxPos = xPos;
  127. }
  128. return m_bSet;
  129. }
  130. BOOL CMirMsgBox::HideMessageBox(VOID) // Hide Message box
  131. {
  132. m_bActive = FALSE;
  133. return FALSE;
  134. }
  135. BOOL CMirMsgBox::DestoryMessageBox(VOID) // DestoryMessage box
  136. {
  137. m_bActive = FALSE;
  138. m_bInited = FALSE;
  139. m_bSet = FALSE;
  140. m_xMsg.ClearAllNodes();
  141. return FALSE;
  142. }
  143. // Message Process
  144. HRESULT CMirMsgBox::OnButtonDown(POINT tpMouse) // Button Down
  145. {
  146. HRESULT hResult=0;
  147. for(int i = m_nStart; i< m_nEnd; i++)
  148. {
  149. m_xMsgBtn[i].OnLButtonDown(tpMouse);
  150. }
  151. return hResult;
  152. }
  153. HRESULT CMirMsgBox::OnButtonUp(POINT tpMouse) // Button Up
  154. {
  155. HRESULT hResult=0;
  156. for(int i = m_nStart; i< m_nEnd; i++)
  157. {
  158. if(m_xMsgBtn[i].OnLButtonUp(tpMouse))
  159. {
  160. hResult =(HRESULT)pow(2,i);
  161. }
  162. }
  163. if(hResult!=0)
  164. {
  165. hResult = hResult | ((m_nType&MSG_EDITEXIST)==MSG_EDITEXIST ? HAVE_EDITOBOX:0);
  166. }
  167. return hResult;
  168. }
  169. BOOL CMirMsgBox::StringDivideLen(INT nDivideLen, INT& nDividedLine, CHAR* szSrc,CDLList<CHAR*>* m_pxpStr)
  170. {
  171. CHAR szTmpCheck[MAX_PATH];
  172. CHAR szResult[MAX_PATH];
  173. nDividedLine = 1;
  174. INT nStartLen = 0;
  175. INT nEndLen = 0;
  176. INT nResultLen = 0;
  177. INT nWordCheck = 0;
  178. if ( szSrc[0] != NULL )
  179. {
  180. ZeroMemory(szResult,MAX_PATH);
  181. for ( INT nCnt = 0; nCnt < (INT)strlen(szSrc); nCnt++)
  182. {
  183. ZeroMemory(szTmpCheck, MAX_PATH);
  184. nEndLen = nCnt+1;
  185. // 泅犁何盒鳖瘤狼 巩磊凯阑 佬绰促.
  186. memcpy(&szTmpCheck, &szSrc[nStartLen], nEndLen-nStartLen);
  187. INT nsLen;
  188. nsLen = strlen(szTmpCheck);
  189. // 泅犁鳖瘤 佬绢柯 何盒捞 倾侩承捞甫 逞绢脊阑锭.
  190. if (nsLen > nDivideLen )
  191. {
  192. // 泅犁 2官捞飘 巩磊扼搁. 
  193. if ( szSrc[nEndLen-1] < 0 )
  194. {
  195. // 泅犁 菊俊巩磊啊 2官捞飘 巩磊啊 酒聪扼搁
  196. if ( !(nWordCheck%2) )
  197. {
  198. nStartLen += strlen(szTmpCheck)-1;
  199. nCnt--;
  200. CHAR* pszNewLine;
  201. pszNewLine = new CHAR[nResultLen+1];
  202. memcpy(pszNewLine,szResult,nResultLen);
  203. pszNewLine[nResultLen]=NULL;
  204. m_pxpStr->AddNode(pszNewLine);
  205. nResultLen = 0;
  206. nDividedLine++;
  207. }
  208. else
  209. {
  210. nStartLen += strlen(szTmpCheck)-2;
  211. nCnt -= 2;
  212. CHAR* pszNewLine;
  213. pszNewLine = new CHAR[nResultLen];
  214. memcpy(pszNewLine,szResult,nResultLen-1);
  215. pszNewLine[nResultLen-1]=NULL;
  216. m_pxpStr->AddNode(pszNewLine);
  217. nResultLen = 0;
  218. nDividedLine++;
  219. nWordCheck--;
  220. }
  221. }
  222. // 1官捞飘 巩磊. 
  223. // 泅犁焊促 茄官捞飘菊何盒鳖瘤父 绊妨秦林搁 等促.
  224. else
  225. {
  226. nStartLen += strlen(szTmpCheck)-1;
  227. nCnt--;
  228. CHAR* pszNewLine;
  229. pszNewLine = new CHAR[nResultLen+1];
  230. memcpy(pszNewLine,szResult,nResultLen);
  231. pszNewLine[nResultLen]=NULL;
  232. m_pxpStr->AddNode(pszNewLine);
  233. nResultLen=0;
  234. nDividedLine++;
  235. }
  236. }
  237. else if(szSrc[nEndLen-1]=='n') // 碍力俺青     n栏肺窍搁  Error ????
  238. {
  239. nStartLen += strlen(szTmpCheck)-1;
  240. CHAR* pszNewLine;
  241. pszNewLine = new CHAR[nResultLen+1];
  242. memcpy(pszNewLine,szResult,nResultLen);
  243. pszNewLine[nResultLen]=NULL;
  244. m_pxpStr->AddNode(pszNewLine);
  245. nResultLen=0;
  246. nDividedLine++;
  247. }
  248. else
  249. {
  250. if ( szSrc[nEndLen-1] < 0 )
  251. nWordCheck++;
  252. szResult[nResultLen] = szSrc[nEndLen-1];
  253. nResultLen++;
  254. }
  255. }
  256. if(nResultLen!=0)
  257. {
  258. CHAR* pszNewLine;
  259. pszNewLine = new CHAR[nResultLen+1];
  260. memcpy(pszNewLine,szResult,nResultLen);
  261. pszNewLine[nResultLen]=NULL;
  262. m_pxpStr->AddNode(pszNewLine);
  263. nDividedLine++;
  264. nResultLen=0;
  265. }
  266. return TRUE;
  267. }
  268. return FALSE;
  269. }
  270. // Render Process
  271. BOOL CMirMsgBox::RenderMessageBox(INT nLoopTIme) // Render Function
  272. {
  273. INT nCount;
  274. // POINT xPos;
  275. // POINT xSize;
  276. if(m_bActive&&m_bInited&&m_bSet)
  277. { // 柳楼 嘛绢具 且锭父 嘛阑巴
  278. // 嘛阑 捞固瘤 康开 犬牢
  279. g_xMainWnd.DrawWithImageForCompClipRgn(m_xBoxPos.x,m_xBoxPos.y,m_shWidth,m_shHeight,m_wpData,800,600);
  280. POINT xTxtPos;
  281. nCount = m_xMsg.GetCounter();
  282. m_xMsg.MoveCurrentToTop();
  283. xTxtPos.x = m_xBoxPos.x +24;
  284. switch(nCount)
  285. {
  286. case 1: // 嘛阑 临捞 1俺 挥老锭
  287. {
  288. xTxtPos.y = 68;
  289. INT n = strlen(m_szMsg);
  290. if(n<WRITESTRLENTH)
  291. {
  292. xTxtPos.x= xTxtPos.x + (WRITESTRLENTH-n)*2;
  293. }
  294. break;
  295. }
  296. case 2: // 嘛阑 临捞 2俺 老锭
  297. {
  298. xTxtPos.y = 61;
  299. break;
  300. }
  301. case 3: // 嘛阑 临捞 2俺 老锭
  302. {
  303. xTxtPos.y = 54;
  304. break;
  305. }
  306. case 4: // 嘛阑 临捞 2俺 老锭
  307. {
  308. xTxtPos.y = 47;
  309. break;
  310. }
  311. case 5: // 嘛阑 临捞 2俺 老锭
  312. {
  313. xTxtPos.y = 40;
  314. break;
  315. }
  316. case 6: // 嘛阑 临捞 2俺 老锭
  317. {
  318. xTxtPos.y = 33;
  319. break;
  320. }
  321. default: // 嘛阑 临捞 3俺 捞惑老 版快
  322. {
  323. xTxtPos.y = 26;
  324. break;
  325. }
  326. }
  327. for(int i = 0 ; i < nCount ; i++)
  328. {
  329. g_xMainWnd.PutsHan(NULL,xTxtPos.x,m_xBoxPos.y+xTxtPos.y,RGB(255,255,255),RGB(0,0,0),*m_xMsg.GetCurrentData());
  330. xTxtPos.y = xTxtPos.y + 16;
  331. m_xMsg.MoveNextNode();
  332. }
  333. // Draw Button
  334. for(i = m_nStart; i< m_nEnd; i++)
  335. {
  336. m_xMsgBtn[i].ShowGameBtn();
  337. }
  338. return FALSE;
  339. }
  340. return TRUE;
  341. }
  342. /*
  343. #define MSG_BTN_OK 1
  344. #define MSG_BTN_YESNO 2
  345. #define MSG_BTN_YESNOCANCLE 4
  346. #define MSG_EDITEXIST 128
  347. */