TableView.cpp
上传用户:bsw_2008
上传日期:2013-07-09
资源大小:2446k
文件大小:7k
源码类别:

棋牌游戏

开发平台:

Visual C++

  1. // TableView.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "CGameHallFrame.h"
  5. #include "TableView.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CTableView
  13. IMPLEMENT_DYNCREATE(CTableView, CScrollView)
  14. CTableView::CTableView()
  15. {
  16. EnableAutomation();
  17. }
  18. CTableView::~CTableView()
  19. {
  20. }
  21. void CTableView::OnFinalRelease()
  22. {
  23. // When the last reference for an automation object is released
  24. // OnFinalRelease is called.  The base class will automatically
  25. // deletes the object.  Add additional cleanup required for your
  26. // object before calling the base class.
  27. CScrollView::OnFinalRelease();
  28. }
  29. BEGIN_MESSAGE_MAP(CTableView, CScrollView)
  30. //{{AFX_MSG_MAP(CTableView)
  31. ON_WM_ERASEBKGND()
  32. ON_WM_LBUTTONDOWN()
  33. ON_WM_MOUSEMOVE()
  34. //}}AFX_MSG_MAP
  35. END_MESSAGE_MAP()
  36. BEGIN_DISPATCH_MAP(CTableView, CScrollView)
  37. //{{AFX_DISPATCH_MAP(CTableView)
  38. // NOTE - the ClassWizard will add and remove mapping macros here.
  39. //}}AFX_DISPATCH_MAP
  40. END_DISPATCH_MAP()
  41. // Note: we add support for IID_ITableView to support typesafe binding
  42. //  from VBA.  This IID must match the GUID that is attached to the 
  43. //  dispinterface in the .ODL file.
  44. // {D85B9A88-4D08-412F-B93A-0E4B55624DF3}
  45. static const IID IID_ITableView =
  46. { 0xd85b9a88, 0x4d08, 0x412f, { 0xb9, 0x3a, 0xe, 0x4b, 0x55, 0x62, 0x4d, 0xf3 } };
  47. BEGIN_INTERFACE_MAP(CTableView, CScrollView)
  48. INTERFACE_PART(CTableView, IID_ITableView, Dispatch)
  49. END_INTERFACE_MAP()
  50. /////////////////////////////////////////////////////////////////////////////
  51. // CTableView drawing
  52. void CTableView::OnInitialUpdate()
  53. {
  54. CScrollView::OnInitialUpdate();
  55. CSize sizeTotal;
  56. // TODO: calculate the total size of this view
  57. sizeTotal.cx =100;
  58. sizeTotal.cy = 100;
  59. SetScrollSizes(MM_TEXT, sizeTotal);
  60. }
  61. void CTableView::OnDraw(CDC* pDC)
  62. {
  63. CDocument* pDoc = GetDocument();
  64. DrawTable();
  65. //flag=1;
  66. // TODO: add draw code here
  67. }
  68. /////////////////////////////////////////////////////////////////////////////
  69. // CTableView diagnostics
  70. #ifdef _DEBUG
  71. void CTableView::AssertValid() const
  72. {
  73. CScrollView::AssertValid();
  74. }
  75. void CTableView::Dump(CDumpContext& dc) const
  76. {
  77. CScrollView::Dump(dc);
  78. }
  79. #endif //_DEBUG
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CTableView message handlers
  82. void CTableView::DrawTable()
  83. {
  84. CDC *pDC=GetDC();
  85. CDC MemDC;
  86. MemDC.CreateCompatibleDC(pDC);
  87. CRect rect; 
  88. this->GetClientRect(rect); 
  89. CBitmap bmpFace; 
  90. bmpFace.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
  91. CBitmap* pOldBmp = NULL; 
  92. pOldBmp = MemDC.SelectObject(&bmpFace);
  93. CBitmap bitmap,face;int x,y;
  94. BITMAP BMap;
  95.     bitmap.LoadBitmap(IDB_TABLE);
  96. face.LoadBitmap(IDB_FACE);
  97. bitmap.GetBitmap(&BMap);
  98. x=BMap.bmWidth;
  99. y=BMap.bmHeight;
  100. CDC dcMem;
  101. dcMem.CreateCompatibleDC(&MemDC);        //创建与pDC兼容的设备上下文
  102. dcMem.SelectObject(&bitmap);          //将位图对象选入设备上下文
  103. //从源设备上下文复制位图到目标设备上下文
  104. CBrush brush(RGB(255,255,255)); 
  105.     MemDC.FillRect(rect,&brush);
  106. if(flag==1)
  107. {
  108. MemDC.SetStretchBltMode(HALFTONE);  //设置图缩放模式
  109. MemDC.BitBlt(0,0,x,y,&dcMem,0,0,SRCCOPY);
  110. dcMem.SelectObject(&face);
  111. face.GetBitmap(&BMap);
  112. x=BMap.bmWidth;
  113. y=BMap.bmHeight;
  114. for(int i=0;i<4;i++)
  115. for(int j=0;j<4;j++)
  116. {
  117. if(table[j][i].north==1)
  118. {
  119. MemDC.BitBlt(63+i*156,10+j*150,x,y,&dcMem,0,0,SRCCOPY);
  120. }
  121. if(table[j][i].south==1)
  122. {
  123. MemDC.BitBlt(63+i*156,100+j*150,x,y,&dcMem,0,0,SRCCOPY);
  124. }
  125. //MemDC.BitBlt(63+i*156,100+j*150,x,y,&dcMem,0,0,SRCCOPY);
  126. if(table[j][i].west==1)
  127. {
  128. MemDC.BitBlt(15+i*156,56+j*150,x,y,&dcMem,0,0,SRCCOPY);
  129. }
  130. //MemDC.BitBlt(15+i*156,56+j*150,x,y,&dcMem,0,0,SRCCOPY);
  131. if(table[j][i].east==1)
  132. {
  133. MemDC.BitBlt(110+i*156,56+j*150,x,y,&dcMem,0,0,SRCCOPY);
  134. }
  135. //MemDC.BitBlt(110+i*156,56+j*150,x,y,&dcMem,0,0,SRCCOPY);
  136. }
  137. }
  138. pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,rect.left,rect.top,SRCCOPY);
  139. MemDC.SelectObject(pOldBmp); 
  140. bmpFace.DeleteObject();
  141. bitmap.DeleteObject();
  142. brush.DeleteObject();
  143. MemDC.DeleteDC();
  144. pDC->DeleteDC();
  145. }
  146. BOOL CTableView::OnEraseBkgnd(CDC* pDC) 
  147. {
  148. // TODO: Add your message handler code here and/or call default
  149. return FALSE;
  150. }
  151. BOOL CTableView::PreCreateWindow(CREATESTRUCT& cs) 
  152. {
  153. // TODO: Add your specialized code here and/or call the base class
  154. m_hWait=AfxGetApp()->LoadCursor(IDC_HWAIT);
  155. return CScrollView::PreCreateWindow(cs);
  156. }
  157. void CTableView::OnLButtonDown(UINT nFlags, CPoint point) 
  158. {
  159. // TODO: Add your message handler code here and/or call default
  160. BOOL f=FALSE;
  161. if(flag==1)
  162. {
  163. int x,y,i,j,direct=-1;
  164. x=point.x%156;y=point.y%150;j=point.x/156;i=point.y/150;
  165. if(x>63&&x<95&&y>10&&y<42)
  166. direct=3;
  167. if(x>63&&x<95&&y>100&&y<132)
  168. direct=1;
  169. if(x>15&&x<50&&y>56&&y<88)
  170. direct=2;
  171. if(x>110&&x<142&&y>56&&y<88)
  172. direct=0;
  173. if(direct>=0)
  174. {
  175. switch(direct)
  176. {
  177. case 0:if(table[i][j].east!=1)
  178.    {
  179.    table[i][j].east=1;
  180.    DrawTable();f=TRUE;
  181.    }
  182. break;
  183. case 1:if(table[i][j].south!=1)
  184.    {
  185.    table[i][j].south=1;
  186.    DrawTable();f=TRUE;
  187.    }
  188. break;
  189. case 2:if(table[i][j].west!=1)
  190.    {
  191.    table[i][j].west=1;
  192.    DrawTable();f=TRUE;
  193.    }
  194. break;
  195. case 3:if(table[i][j].north!=1)
  196.    {
  197.    table[i][j].north=1;
  198.    DrawTable();f=TRUE;
  199.    }
  200. break;
  201. default:break;
  202. }
  203. if(f)
  204. {
  205. CString a,t;
  206. a=char(20);a+='B';
  207. t.Format("%d ",i*4+j);
  208. a+=t;
  209. t.Format("%d",direct);
  210. a+=t;a+=char(20);
  211. pClient->SendString(a);
  212. dlg=new CGameDlg();
  213. dlg->desk=i*4+j;
  214. dlg->direct=direct;
  215. dlg->pClient=pClient;
  216. dlg->DoModal();
  217. delete(dlg);
  218. switch(direct)
  219. {
  220. case 0:table[i][j].east=0;
  221. DrawTable();
  222. break;
  223. case 1:
  224. table[i][j].south=0;
  225. DrawTable();
  226. break;
  227. case 2:
  228. table[i][j].west=0;
  229. DrawTable();
  230. break;
  231. case 3:
  232. table[i][j].north=0;
  233. DrawTable();
  234. break;
  235. default:break;
  236. }
  237. a.Empty();
  238. a=char(20);a+='P';
  239. t.Format("%d ",i*4+j);
  240. a+=t;
  241. t.Format("%d",direct);
  242. a+=t;a+=char(20);
  243. pClient->SendString(a);
  244. }
  245. }
  246. }
  247. CScrollView::OnLButtonDown(nFlags, point);
  248. }
  249. void CTableView::OnMouseMove(UINT nFlags, CPoint point) 
  250. {
  251. // TODO: Add your message handler code here and/or call default
  252. if(flag==1)
  253. {
  254. SetCapture();              //捕捉鼠标
  255. int x,y,i,j,direct=-1;
  256. x=point.x%156;y=point.y%150;j=point.x/156;i=point.y/150;
  257. if(x>63&&x<95&&y>10&&y<42)
  258. direct=3;
  259. if(x>63&&x<95&&y>100&&y<132)
  260. direct=1;
  261. if(x>15&&x<50&&y>56&&y<88)
  262. direct=2;
  263. if(x>110&&x<142&&y>56&&y<88)
  264. direct=0;
  265. if(direct>=0)
  266. {
  267. ::SetCursor(m_hWait);     //设置光标
  268. }
  269. else
  270. {
  271. ReleaseCapture();  //释放鼠标,还原鼠标形状
  272. }
  273. }
  274. CScrollView::OnMouseMove(nFlags, point);
  275. }