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

模拟服务器

开发平台:

Visual C++

  1. /******************************************************************************************************************
  2.                                                                                                                    
  3. 葛碘疙:
  4. 累己磊:
  5. 累己老:
  6. [老磊][荐沥磊] : 荐沥 郴侩
  7.                                                                                                                    
  8. *******************************************************************************************************************/
  9. #include "StdAfx.h"
  10. CChatPopWnd::CChatPopWnd()
  11. {
  12. Init();
  13. }
  14. CChatPopWnd::~CChatPopWnd()
  15. {
  16. Destroy();
  17. }
  18. VOID CChatPopWnd::Init()
  19. {
  20. CGameWnd::Init();
  21. m_nCanScrlCnt  = 0;
  22. m_nCurrStartChatLine = 0;
  23. SetRect(&m_rcChatPopFrame, 0, 0, 0, 0);
  24. SetRect(&m_rcEditBoxFrame, 0, 0, 0, 0);
  25. m_xChatPopBtn.Init();
  26. }
  27. VOID CChatPopWnd::Destroy()
  28. {
  29. m_xstrDividedChat.ClearAllNodes();
  30. Init();
  31. }
  32. VOID CChatPopWnd::CreateChatPopWnd(INT nID, CWHWilImageData* pxWndImage, INT nFrameImgIdx, INT nStartX, INT nStartY, INT nWidth, INT nHeight, BOOL bCanMove)
  33. {
  34. CreateGameWnd(nID, pxWndImage, nFrameImgIdx, bCanMove, nStartX, nStartY, nWidth, nHeight);
  35. SetRect(&m_rcChatPopFrame, 40, 29, 531, 308);
  36. SetRect(&m_rcEditBoxFrame, 36, 312, 535, 328);
  37. m_xChatPopBtn.CreateGameBtn(pxWndImage, 372, 373, nStartX+542, nStartY+353);
  38. }
  39. BOOL CChatPopWnd::MsgAdd(DWORD dwFontColor, DWORD dwFontBackColor, CHAR* szMsg)
  40. {
  41. CHAR szChatMsg[MAX_PATH];
  42. if ( szMsg != NULL )
  43. {
  44. strcpy(szChatMsg, szMsg);
  45. if ( szChatMsg[0] != NULL )
  46. {
  47. INT nLineCnt;
  48. CHAR szDivied[MAX_PATH*2];
  49. CHAR szArg[5][MAX_PATH];
  50. ZeroMemory(szDivied, MAX_PATH*2);
  51. ZeroMemory(&szArg[0], MAX_PATH*5);
  52. g_xMainWnd.StringDivide(m_rcChatPopFrame.right-m_rcChatPopFrame.left, nLineCnt, szChatMsg, szDivied);
  53. sscanf(szDivied, "%[^`]%*c %[^`]%*c %[^`]%*c %[^`]%*c %[^`]%*c", szArg[0], szArg[1], szArg[2], szArg[3], szArg[4]);
  54. if ( nLineCnt > 5 ) nLineCnt = 5;
  55. for ( INT nCnt = 0; nCnt < nLineCnt; nCnt++ )
  56. {
  57. if ( m_nCanScrlCnt )
  58. m_nCurrStartChatLine = m_nCanScrlCnt;
  59. if ( m_xstrDividedChat.GetCounter() >= _MAX_CHATLINE_POPUP )
  60. {
  61. m_nCurrStartChatLine++;
  62. m_nCanScrlCnt++;
  63. }
  64. CHATSTRING stChatStr;
  65. stChatStr.dwFontColor = dwFontColor;
  66. stChatStr.dwFontBackColor = dwFontBackColor;
  67. stChatStr.strChat = szArg[nCnt];
  68. m_xstrDividedChat.AddNode(stChatStr);
  69. }
  70. }
  71. return TRUE;
  72. }
  73. return FALSE;
  74. }
  75. VOID CChatPopWnd::ShowChatPopWnd()
  76. {
  77. ShowGameWnd();
  78. // 盲泼 府胶飘甫 焊咯霖促.
  79. if ( !m_xstrDividedChat.CheckEmpty() )
  80. {
  81. m_xstrDividedChat.MoveCurrentToTop();
  82. m_xstrDividedChat.MoveNode(m_nCurrStartChatLine);
  83. INT nLine = 0;
  84. INT nMaxLine;
  85. if ( !m_nCurrStartChatLine )
  86. {
  87. if ( !m_nCanScrlCnt )
  88. nMaxLine = m_xstrDividedChat.GetCounter();
  89. else
  90. nMaxLine = _MAX_CHATLINE_POPUP;
  91. }
  92. else
  93. nMaxLine = (m_nCurrStartChatLine+_MAX_CHATLINE_POPUP) > m_xstrDividedChat.GetCounter() ?
  94.    m_xstrDividedChat.GetCounter() : m_nCurrStartChatLine+_MAX_CHATLINE_POPUP;
  95. for ( INT nCnt = m_nCurrStartChatLine; nCnt < nMaxLine; nCnt++ )
  96. {
  97. LPCHATSTRING pstChatString;
  98. pstChatString = m_xstrDividedChat.GetCurrentData();
  99. g_xMainWnd.PutsHan(g_xMainWnd.GetBackBuffer(),
  100.    m_rcWnd.left+m_rcChatPopFrame.left, m_rcWnd.top+m_rcChatPopFrame.top+nLine*14,
  101.    pstChatString->dwFontBackColor, pstChatString->dwFontColor, pstChatString->strChat.begin());
  102. m_xstrDividedChat.MoveNextNode();
  103. nLine++;
  104. }
  105. }
  106. m_xChatPopBtn.ShowGameBtn();
  107. }
  108. BOOL CChatPopWnd::OnLButtonUp(POINT ptMouse)
  109. {
  110. MoveWindow(g_xChatEditBox.GetSafehWnd(), g_xMainWnd.m_rcWindow.left + m_rcWnd.left + m_rcEditBoxFrame.left, 
  111.      g_xMainWnd.m_rcWindow.top + m_rcWnd.top + m_rcEditBoxFrame.top, 
  112.    m_rcEditBoxFrame.right - m_rcEditBoxFrame.left, 
  113.    m_rcEditBoxFrame.bottom - m_rcEditBoxFrame.top, TRUE);
  114. if ( m_xChatPopBtn.OnLButtonUp(ptMouse) ) return TRUE;
  115. return FALSE;
  116. }
  117. BOOL CChatPopWnd::OnLButtonDown(POINT ptMouse)
  118. {
  119. if ( m_xChatPopBtn.OnLButtonDown(ptMouse) ) return TRUE;
  120. return FALSE;
  121. }
  122. VOID CChatPopWnd::OnMouseMove(POINT ptMouse)
  123. {
  124. m_xChatPopBtn.ChangeRect(m_rcWnd.left+542, m_rcWnd.top+353);
  125. m_xChatPopBtn.OnMouseMove(ptMouse);
  126. }
  127. VOID CChatPopWnd::OnScrollDown()
  128. {
  129. if ( m_nCurrStartChatLine > 0 ) m_nCurrStartChatLine--;
  130. }
  131. VOID CChatPopWnd::OnScrollUp()
  132. {
  133. if ( m_nCurrStartChatLine < m_xstrDividedChat.GetCounter()-_MAX_CHATLINE_POPUP ) m_nCurrStartChatLine++;
  134. }
  135. VOID CChatPopWnd::SetStatusBtnInit()
  136. {
  137. m_xChatPopBtn.SetBtnState(_BTN_STATE_NORMAL);
  138. }