table.cpp
上传用户:swkcbjrc
上传日期:2016-04-02
资源大小:45277k
文件大小:9k
源码类别:

游戏

开发平台:

Visual C++

  1. // table.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "..gamehigh.h"
  5. #include "..includetable.h"
  6. #include "mymemdc.h"
  7. #include "faceList.h"
  8. #include "basefunction.h"
  9. #include "TablePage.h"
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CTable
  17. extern CFaceList* gpFaceList;
  18. extern CGameHighApp theApp;
  19. CTable::CTable()
  20. {
  21. hHandCur =NULL;
  22. lpTable =NULL;
  23. memset(&rcEmpty, 0, sizeof(RECT));
  24. rcEmpty.left =50;
  25. rcEmpty.top =50;
  26. rcEmpty.right =rcEmpty.left + 50;
  27. rcEmpty.bottom =rcEmpty.top  + 50;
  28. memset(rcPosArray, 0, sizeof(RECT) * MAX_TABCONTAIN);
  29. rcPosArray[0].left =15;
  30. rcPosArray[0].top =55;
  31. rcPosArray[0].right =rcPosArray[0].left + 32;
  32. rcPosArray[0].bottom =rcPosArray[0].top + 32;
  33. rcPosArray[1].left =58;
  34. rcPosArray[1].top =15;
  35. rcPosArray[1].right =rcPosArray[1].left + 32;
  36. rcPosArray[1].bottom =rcPosArray[1].top + 32;
  37. rcPosArray[2].left =105;
  38. rcPosArray[2].top =55;
  39. rcPosArray[2].right =rcPosArray[2].left + 32;
  40. rcPosArray[2].bottom =rcPosArray[2].top + 32;
  41. rcPosArray[3].left =58;
  42. rcPosArray[3].top =100;
  43. rcPosArray[3].right =rcPosArray[3].left + 32;
  44. rcPosArray[3].bottom =rcPosArray[3].top  + 32;
  45. memset(rcTextArray, 0, sizeof(RECT) * MAX_TABCONTAIN);
  46. rcTextArray[0].left =5;
  47. rcTextArray[0].top =5;
  48. rcTextArray[0].right =rcTextArray[0].left + 32;
  49. rcTextArray[0].bottom =rcTextArray[0].top  + 32;
  50. rcTextArray[1].left =110;
  51. rcTextArray[1].top =5;
  52. rcTextArray[1].right =rcTextArray[1].left + 32;
  53. rcTextArray[1].bottom =rcTextArray[1].top  + 32;
  54. rcTextArray[2].left =110;
  55. rcTextArray[2].top =105;
  56. rcTextArray[2].right =rcTextArray[2].left + 32;
  57. rcTextArray[2].bottom =rcTextArray[2].top  + 32;
  58. rcTextArray[3].left =5;
  59. rcTextArray[3].top =105;
  60. rcTextArray[3].right =rcTextArray[3].left + 32;
  61. rcTextArray[3].bottom =rcTextArray[3].top  + 32;
  62. uBkIndex =0;
  63. pTargetWnd =NULL;
  64. if(NULL == hHandCur)
  65. {
  66. hHandCur =::LoadCursor(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_MYHAND));
  67. }
  68. }
  69. CTable::~CTable()
  70. {
  71. SAFE_CHECKPOINTER(hHandCur)
  72. {
  73. ::DestroyCursor(hHandCur);
  74. hHandCur =NULL;
  75. }
  76. }
  77. BEGIN_MESSAGE_MAP(CTable, CWnd)
  78. //{{AFX_MSG_MAP(CTable)
  79. ON_WM_PAINT()
  80. ON_WM_SETCURSOR()
  81. ON_WM_MOUSEMOVE()
  82. ON_WM_CREATE()
  83. ON_WM_LBUTTONUP()
  84. ON_WM_LBUTTONDOWN()
  85. ON_WM_ERASEBKGND()
  86. //}}AFX_MSG_MAP
  87. END_MESSAGE_MAP()
  88. /////////////////////////////////////////////////////////////////////////////
  89. // CTable message handlers
  90. BOOL CTable::Create(const POINT& ptStart, CWnd* pParentWnd) 
  91. {
  92. RECT rect;
  93. memset(&rect, 0, sizeof(rect));
  94. ::memcpy(&rect, &ptStart, sizeof(POINT));
  95. rect.right =rect.left + TABLE_WIDTH;
  96. rect.bottom =rect.top + TABLE_HEIGHT;
  97. DWORD dwStyle =WS_CHILD | WS_VISIBLE;
  98. return CWnd::Create(NULL, NULL, dwStyle, rect, pParentWnd, 0, NULL);
  99. }
  100. void CTable::OnPaint() 
  101. {
  102. CPaintDC dc(this); // device context for painting
  103. }
  104. void CTable::SetTable(LPGAMEHIGH_TABLE lpTab)
  105. {
  106. ASSERT(lpTab);
  107. SAFE_CHECKPOINTER(lpTab)
  108. {
  109. lpTable =lpTab;
  110. }
  111. }
  112. LPGAMEHIGH_TABLE CTable::GetTable()
  113. {
  114. return lpTable;
  115. }
  116. BOOL CTable::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
  117. {
  118. // TODO: Add your message handler code here and/or call default
  119. return CWnd::OnSetCursor(pWnd, nHitTest, message);
  120. }
  121. void CTable::OnMouseMove(UINT nFlags, CPoint point) 
  122. {
  123. if(MK_LBUTTON == nFlags)
  124. {
  125. ::SetCursor(::LoadCursor(NULL, IDC_ARROW));
  126. return ;
  127. }
  128. POINT ptMouse;
  129. memset(&ptMouse, 0, sizeof(ptMouse));
  130. ::GetCursorPos(&ptMouse);
  131. if(this->GetSafeHwnd() == ::WindowFromPoint(ptMouse))
  132. {
  133. RECT rect;
  134. memset(&rect, 0, sizeof(rect));
  135. this->GetWindowRect(&rect);
  136. if(::PtInRect(&rect, ptMouse) && !::PtInRect(&rcEmpty, point))
  137. {
  138. ::SetCursor(hHandCur);
  139. }
  140. else
  141. {
  142. ::SetCursor(::LoadCursor(NULL, IDC_ARROW));
  143. }
  144. }
  145. CWnd::OnMouseMove(nFlags, point);
  146. }
  147. int CTable::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  148. {
  149. if (CWnd::OnCreate(lpCreateStruct) == -1)
  150. return -1;
  151. return 0;
  152. }
  153. void CTable::DrawTable(CDC *pDC)
  154. {
  155. ASSERT(pDC);
  156. if(NULL == pDC)
  157. {
  158. return ;
  159. }
  160. if(NULL == lpTable)
  161. {
  162. return ;
  163. }
  164. if(NULL == gpFaceList)
  165. {
  166. return ;
  167. }
  168. //首先绘画背景颜色
  169. COLORREF clrBk =RGB(18, 153, 145);
  170. CBrush m_Brush;
  171. m_Brush.CreateSolidBrush(clrBk);
  172. RECT rect;
  173. memset(&rect, 0, sizeof(RECT));
  174. this->GetClientRect(&rect);
  175. SAFE_CHECKWND(pTargetWnd)
  176. {
  177. this   ->ClientToScreen(&rect);
  178. pTargetWnd->ScreenToClient(&rect);
  179. }
  180. pDC->FillRect(&rect, &m_Brush);
  181. m_Brush.DeleteObject();
  182. m_Brush.CreateSolidBrush(RGB(0, 128, 128));
  183. for(int i=0; i<MAX_TABCONTAIN; i++)
  184. {
  185. RECT rcTemp;
  186. memset(&rcTemp, 0, sizeof(RECT));
  187. ::CopyRect(&rcTemp, &(rcPosArray[i]));
  188. SAFE_CHECKWND(pTargetWnd)
  189. {
  190. this   ->ClientToScreen(&rcTemp);
  191. pTargetWnd->ScreenToClient(&rcTemp);
  192. }
  193. pDC->FillRect(&rcTemp, &m_Brush);
  194. }
  195. m_Brush.DeleteObject();
  196. CImageList* pBkImgList =gpFaceList->GetBkImgList();
  197. if(NULL != pBkImgList 
  198. && pBkImgList->GetSafeHandle() 
  199. && 0 < pBkImgList->GetImageCount())
  200. {
  201. RECT rcTemp;
  202. memset(&rcTemp, 0, sizeof(RECT));
  203. ::CopyRect(&rcTemp, &(rcEmpty));
  204. SAFE_CHECKWND(pTargetWnd)
  205. {
  206. this   ->ClientToScreen(&rcTemp);
  207. pTargetWnd->ScreenToClient(&rcTemp);
  208. }
  209. HICON hIcon =pBkImgList->ExtractIcon(uBkIndex);
  210. SAFE_CHECKPOINTER(hIcon)
  211. {
  212. ::DrawIconEx(pDC->GetSafeHdc(), rcTemp.left, rcTemp.top, hIcon, 
  213. BKICON_SIZE, BKICON_SIZE, 0, NULL, DI_NORMAL); 
  214. ::DestroyIcon(hIcon);
  215. hIcon =NULL;
  216. }
  217. }
  218. //绘画桌子上的人
  219. CImageList* pImgList1 =gpFaceList->GetImageList1();
  220. if(NULL == pImgList1 ||
  221. NULL == pImgList1->GetSafeHandle() ||
  222. 0    >= pImgList1->GetImageCount())
  223. return ;
  224. HICON hIcon =pImgList1->ExtractIcon(0);
  225. SAFE_CHECKPOINTER(hIcon)
  226. {
  227. for(i=0; i<MAX_TABCONTAIN; i++)
  228. {
  229. if(0 != strlen(lpTable->userStatus[i].userID))
  230. {
  231. RECT rcTemp;
  232. memset(&rcTemp, 0, sizeof(RECT));
  233. ::CopyRect(&rcTemp, &(rcPosArray[i]));
  234. SAFE_CHECKWND(pTargetWnd)
  235. {
  236. this   ->ClientToScreen(&rcTemp);
  237. pTargetWnd->ScreenToClient(&rcTemp);
  238. }
  239. ::DrawIconEx(pDC->GetSafeHdc(), rcTemp.left, rcTemp.top, hIcon, 
  240. LARGEICON_SIZE, LARGEICON_SIZE, 0, NULL, DI_NORMAL); 
  241. }
  242. }
  243. ::DestroyIcon(hIcon);
  244. hIcon =NULL;
  245. }
  246. LOGFONT lf;
  247. memset(&lf, 0, sizeof(LOGFONT));
  248. if(IsWin9x())
  249. {
  250. lf.lfHeight =15;
  251. }
  252. else
  253. {
  254. lf.lfHeight =14;
  255. }
  256. CFont m_Font;
  257. m_Font.CreateFontIndirect(&lf);
  258. CFont* pOldFont =pDC->SelectObject(&m_Font);
  259. pDC->SetBkMode(TRANSPARENT);
  260. char buffer[256];
  261. memset(buffer, 0, sizeof(char) * 256);
  262. for(i=0; i<MAX_TABCONTAIN; i++)
  263. {
  264. RECT rcTemp;
  265. memset(&rcTemp, 0, sizeof(RECT));
  266. ::CopyRect(&rcTemp, &(rcTextArray[i]));
  267. SAFE_CHECKWND(pTargetWnd)
  268. {
  269. this   ->ClientToScreen(&rcTemp);
  270. pTargetWnd->ScreenToClient(&rcTemp);
  271. }
  272. memset(buffer, 0, sizeof(char) * 256);
  273. if(0 != strlen(lpTable->userStatus[i].userName))
  274. {
  275. wsprintf(buffer, "%s", lpTable->userStatus[i].userName);
  276. }
  277. else 
  278. if(0 != strlen(lpTable->userStatus[i].userID))
  279. {
  280. wsprintf(buffer, "%s", lpTable->userStatus[i].userID);
  281. }
  282. pDC->DrawText(buffer, &(rcTemp), DT_WORDBREAK);
  283. }
  284. memset(&rect, 0, sizeof(RECT));
  285. this->GetClientRect(&rect);
  286. rect.top =rect.bottom - 16;
  287. SAFE_CHECKWND(pTargetWnd)
  288. {
  289. this ->ClientToScreen(&rect);
  290. pTargetWnd ->ScreenToClient(&rect);
  291. }
  292. memset(buffer, 0, sizeof(char) * 256);
  293. wsprintf(buffer, "- %d -", lpTable->tableID + 1);
  294. pDC->DrawText(buffer, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
  295. pDC->SelectObject(pOldFont);
  296. m_Font.DeleteObject();
  297. }
  298. void CTable::OnLButtonUp(UINT nFlags, CPoint point) 
  299. {
  300. CWnd::OnLButtonUp(nFlags, point);
  301. }
  302. void CTable::OnLButtonDown(UINT nFlags, CPoint point) 
  303. {
  304. POINT ptMouse;
  305. memset(&ptMouse, 0, sizeof(ptMouse));
  306. ::GetCursorPos(&ptMouse);
  307. if(this->GetSafeHwnd() != ::WindowFromPoint(ptMouse))
  308. {
  309. return ;
  310. }
  311. CMainData* pMainData =theApp.GetMainData();
  312. ASSERT(pMainData);
  313. if(NULL == pMainData)
  314. {
  315. return ;
  316. }
  317. LPGAMEHIGH_TABLE lpOldTab =NULL;
  318. lpOldTab =pMainData->Attrib_GetMyTable();
  319. for(int i=0; i< MAX_TABCONTAIN; i++)
  320. {
  321. RECT rect;
  322. memset(&rect, 0, sizeof(RECT));
  323. ::CopyRect(&rect, &(rcPosArray[i]));
  324. if(::PtInRect(&rect, point))
  325. {
  326. if(NULL != lpTable &&
  327. 0 == strlen(lpTable->userStatus[i].userID))
  328. { //用户坐到这张桌子上
  329. CWnd* pWnd =this->GetParent();
  330. SAFE_CHECKWND(pWnd)
  331. {
  332. pWnd->PostMessage(WM_TABLE_SITDOWN, (WPARAM)this, i);
  333. }
  334. break;
  335. } // end if(NULL != lpTable
  336. }//end if ptinrect
  337. }//end for
  338. CWnd::OnLButtonDown(nFlags, point);
  339. }
  340. LRESULT CTable::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  341. {
  342. return CWnd::WindowProc(message, wParam, lParam);
  343. }
  344. BOOL CTable::OnEraseBkgnd(CDC* pDC) 
  345. {
  346. return TRUE;
  347. }
  348. void CTable::SetDrawTargetWnd(CWnd *pWnd)
  349. {
  350. SAFE_CHECKWND(pWnd)
  351. {
  352. pTargetWnd =pWnd;
  353. }
  354. }
  355. LPRECT CTable::GetTextArray(int nIndex)
  356. {
  357. if(nIndex > 0 &&
  358. nIndex < MAX_TABCONTAIN)
  359. {
  360. return &rcTextArray[nIndex];
  361. }
  362. return NULL;
  363. }