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

模拟服务器

开发平台:

Visual C++

  1. // NPCTxtAnalysis.cpp: implementation of the CNPCTxtAnalysis class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #define LINE_DIVIDER 0x01 // Line Divider
  6. #define DEFAULT_TEXT_HEIGHT 16 // Default Text Height(as Pixel)
  7. #define DEFAULT_TEXT_WIDTH 16 // Default Text Width(as Pixel)
  8. #define DEFAULT_TXT_COLOR RGB(255,255,255) // WHITE COLOR
  9. #define DEFAULT_BTN_COLOR RGB(255,255,0) // YELLOW COLOR
  10. #define DEFAULT_BTN_CLICK_COLOR RGB(255,0,0) // RED COLOR
  11. //////////////////////////////////////////////////////////////////////
  12. // Construction/Destruction
  13. //////////////////////////////////////////////////////////////////////
  14. CNPCTxtAnalysis::CNPCTxtAnalysis()
  15. {
  16. m_pxBtn = NULL;
  17. m_pxpTxt = NULL;
  18. m_pSourceText = NULL;
  19. m_bReady = FALSE;
  20. m_bInited = FALSE;
  21. m_pxGWND = NULL;
  22. }
  23. CNPCTxtAnalysis::~CNPCTxtAnalysis()
  24. {
  25. FreeAllMsg();
  26. }
  27. BOOL CNPCTxtAnalysis::InitAnalysis(CTextButton *xpBtn,CPDLList<CMText>* pxpTxt,CWHDXGraphicWindow* pxGWND)
  28. {
  29. m_pxBtn = xpBtn; // Link to Text Button Class
  30. m_pxpTxt = pxpTxt;
  31. ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
  32. m_pxGWND=pxGWND;
  33. m_bInited = TRUE;
  34. return TRUE;
  35. }
  36. BOOL CNPCTxtAnalysis::FreeAllMsg(VOID)
  37. {
  38. if(m_bInited)
  39. {
  40. m_pxpTxt->ClearAllNodes(); // 盒籍等 臂 葛滴 朝府扁
  41. m_pxBtn->ReleaseButtons(); // 积己等 窜捧 葛滴 朝府扁
  42. }
  43. if(m_pSourceText!=NULL)
  44. {
  45. delete[] m_pSourceText; // 罐篮 家胶档 葛滴 朝府扁
  46. m_pSourceText = NULL;
  47. }
  48. m_bReady = FALSE;
  49. return TRUE;
  50. }
  51. // Divider 绰 阿 CHAR喊肺 葛滴 八免茄促.
  52. // 搬苞绰 罐绰 溜矫 Memcpy甫 且巴.. 酒聪搁 静饭扁 蔼栏 凳...
  53. CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,CHAR* szDest,CHAR* Divider)
  54. {
  55. CHAR* szBuffer;
  56. int nSrcLen;
  57. int nBuf_Count,nCount;
  58. int nArrCount;
  59. szBuffer = new CHAR[MAX_BUFFER_SIZE];
  60. nSrcLen = strlen(szSource);
  61. nBuf_Count = 0;
  62. nCount = 0;
  63. if (nSrcLen >= MAX_BUFFER_SIZE - 1 ) // 弥措 辨捞焊促 辨搁 角青阑 秒家 茄促.
  64. {
  65. ZeroMemory(szDest,sizeof(szDest));
  66. delete[] szBuffer;
  67. return NULL;
  68. }
  69. if (strlen(szSource)==0) // 家胶 Text啊 绝栏搁 角青阑 秒家 茄促.
  70. {
  71. ZeroMemory(szDest,sizeof(szDest));
  72. delete[] szBuffer;
  73. return szDest;
  74. }
  75. nArrCount = strlen(Divider)/sizeof(char); // Divider狼 辨捞甫 备茄促.
  76. while(true)
  77. {
  78. char Ch;
  79. if( nCount <= nSrcLen )
  80. {
  81. Ch=szSource[nCount];
  82. for(int i = 0; i<= nArrCount-1;i++)
  83. {
  84. if(Ch == Divider[i]) // Divider 八免
  85. {
  86. goto CATCH_DIV;
  87. }
  88. }
  89. }
  90. if(nCount > nSrcLen)
  91. {
  92. CATCH_DIV:
  93. if(nBuf_Count >0)
  94. {
  95. if(nBuf_Count < MAX_BUFFER_SIZE -1)
  96. {
  97. szBuffer[nBuf_Count] = ''; // End String (sz)
  98. strcpy(szDest,szBuffer);
  99. strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
  100. }
  101. break;
  102. }
  103. else
  104. {
  105. if(nCount>nSrcLen)
  106. {
  107. ZeroMemory(szDest,sizeof(szDest));
  108. strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
  109. break;
  110. }
  111. }
  112. }
  113. else
  114. {
  115. if(nBuf_Count< MAX_BUFFER_SIZE -1)
  116. {
  117. szBuffer[nBuf_Count] = Ch;
  118. nBuf_Count++;
  119. }
  120. }
  121. nCount++;
  122. }
  123. delete[] szBuffer;
  124. return m_InnerResult;
  125. }
  126. CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,CHAR* szDest,CHAR Divider)
  127. {
  128. CHAR* szBuffer;
  129. int nSrcLen;
  130. int nBuf_Count,nCount;
  131. szBuffer = new CHAR[MAX_BUFFER_SIZE];
  132. nSrcLen = strlen(szSource);
  133. nBuf_Count = 0;
  134. nCount = 0;
  135. if (nSrcLen >= MAX_BUFFER_SIZE - 1 ) // 弥措 辨捞焊促 辨搁 角青阑 秒家 茄促.
  136. {
  137. ZeroMemory(szDest,sizeof(szDest));
  138. delete[] szBuffer;
  139. return NULL;
  140. }
  141. if (strlen(szSource)==0) // 家胶 Text啊 绝栏搁 角青阑 秒家 茄促.
  142. {
  143. ZeroMemory(szDest,sizeof(szDest));
  144. delete[] szBuffer;
  145. return szDest;
  146. }
  147. while(true)
  148. {
  149. char Ch;
  150. if( nCount <= nSrcLen )
  151. {
  152. Ch=szSource[nCount];
  153. if(Ch == Divider) // Divider 八免
  154. {
  155. goto CATCH_DIV;
  156. }
  157. }
  158. if(nCount > nSrcLen)
  159. {
  160. CATCH_DIV:
  161. if(nBuf_Count >0)
  162. {
  163. if(nBuf_Count < MAX_BUFFER_SIZE -1)
  164. {
  165. szBuffer[nBuf_Count] = ''; // End String (sz)
  166. strcpy(szDest,szBuffer);
  167. ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
  168. if(nSrcLen-nCount>0) 
  169. strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
  170. }
  171. break;
  172. }
  173. else
  174. {
  175. if(nCount>nSrcLen)
  176. {
  177. ZeroMemory(szDest,sizeof(szDest));
  178. ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
  179. if(nSrcLen-1>0) strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
  180. break;
  181. }
  182. }
  183. }
  184. else
  185. {
  186. if(nBuf_Count< MAX_BUFFER_SIZE -1)
  187. {
  188. szBuffer[nBuf_Count] = Ch;
  189. nBuf_Count++;
  190. }
  191. }
  192. nCount++;
  193. }
  194. if(szBuffer!=NULL)
  195. {
  196. delete[] szBuffer;
  197. szBuffer = NULL;
  198. }
  199. return m_InnerResult;
  200. }
  201. CHAR* CNPCTxtAnalysis::GetValidStr(CHAR* szSource,INT nSrcLen,CHAR* szDest,INT nDestLen,CHAR Divider)
  202. {
  203. CHAR* szBuffer;
  204. int nBuf_Count,nCount;
  205. szBuffer = new CHAR[MAX_BUFFER_SIZE];
  206. nBuf_Count = 0;
  207. nCount = 0;
  208. if (nSrcLen >= MAX_BUFFER_SIZE - 1 ) // 弥措 辨捞焊促 辨搁 角青阑 秒家 茄促.
  209. {
  210. ZeroMemory(szDest,nDestLen);
  211. delete[] szBuffer;
  212. return NULL;
  213. }
  214. if (strlen(szSource)==0) // 家胶 Text啊 绝栏搁 角青阑 秒家 茄促.
  215. {
  216. ZeroMemory(szDest,nDestLen);
  217. delete[] szBuffer;
  218. return szDest;
  219. }
  220. while(true)
  221. {
  222. char Ch;
  223. if( nCount <= nSrcLen )
  224. {
  225. Ch=szSource[nCount];
  226. if(Ch == Divider) // Divider 八免
  227. {
  228. goto CATCH_DIV;
  229. }
  230. }
  231. if(nCount > nSrcLen)
  232. {
  233. CATCH_DIV:
  234. if(nBuf_Count >0)
  235. {
  236. if(nBuf_Count < MAX_BUFFER_SIZE -1)
  237. {
  238. szBuffer[nBuf_Count] = ''; // End String (sz)
  239. memcpy(szDest,szBuffer,nBuf_Count);
  240. ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
  241. if(nSrcLen-nCount>0) 
  242. strncpy(m_InnerResult,szSource + nCount+1,nSrcLen-nCount);
  243. }
  244. break;
  245. }
  246. else
  247. {
  248. if(nCount>nSrcLen)
  249. {
  250. ZeroMemory(szDest,nDestLen);
  251. ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
  252. if(nSrcLen-1>0) strncpy(m_InnerResult,szSource +nCount+2,nSrcLen-1);
  253. break;
  254. }
  255. }
  256. }
  257. else
  258. {
  259. if(nBuf_Count< MAX_BUFFER_SIZE -1)
  260. {
  261. szBuffer[nBuf_Count] = Ch;
  262. nBuf_Count++;
  263. }
  264. }
  265. nCount++;
  266. }
  267. if(szBuffer!=NULL)
  268. {
  269. delete[] szBuffer;
  270. szBuffer = NULL;
  271. }
  272. return m_InnerResult;
  273. }
  274. CHAR* CNPCTxtAnalysis::ArrestString(CHAR* szSource,CHAR SearchAfter,CHAR AssertBefore,CHAR* AssertStr)
  275. {
  276. int Src_Len;
  277. bool Right_Data,Fin;
  278. ZeroMemory(AssertStr,strlen(AssertStr));
  279. ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
  280. if(strlen(szSource)==0)
  281. {
  282. ZeroMemory(AssertStr,sizeof(AssertStr));
  283. return m_InnerResult;
  284. }
  285. int n;
  286. Src_Len = strlen(szSource);
  287. Right_Data = false;
  288. if(Src_Len >=2)
  289. {
  290. if(szSource[0] == SearchAfter)
  291. {
  292. strncpy(szSource,szSource+1,Src_Len-1);
  293. szSource[Src_Len-1]=NULL;
  294. Src_Len = strlen(szSource);
  295. Right_Data = true;
  296. }
  297. else
  298. {
  299. n= FindChr(szSource,SearchAfter);
  300. if(n>=0)
  301. {
  302. strncpy(szSource,szSource+n,Src_Len - (n));
  303. Src_Len = strlen(szSource);
  304. Right_Data = true;
  305. }
  306. }
  307. Fin = false;
  308. if(Right_Data)
  309. {
  310. n = FindChr(szSource,AssertBefore);
  311. if(n>=0)
  312. {
  313. strncpy(AssertStr,szSource,n);
  314. strncpy(m_InnerResult,szSource+n,Src_Len - n);
  315. }
  316. else
  317. {
  318. strncat(m_InnerResult,&SearchAfter,1);
  319. strcat(m_InnerResult,szSource);
  320. }
  321. }
  322. else
  323. {
  324. for(int i = 0; i< Src_Len;i++)
  325. {
  326. if(szSource[i] == SearchAfter)
  327. {
  328. strncpy(m_InnerResult,szSource+i,Src_Len-i+2);
  329. break;
  330. }
  331. }
  332. }
  333. }
  334. return m_InnerResult;
  335. }
  336. CHAR* CNPCTxtAnalysis::UpperCase(CHAR* szStr)
  337. {
  338. int Len;
  339. ZeroMemory(m_InnerResult,MAX_BUFFER_SIZE);
  340. Len = strlen(szStr);
  341. for(int i = 0;i<Len;i++)
  342. {
  343. if(szStr[i]>'a' && szStr[i]<'z')
  344. {
  345. m_InnerResult[i] = szStr[i]-32;
  346. }
  347. else
  348. {
  349. m_InnerResult[i] = szStr[i];
  350. }
  351. }
  352. return m_InnerResult;
  353. }
  354. CHAR CNPCTxtAnalysis::UpperCase(CHAR chr)
  355. {
  356. char szResult;
  357. szResult=0x00;
  358. szResult = (chr>'a' && chr<'z') ? chr-32:chr;
  359. return szResult;
  360. }
  361. int CNPCTxtAnalysis::FindChr(CHAR* szstr,CHAR ch)
  362. {
  363. int Count = 0;
  364. bool Conditions=true;
  365. while(Conditions && Count<((int)strlen(szstr)))
  366. {
  367. if(szstr[Count]==ch)
  368. Conditions = false;
  369. Count++;
  370. }
  371. if(!Conditions) return Count;
  372. else return -1;
  373. }
  374. int CNPCTxtAnalysis::FindChr(CHAR* szStr,CHAR* ch)
  375. {
  376. int Count = 0;
  377. int nLenObject;
  378. bool Conditions=true;
  379. nLenObject = strlen(ch);
  380. while(Conditions && Count <((int)strlen(szStr)))
  381. {
  382. if(szStr[Count]==ch[0])
  383. {
  384. int nChk=0;
  385. for(int i = 0 ; (i <nLenObject)&&(Count+i<(int)strlen(szStr)); i++)
  386. {
  387. if(szStr[Count+i]==ch[i])
  388. nChk++;
  389. }
  390. if(nChk == nLenObject)
  391. Conditions = false;
  392. // Text啊 葛滴 老摹 且 版快父 八免
  393. }
  394. Count++;
  395. }
  396. if(!Conditions) return Count;
  397. else return -1;
  398. }
  399. int CNPCTxtAnalysis::StrLength(CHAR* str)
  400. {
  401. int Counter = 0;
  402. while(str[Counter++]!='');
  403. return Counter;
  404. }
  405. void CNPCTxtAnalysis::AnalySisText(CDLList<CHAR*>* pxpTxt,INT nLineMax)
  406. {
  407. BOOL DrawCenter = FALSE;
  408. CHAR* szTemp;
  409. CHAR* CmdStr;
  410. CHAR* CmdParamStr;
  411. CHAR* szStr;
  412. INT nPosX = 20;;
  413. INT nLineCount = 0;
  414. COLORREF cColor = RGB(1,1,1);
  415. SIZE tSize;
  416. if(m_bInited)
  417. {
  418. // Init Buffers
  419. CmdParamStr = new CHAR[MAX_BUFFER_SIZE];
  420. CmdStr = new CHAR[MAX_BUFFER_SIZE];
  421. szStr = new CHAR[MAX_BUFFER_SIZE];
  422. ZeroMemory(CmdStr,MAX_BUFFER_SIZE);
  423. ZeroMemory(szStr,MAX_BUFFER_SIZE);
  424. pxpTxt->MoveCurrentToTop();
  425. while(true)
  426. {
  427. if(nLineMax<=nLineCount) 
  428. break;
  429. strcpy(szStr,*pxpTxt->GetCurrentData()); // Line Divide
  430. if(strlen(szStr)!=0)
  431. {
  432. while((FindChr(szStr,'<')>0)&&(FindChr(szStr,'>')>0) && (strlen(szStr)!=0))
  433. {
  434. CHAR* Fdata;
  435. Fdata = new CHAR[MAX_BUFFER_SIZE];
  436. ZeroMemory(Fdata,MAX_BUFFER_SIZE);
  437. // <>Tag 盒府 Text Button 积己
  438. if((szStr[0])!='<')
  439. {
  440. szTemp =  GetValidStr(szStr,Fdata,'<');
  441. strcpy(szStr,"<");
  442. strcat(szStr,szTemp);
  443. } // endif
  444. // <>救俊 乐绰 郴侩 CmdStr肺
  445. szTemp = ArrestString(szStr,'<','>',CmdStr);
  446. strcpy(szStr,szTemp);
  447. szTemp = NULL;
  448. if(strlen(CmdStr)!=0)
  449. {
  450. switch(UpperCase(CmdStr[0]))
  451. {
  452. case '0': // <0> 老版快 臂磊祸 BLACK
  453. {
  454. cColor = RGB(0,0,0);
  455. }
  456. break;
  457. case '1': // <1> 老版快 臂磊祸 RED
  458. {
  459. cColor = RGB(255,0,0);
  460. }
  461. break;
  462. case '2': // <2> 老版快 臂磊祸 GREEN
  463. {
  464. cColor = RGB(0,128,0);
  465. }
  466. break;
  467. case '3': // <3> 老版快 臂磊祸 Olive
  468. {
  469. cColor = RGB(128,128,0);
  470. }
  471. break;
  472. case '4': // <4> 老版快 臂磊祸 GRAY
  473. {
  474. cColor = RGB(128,128,128);
  475. }
  476. break;
  477. case '5': // <5> 老版快 臂磊祸 Maroon
  478. {
  479. cColor = RGB(128,0,0);
  480. }
  481. break;
  482. case '6': // <6> 老版快 臂磊祸 Teal
  483. {
  484. cColor = RGB(0,128,128);
  485. }
  486. break;
  487. case '7': // <7> 老版快 臂磊祸 Navy
  488. {
  489. cColor = RGB(0,0,128);
  490. }
  491. break;
  492. case '8': // <8> 老版快 臂磊祸 Silver
  493. {
  494. cColor = RGB(192,192,192);
  495. }
  496. break;
  497. case '9': // <9> 老版快 臂磊祸 Purple
  498. {
  499. cColor = RGB(128,0,128);
  500. }
  501. break;
  502. case 'A': // <A> 老版快 臂磊祸 Lime
  503. {
  504. cColor = RGB(0,255,0);
  505. }
  506. break;
  507. case 'B': // <B> 老版快 臂磊祸 Blue
  508. {
  509. cColor = RGB(0,0,255);
  510. }
  511. break;
  512. case 'C': // <C> 老版快 臂磊祸 White
  513. {
  514. cColor = RGB(255,255,255);
  515. }
  516. break;
  517. case 'D': // <D> 老版快 臂磊祸 Fuchsia
  518. {
  519. cColor = RGB(255,0,255);
  520. }
  521. break;
  522. case 'E': // <E> 老版快 臂磊祸 Aqua
  523. {
  524. cColor = RGB(0,255,255);
  525. }
  526. break;
  527. case 'F': // <F> 老版快 臂磊祸 Yellow
  528. {
  529. cColor = RGB(255,255,0);
  530. }
  531. break;
  532. case 'X': // <Z> 老版快 臂磊祸 Default
  533. {
  534. cColor = RGB(1,1,1);
  535. }
  536. break;
  537. } // endswitch
  538. szTemp = NULL;
  539. szTemp = GetValidStr(CmdStr,CmdStr,'/');
  540. ZeroMemory(CmdParamStr,MAX_BUFFER_SIZE);
  541. if(szTemp[0]!=NULL)
  542. strncpy(CmdParamStr,szTemp,strlen(szTemp)-1);
  543. szTemp = NULL;
  544. }  // endif
  545. else
  546. {
  547. // 辆搬 <> 啊 乐栏搁 辆丰
  548. }  // endifelse
  549. if(strlen(Fdata)!=0) // '<' 傈俊 乐绰 Text甫 老馆 Text俊 眠啊
  550. { // 老馆 Text 眠啊
  551. CMText* pxTmpTxt;
  552. pxTmpTxt = new CMText;
  553. pxTmpTxt->pText = new CHAR[strlen(Fdata)+1];
  554. // Text 汲沥
  555. pxTmpTxt->bDrawCenter = DrawCenter;
  556. pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // 祸篮 Tag俊 狼秦 搬沥秦 林绢具窃.
  557. pxTmpTxt->nLine = nLineCount;
  558. pxTmpTxt->nPosx = nPosX;
  559. strcpy(pxTmpTxt->pText,Fdata);
  560. m_pxpTxt->AddNode(pxTmpTxt);
  561. tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",Fdata);
  562. nPosX=nPosX+tSize.cx;
  563. delete[] Fdata;
  564. Fdata = NULL;
  565. cColor = RGB(1,1,1);
  566. } // endif
  567. if(strlen(CmdParamStr)!=0)//CmdStr)!=0)
  568. {
  569. RECT tRect;
  570. tRect.top =0;
  571. tRect.left = nPosX;
  572. tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",CmdStr);
  573. tRect.right = tSize.cx;
  574. tRect.bottom = tSize.cy;
  575. // Text 滚瓢 积己
  576. m_pxBtn->AddButton(CmdStr,tRect,nLineCount,CmdParamStr,(cColor!=RGB(1,1,1) ? cColor : DEFAULT_BTN_COLOR),DEFAULT_BTN_CLICK_COLOR);
  577. nPosX=nPosX+tSize.cx;
  578. } // Text Button  // endif
  579. if(Fdata!=NULL)
  580. {
  581. delete[] Fdata;
  582. Fdata = NULL;
  583. }
  584. } // end while
  585. // '>'缔何盒 趣篮 '<','>' 绝绰 扁成 Text老 版快
  586. if(strlen(szStr)!=0)
  587. {
  588. do
  589. {
  590. // Line 阑 唱穿绊 弊 搬苞甫 Text List 俊 持绰促.
  591. CHAR  *szTemp1=NULL,*szTemp2=NULL;
  592. szTemp1 = new CHAR[MAX_BUFFER_SIZE];
  593. ZeroMemory(szTemp1,MAX_BUFFER_SIZE);
  594. // Line Divider
  595. szTemp2 =  GetValidStr(szStr,szTemp1,LINE_DIVIDER);
  596. strcpy(szStr,szTemp2);
  597. // Text 积己
  598. CMText* pxTmpTxt;
  599. pxTmpTxt = new CMText;
  600. pxTmpTxt->pText = new CHAR[strlen(szTemp1)+1];
  601. // Text 汲沥
  602. pxTmpTxt->bDrawCenter = DrawCenter;
  603. pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // 烙矫 Tag俊 狼窍咯 祸函券
  604. pxTmpTxt->nLine = nLineCount;
  605. pxTmpTxt->nPosx = nPosX;
  606. strcpy(pxTmpTxt->pText,szTemp1);
  607. m_pxpTxt->AddNode(pxTmpTxt);
  608. tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",szTemp1);
  609. nPosX=nPosX+tSize.cx;
  610. delete[] szTemp1;
  611. }while(strlen(szStr)!=0);
  612. // Draw Normal Text
  613. } // endif
  614. } // endif
  615. // Line Feed
  616. nLineCount ++;
  617. nPosX = 20; //矫累篮 20 pixel 何磐
  618. pxpTxt->MoveNextNode();
  619. } // end while
  620. delete[] CmdParamStr;
  621. delete[] CmdStr;
  622. delete[] szStr;
  623. m_bReady = TRUE;
  624. } // endif
  625. else
  626. {
  627. m_bReady = FALSE;
  628. } // end ifelse
  629. }
  630. void CNPCTxtAnalysis::AnalySisText(CHAR* Msg)
  631. {
  632. BOOL DrawCenter = FALSE;
  633. CHAR* szTemp;
  634. CHAR* CmdStr;
  635. CHAR* CmdParamStr;
  636. CHAR* szStr;
  637. INT nPosX =0;
  638. INT nLineCount = 0;
  639. COLORREF cColor = 0;
  640. SIZE tSize;
  641. if(m_bInited)
  642. {
  643. // Init Buffers
  644. CmdParamStr = new CHAR[MAX_BUFFER_SIZE];
  645. CmdStr = new CHAR[MAX_BUFFER_SIZE];
  646. szStr = new CHAR[MAX_BUFFER_SIZE];
  647. ZeroMemory(CmdParamStr,MAX_BUFFER_SIZE);
  648. ZeroMemory(CmdStr,MAX_BUFFER_SIZE);
  649. ZeroMemory(szStr,MAX_BUFFER_SIZE);
  650. while(true)
  651. {
  652. if(strlen(Msg)==0) break;
  653. szTemp =  GetValidStr(Msg,szStr,LINE_DIVIDER); // Line Divider
  654. strcpy(Msg,szTemp);
  655. if(strlen(szStr)!=0)
  656. {
  657. while((FindChr(szStr,'<')>0)&&(FindChr(szStr,'>')>0) && (strlen(szStr)!=0))
  658. {
  659. CHAR* Fdata;
  660. Fdata = new CHAR[MAX_BUFFER_SIZE];
  661. ZeroMemory(Fdata,MAX_BUFFER_SIZE);
  662. // <>Tag 盒府 Text Button 积己
  663. if((szStr[0])!='<')
  664. {
  665. szTemp =  GetValidStr(szStr,Fdata,'<');
  666. strcpy(szStr,"<");
  667. strcat(szStr,szTemp);
  668. }
  669. // <>救俊 乐绰 郴侩 CmdStr肺
  670. szTemp = ArrestString(szStr,'<','>',CmdStr);
  671. strcpy(szStr,szTemp);
  672. szTemp = NULL;
  673. if(strlen(CmdStr)!=0)
  674. {
  675. switch(UpperCase(CmdStr[0]))
  676. {
  677. case '0': // <0> 老版快 臂磊祸 BLACK
  678. {
  679. cColor = RGB(0,0,0);
  680. continue;
  681. }
  682. break;
  683. case '1': // <1> 老版快 臂磊祸 RED
  684. {
  685. cColor = RGB(255,0,0);
  686. continue;
  687. }
  688. break;
  689. case '2': // <2> 老版快 臂磊祸 GREEN
  690. {
  691. cColor = RGB(0,128,0);
  692. continue;
  693. }
  694. break;
  695. case '3': // <3> 老版快 臂磊祸 Olive
  696. {
  697. cColor = RGB(128,128,0);
  698. continue;
  699. }
  700. break;
  701. case '4': // <4> 老版快 臂磊祸 GRAY
  702. {
  703. cColor = RGB(128,128,128);
  704. continue;
  705. }
  706. break;
  707. case '5': // <5> 老版快 臂磊祸 Maroon
  708. {
  709. cColor = RGB(128,0,0);
  710. continue;
  711. }
  712. break;
  713. case '6': // <6> 老版快 臂磊祸 Teal
  714. {
  715. cColor = RGB(0,128,128);
  716. continue;
  717. }
  718. break;
  719. case '7': // <7> 老版快 臂磊祸 Navy
  720. {
  721. cColor = RGB(0,0,128);
  722. continue;
  723. }
  724. break;
  725. case '8': // <8> 老版快 臂磊祸 Silver
  726. {
  727. cColor = RGB(192,192,192);
  728. continue;
  729. }
  730. break;
  731. case '9': // <9> 老版快 臂磊祸 Purple
  732. {
  733. cColor = RGB(128,0,128);
  734. continue;
  735. }
  736. break;
  737. case 'A': // <A> 老版快 臂磊祸 Lime
  738. {
  739. cColor = RGB(0,255,0);
  740. continue;
  741. }
  742. break;
  743. case 'B': // <B> 老版快 臂磊祸 Blue
  744. {
  745. cColor = RGB(0,0,255);
  746. continue;
  747. }
  748. break;
  749. case 'C': // <C> 老版快 臂磊祸 White
  750. {
  751. cColor = RGB(255,255,255);
  752. continue;
  753. }
  754. break;
  755. case 'D': // <D> 老版快 臂磊祸 Fuchsia
  756. {
  757. cColor = RGB(255,0,255);
  758. continue;
  759. }
  760. break;
  761. case 'E': // <E> 老版快 臂磊祸 Aqua
  762. {
  763. cColor = RGB(0,255,255);
  764. continue;
  765. }
  766. break;
  767. case 'F': // <F> 老版快 臂磊祸 Yellow
  768. {
  769. cColor = RGB(255,255,0);
  770. continue;
  771. }
  772. break;
  773. case 'X': // <Z> 老版快 臂磊祸 Default
  774. {
  775. cColor = RGB(1,1,1);
  776. continue;
  777. }
  778. break;
  779. }
  780. /* szTemp = new CHAR[2];
  781. strncpy(szTemp,CmdStr,2);
  782. szTemp = UpperCase(szTemp);
  783. if(strncmp(szTemp,"/C",2)==0) // </C> 老 版快 啊款单 嘛扁 场
  784. {
  785. DrawCenter = FALSE;
  786. delete[] szTemp;
  787. szTemp = NULL;
  788. continue;
  789. }
  790. delete[] szTemp;
  791. */ szTemp = NULL;
  792. szTemp = GetValidStr(CmdStr,CmdStr,'/');
  793. strcpy(CmdParamStr,szTemp);
  794. szTemp = NULL;
  795. }
  796. else
  797. {
  798. // 辆搬 <> 啊 乐栏搁 辆丰
  799. }
  800. if(strlen(Fdata)!=0) // '<' 傈俊 乐绰 Text甫 老馆 Text俊 眠啊
  801. { // 老馆 Text 眠啊
  802. CMText* pxTmpTxt;
  803. pxTmpTxt = new CMText;
  804. pxTmpTxt->pText = new CHAR[strlen(Fdata)+1];
  805. // Text 汲沥
  806. pxTmpTxt->bDrawCenter = DrawCenter;
  807. pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // 祸篮 Tag俊 狼秦 搬沥秦 林绢具窃.
  808. pxTmpTxt->nLine = nLineCount;
  809. pxTmpTxt->nPosx = nPosX;
  810. strcpy(pxTmpTxt->pText,Fdata);
  811. m_pxpTxt->AddNode(pxTmpTxt);
  812. tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",Fdata);
  813. nPosX=nPosX+tSize.cx;
  814. }
  815. if(strlen(CmdStr)!=0)
  816. {
  817. RECT tRect;
  818. tRect.top =0;
  819. tRect.left = nPosX;
  820. tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",CmdStr);
  821. tRect.right = tSize.cx;
  822. tRect.bottom = tSize.cy;
  823. // Text 滚瓢 积己
  824. m_pxBtn->AddButton(CmdStr,tRect,nLineCount,CmdParamStr,(cColor!=RGB(1,1,1) ? cColor : DEFAULT_BTN_COLOR),DEFAULT_BTN_CLICK_COLOR);
  825. nPosX=nPosX+tSize.cx;
  826. } // Text Button
  827. }
  828. // '>'缔何盒 趣篮 '<','>' 绝绰 扁成 Text老 版快
  829. if(strlen(szStr)!=0)
  830. {
  831. do
  832. {
  833. // Line 阑 唱穿绊 弊 搬苞甫 Text List 俊 持绰促.
  834. CHAR  *szTemp1=NULL,*szTemp2=NULL;
  835. szTemp1 = new CHAR[MAX_BUFFER_SIZE];
  836. ZeroMemory(szTemp1,MAX_BUFFER_SIZE);
  837. // Line Divider
  838. szTemp2 =  GetValidStr(szStr,szTemp1,LINE_DIVIDER);
  839. strcpy(szStr,szTemp2);
  840. // Text 积己
  841. CMText* pxTmpTxt;
  842. pxTmpTxt = new CMText;
  843. pxTmpTxt->pText = new CHAR[strlen(szTemp1)+1];
  844. // Text 汲沥
  845. pxTmpTxt->bDrawCenter = DrawCenter;
  846. pxTmpTxt->fColor = cColor!=RGB(1,1,1) ? cColor : DEFAULT_TXT_COLOR; // 烙矫 Tag俊 狼窍咯 祸函券
  847. pxTmpTxt->nLine = nLineCount;
  848. pxTmpTxt->nPosx = nPosX;
  849. strcpy(pxTmpTxt->pText,szTemp1);
  850. m_pxpTxt->AddNode(pxTmpTxt);
  851. tSize = m_pxGWND->GetStrLength(NULL,NULL,"%s",szTemp1);
  852. nPosX=nPosX+tSize.cx;
  853. delete[] szTemp1;
  854. nPosX = 20; // 矫累篮 20 pixel 何磐
  855. nLineCount ++; // Line Feed
  856. }while(strlen(szStr)!=0);
  857. // Draw Normal Text
  858. }
  859. }
  860. // Line Feed
  861. nLineCount ++;
  862. nPosX = 20; //矫累篮 20 pixel 何磐
  863. }
  864. delete CmdParamStr;
  865. delete CmdStr;
  866. delete szStr;
  867. m_bReady = TRUE;
  868. }
  869. else
  870. {
  871. m_bReady = FALSE;
  872. }
  873. }
  874. BOOL CNPCTxtAnalysis::IsReadyToDisplay(VOID)
  875. {
  876. return m_bReady;
  877. }
  878. BOOL CNPCTxtAnalysis::IsInitialized(VOID)
  879. {
  880. return m_bInited;
  881. }
  882. // 侩扁
  883. BOOL CNPCTxtAnalysis::StringDivide(INT nDivideWidth, INT& nDividedLine, CHAR* szSrc,CDLList<CHAR*>* m_pxpStr)
  884. {
  885. CHAR szTmpCheck[MAX_PATH];
  886. CHAR szResult[MAX_PATH];
  887. nDividedLine = 1;
  888. INT nStartLen = 0;
  889. INT nEndLen = 0;
  890. INT nResultLen = 0;
  891. INT nWordCheck = 0;
  892. if ( szSrc[0] != NULL )
  893. {
  894. ZeroMemory(szResult,MAX_PATH);
  895. for ( INT nCnt = 0; nCnt < (INT)strlen(szSrc); nCnt++)
  896. {
  897. ZeroMemory(szTmpCheck, MAX_PATH);
  898. nEndLen = nCnt+1;
  899. // 泅犁何盒鳖瘤狼 巩磊凯阑 佬绰促.
  900. memcpy(&szTmpCheck, &szSrc[nStartLen], nEndLen-nStartLen);
  901. SIZE sizeLen;
  902. sizeLen = m_pxGWND->GetStrLength(NULL,NULL, szTmpCheck);
  903. // 泅犁鳖瘤 佬绢柯 何盒捞 倾侩承捞甫 逞绢脊阑锭.
  904. if ( sizeLen.cx > nDivideWidth )
  905. {
  906. // 泅犁 2官捞飘 巩磊扼搁. 
  907. if ( szSrc[nEndLen-1] < 0 )
  908. {
  909. // 泅犁 菊俊巩磊啊 2官捞飘 巩磊啊 酒聪扼搁
  910. if ( !(nWordCheck%2) )
  911. {
  912. nStartLen += strlen(szTmpCheck)-1;
  913. nCnt--;
  914. CHAR* pszNewLine;
  915. pszNewLine = new CHAR[nResultLen+1];
  916. memcpy(pszNewLine,szResult,nResultLen);
  917. pszNewLine[nResultLen]=NULL;
  918. m_pxpStr->AddNode(pszNewLine);
  919. nResultLen = 0;
  920. nDividedLine++;
  921. }
  922. else
  923. {
  924. nStartLen += strlen(szTmpCheck)-2;
  925. nCnt -= 2;
  926. CHAR* pszNewLine;
  927. pszNewLine = new CHAR[nResultLen];
  928. memcpy(pszNewLine,szResult,nResultLen-1);
  929. pszNewLine[nResultLen-1]=NULL;
  930. m_pxpStr->AddNode(pszNewLine);
  931. nResultLen = 0;
  932. nDividedLine++;
  933. nWordCheck--;
  934. }
  935. }
  936. // 1官捞飘 巩磊. 
  937. // 泅犁焊促 茄官捞飘菊何盒鳖瘤父 绊妨秦林搁 等促.
  938. else
  939. {
  940. nStartLen += strlen(szTmpCheck)-1;
  941. nCnt--;
  942. CHAR* pszNewLine;
  943. pszNewLine = new CHAR[nResultLen+1];
  944. memcpy(pszNewLine,szResult,nResultLen);
  945. pszNewLine[nResultLen]=NULL;
  946. m_pxpStr->AddNode(pszNewLine);
  947. nResultLen=0;
  948. nDividedLine++;
  949. }
  950. }
  951. else if(szSrc[nEndLen-1]=='n') // 碍力俺青     n栏肺窍搁  Error ????
  952. {
  953. nStartLen += strlen(szTmpCheck)-1;
  954. CHAR* pszNewLine;
  955. pszNewLine = new CHAR[nResultLen+1];
  956. memcpy(pszNewLine,szResult,nResultLen);
  957. pszNewLine[nResultLen]=NULL;
  958. m_pxpStr->AddNode(pszNewLine);
  959. nResultLen=0;
  960. nDividedLine++;
  961. }
  962. else
  963. {
  964. if ( szSrc[nEndLen-1] < 0 )
  965. nWordCheck++;
  966. szResult[nResultLen] = szSrc[nEndLen-1];
  967. nResultLen++;
  968. }
  969. }
  970. if(nResultLen!=0)
  971. {
  972. CHAR* pszNewLine;
  973. pszNewLine = new CHAR[nResultLen+1];
  974. memcpy(pszNewLine,szResult,nResultLen);
  975. pszNewLine[nResultLen]=NULL;
  976. m_pxpStr->AddNode(pszNewLine);
  977. nDividedLine++;
  978. nResultLen=0;
  979. }
  980. return TRUE;
  981. }
  982. return FALSE;
  983. }