MainFrm.cpp
上传用户:kkzhu_0
上传日期:2007-01-05
资源大小:214k
文件大小:12k
源码类别:

棋牌游戏

开发平台:

Visual C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "game.h"
  5. #include "Five.h"
  6. #include "MainFrm.h"
  7. #include "SetDlg.h"
  8. #include "exitdlg.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CMainFrame
  16. static UINT BASED_CODE indicators[] =
  17. {
  18. ID_SEPARATOR,           // status line indicator
  19. // ID_INDICATOR_CAPS,
  20. // ID_INDICATOR_NUM,
  21. // ID_INDICATOR_SCRL,
  22. };
  23. static UINT BASED_CODE playId[] =
  24. {       
  25.     ID_BUTTON_HUI,
  26. ID_BUTTON_DIN,
  27. ID_BUTTON_QIAN,
  28. ID_BUTTON_XIA,
  29.     ID_SEPARATOR,           // status line indicator
  30. IDC_STEPBOX,
  31. };
  32. static UINT BASED_CODE mainId[] =
  33. {
  34. ID_FILE_NEW,
  35.     ID_FILE_OPEN,
  36. ID_FILE_SAVE,
  37. ID_SEPARATOR,           // status line indicator
  38. ID_APP_ABOUT,
  39. };
  40. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  41. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  42. //{{AFX_MSG_MAP(CMainFrame)
  43. ON_WM_CREATE()
  44. ON_WM_CLOSE()
  45. ON_COMMAND(ID_PARAM_SET, OnParamSet)
  46. ON_COMMAND(ID_VIEW_TOOLBAR1, OnViewToolbar1)
  47. ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR1, OnUpdateViewToolbar1)
  48. ON_COMMAND(ID_BUTTON_HUI, OnButtonHui)
  49. ON_COMMAND(ID_VIEW_TOOLBAR, OnViewToolbar)
  50. ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateViewToolbar)
  51. ON_COMMAND(ID_BUTTON_DIN, OnButtonDin)
  52. ON_COMMAND(ID_BUTTON_QIAN, OnButtonQian)
  53. ON_COMMAND(ID_BUTTON_XIA, OnButtonXia)
  54. //}}AFX_MSG_MAP
  55. END_MESSAGE_MAP()
  56. static TCHAR BASED_CODE szSection[] = _T("Settings");
  57. static TCHAR BASED_CODE szWindowPos[] = _T("WindowPos");
  58. static TCHAR BASED_CODE szDump[] = _T("Dump");
  59. static TCHAR BASED_CODE szSreach[] = _T("Sreach");
  60. static TCHAR szFormat[] = _T("%u,%u,%d,%d,%d,%d,%d,%d,%d,%d");
  61. static TCHAR szDumpFormat[] = _T("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d");
  62. static TCHAR szSreachFormat[] = _T("%d,%d,%d,%d");
  63. static void ReadGameParam( CFive& f )
  64. {
  65. int WF0_1,WF0_2,WF0_3,WF0_4;
  66. int WF1_1,WF1_2,WF1_3,WF1_4;
  67. int WF2_3,WF2_4,WF5;
  68. int Deep,Breadth,Thread,Delta;
  69. CString strBuffer;
  70. TCHAR Def[250];
  71. wsprintf( Def,szDumpFormat,2,50,500,5000,1,20,150,600,400,450,30000 );
  72. strBuffer = AfxGetApp()->GetProfileString(szSection, szDump,Def );
  73. _stscanf( strBuffer,szDumpFormat,&WF0_1,&WF0_2,&WF0_3,&WF0_4,
  74. &WF1_1,&WF1_2,&WF1_3,&WF1_4,&WF2_3,&WF2_4,&WF5 );
  75. f.SetDump(1,0,WF0_1);
  76. f.SetDump(2,0,WF0_2);
  77. f.SetDump(3,0,WF0_3);
  78. f.SetDump(4,0,WF0_4);
  79. f.SetDump(1,1,WF1_1);
  80. f.SetDump(2,1,WF1_2);
  81. f.SetDump(3,1,WF1_3);
  82. f.SetDump(4,1,WF1_4);
  83. f.SetDump(3,2,WF2_3);
  84. f.SetDump(4,2,WF2_4);
  85. f.SetDump(5,5,WF5);
  86. wsprintf( Def,szSreachFormat,10,4,0,2 );
  87. strBuffer = AfxGetApp()->GetProfileString(szSection,szSreach,Def );
  88. _stscanf( strBuffer,szSreachFormat,&Breadth,&Deep,&Thread,&Delta );
  89. f.SetParam( Breadth,Deep,Thread,Delta );
  90. }
  91. static void WriteGameParam( CFive& f )
  92. {
  93. int WF0_1,WF0_2,WF0_3,WF0_4;
  94. int WF1_1,WF1_2,WF1_3,WF1_4;
  95. int WF2_3,WF2_4,WF5;
  96. int Deep,Breadth,Thread,Delta;
  97. TCHAR Buf[250];
  98. WF0_1 = f.GetDump(1,0);
  99. WF0_2 = f.GetDump(2,0);
  100. WF0_3 = f.GetDump(3,0);
  101. WF0_4 = f.GetDump(4,0);
  102. WF1_1 = f.GetDump(1,1);
  103. WF1_2 = f.GetDump(2,1);
  104. WF1_3 = f.GetDump(3,1);
  105. WF1_4 = f.GetDump(4,1);
  106. WF2_3 = f.GetDump(3,2);
  107. WF2_4 = f.GetDump(4,2);
  108. WF5   = f.GetDump(5,5);
  109. wsprintf( Buf,szDumpFormat,WF0_1,WF0_2,WF0_3,WF0_4,
  110. WF1_1,WF1_2,WF1_3,WF1_4,WF2_3,WF2_4,WF5 );
  111. AfxGetApp()->WriteProfileString( szSection,szDump,Buf );
  112. f.GetParam( Breadth,Deep,Thread,Delta );
  113. wsprintf( Buf,szSreachFormat,Breadth,Deep,Thread,Delta );
  114. AfxGetApp()->WriteProfileString( szSection,szSreach,Buf );
  115. }
  116. static BOOL PASCAL NEAR ReadWindowPlacement(LPWINDOWPLACEMENT pwp)
  117. {
  118. CString strBuffer = AfxGetApp()->GetProfileString(szSection, szWindowPos);
  119. if (strBuffer.IsEmpty())
  120. return FALSE;
  121. WINDOWPLACEMENT wp;
  122. int nRead = _stscanf(strBuffer, szFormat,
  123. &wp.flags, &wp.showCmd,
  124. &wp.ptMinPosition.x, &wp.ptMinPosition.y,
  125. &wp.ptMaxPosition.x, &wp.ptMaxPosition.y,
  126. &wp.rcNormalPosition.left, &wp.rcNormalPosition.top,
  127. &wp.rcNormalPosition.right, &wp.rcNormalPosition.bottom);
  128. if (nRead != 10)
  129. return FALSE;
  130. wp.length = sizeof wp;
  131. *pwp = wp;
  132. return TRUE;
  133. }
  134. static void PASCAL NEAR WriteWindowPlacement(LPWINDOWPLACEMENT pwp)
  135. // write a window placement to settings section of app's ini file
  136. {
  137. TCHAR szBuffer[sizeof("-32767")*8 + sizeof("65535")*2];
  138. wsprintf(szBuffer, szFormat,
  139. pwp->flags, pwp->showCmd,
  140. pwp->ptMinPosition.x, pwp->ptMinPosition.y,
  141. pwp->ptMaxPosition.x, pwp->ptMaxPosition.y,
  142. pwp->rcNormalPosition.left, pwp->rcNormalPosition.top,
  143. pwp->rcNormalPosition.right, pwp->rcNormalPosition.bottom);
  144. AfxGetApp()->WriteProfileString(szSection, szWindowPos, szBuffer);
  145. }
  146. /////////////////////////////////////////////////////////////////////////////
  147. // CMainFrame construction/destruction
  148. CMainFrame::CMainFrame()
  149. {
  150. // TODO: add member initialization code here
  151. }
  152. CMainFrame::~CMainFrame()
  153. {
  154. }
  155. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  156. {
  157. // TODO: Modify the Window class or styles here by modifying
  158. //  the CREATESTRUCT cs
  159. cs.style &= ~FWS_ADDTOTITLE;
  160. return CFrameWnd::PreCreateWindow(cs);
  161. }
  162. /////////////////////////////////////////////////////////////////////////////
  163. // CMainFrame diagnostics
  164. #ifdef _DEBUG
  165. void CMainFrame::AssertValid() const
  166. {
  167. CFrameWnd::AssertValid();
  168. }
  169. void CMainFrame::Dump(CDumpContext& dc) const
  170. {
  171. CFrameWnd::Dump(dc);
  172. }
  173. #endif //_DEBUG
  174. /////////////////////////////////////////////////////////////////////////////
  175. // CMainFrame message handlers
  176.  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  177. {
  178. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  179. return -1;
  180. ReadGameParam( m_Five );
  181. WINDOWPLACEMENT wp;
  182. if (ReadWindowPlacement(&wp))
  183. SetWindowPlacement(&wp);
  184. if (!m_wndToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_SIZE_DYNAMIC |
  185. CBRS_TOP |CBRS_TOOLTIPS | CBRS_FLYBY, IDR_TOOLBAR_MAIN ) ||
  186. !m_wndToolBar.LoadBitmap( IDB_BITMAP_MAIN ) ||
  187. !m_wndToolBar.SetButtons( mainId, sizeof(mainId)/sizeof(UINT)))
  188. {
  189. TRACE0("Failed to create resourcebarn");
  190. return -1;      // fail to create
  191. }
  192. if (!m_wndPlayBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_SIZE_FIXED |
  193. CBRS_TOP |CBRS_TOOLTIPS | CBRS_FLYBY, IDR_TOOLBAR_PLAY ) ||
  194. !m_wndPlayBar.LoadBitmap( IDB_BITMAP_PLAY ) ||
  195. !m_wndPlayBar.SetButtons( playId, sizeof(playId)/sizeof(UINT)))
  196. {
  197. TRACE0("Failed to create resourcebarn");
  198. return -1;      // fail to create
  199. }
  200. CRect rect(-100, -100, 0, 0);
  201. if (!m_wndStepBox.Create(WS_CHILD |CBS_DROPDOWNLIST|
  202. CBS_AUTOHSCROLL | WS_VSCROLL | CBS_HASSTRINGS, rect, &m_wndPlayBar,
  203. IDC_STEPBOX))
  204. {
  205. return -1;
  206. }
  207. m_wndPlayBar.SetButtonInfo(5, IDC_STEPBOX, TBBS_SEPARATOR, 100);
  208. if (m_wndStepBox.m_hWnd != NULL)
  209. {
  210. CRect rect;
  211. m_wndPlayBar.GetItemRect(5, rect);
  212. m_wndStepBox.SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCOPYBITS);
  213. m_wndStepBox.ShowWindow(SW_SHOW);
  214. }
  215. else
  216. return -1;
  217. if (!m_wndStatusBar.Create(this) ||
  218. !m_wndStatusBar.SetIndicators(indicators,
  219.   sizeof(indicators)/sizeof(UINT)))
  220. {
  221. TRACE0("Failed to create status barn");
  222. return -1;      // fail to create
  223. }
  224. m_wndToolBar.SetWindowText(_T("通用工具"));
  225. m_wndToolBar.EnableDocking( CBRS_ALIGN_ANY );
  226. m_wndPlayBar.SetWindowText(_T("特殊工具"));
  227. m_wndPlayBar.EnableDocking( CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM );
  228. EnableDocking( CBRS_ALIGN_ANY );
  229. DockControlBar( &m_wndToolBar,AFX_IDW_DOCKBAR_TOP);
  230. DockControlBarLeftOf(&m_wndPlayBar,&m_wndToolBar);
  231. LoadBarState(_T("General"));
  232. // TODO: Add your specialized creation code here
  233. return 0;
  234. }
  235.  void CMainFrame::DockControlBarLeftOf(CToolBar* Bar,CToolBar* LeftOf)
  236. {
  237. CRect rect;
  238. DWORD dw;
  239. UINT n;
  240. // get MFC to adjust the dimensions of all docked ToolBars
  241. // so that GetWindowRect will be accurate
  242. RecalcLayout();
  243. LeftOf->GetWindowRect(&rect);
  244. rect.OffsetRect(1,0);
  245. dw=LeftOf->GetBarStyle();
  246. n = 0;
  247. n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
  248. n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
  249. n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
  250. n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;
  251. // When we take the default parameters on rect, DockControlBar will dock
  252. // each Toolbar on a seperate line.  By calculating a rectangle, we in effect
  253. // are simulating a Toolbar being dragged to that location and docked.
  254. DockControlBar(Bar,n,&rect);
  255. }
  256. LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  257. {
  258. // TODO: Add your specialized code here and/or call the base class
  259. if( message == WM_CLOSE )
  260. {
  261. CExitDlg dlg;
  262. if( dlg.DoModal() != IDOK )
  263. return FALSE;
  264. }
  265. return CFrameWnd::WindowProc(message, wParam, lParam);
  266. }
  267. void CMainFrame::OnClose() 
  268. {
  269. // TODO: Add your message handler code here and/or call default
  270. SaveBarState(_T("General"));
  271. WINDOWPLACEMENT wp;
  272. wp.length = sizeof wp;
  273. // WriteGameParam( m_Five );
  274. if (GetWindowPlacement(&wp))
  275. {
  276. wp.flags = 0;
  277. if (IsZoomed())
  278. wp.flags |= WPF_RESTORETOMAXIMIZED;
  279. // and write it to the .INI file
  280. WriteWindowPlacement(&wp);
  281. }
  282. CFrameWnd::OnClose();
  283. }
  284. void CMainFrame::OnParamSet() 
  285. {
  286. // TODO: Add your command handler code here
  287. CSetDlg d;
  288. d.WF0_1 = m_Five.GetDump(1,0);
  289. d.WF0_2 = m_Five.GetDump(2,0);
  290. d.WF0_3 = m_Five.GetDump(3,0);
  291. d.WF0_4 = m_Five.GetDump(4,0);
  292. d.WF1_1 = m_Five.GetDump(1,1);
  293. d.WF1_2 = m_Five.GetDump(2,1);
  294. d.WF1_3 = m_Five.GetDump(3,1);
  295. d.WF1_4 = m_Five.GetDump(4,1);
  296. d.WF2_3 = m_Five.GetDump(3,2);
  297. d.WF2_4 = m_Five.GetDump(4,2);
  298. d.WF5   = m_Five.GetDump(5,5);
  299. m_Five.GetParam( d.Breadth,d.Deep,d.Thread,d.Delta );
  300. if( d.DoModal() == IDOK )
  301. {
  302.     m_Five.SetDump(1,0,d.WF0_1);
  303.     m_Five.SetDump(2,0,d.WF0_2);
  304.     m_Five.SetDump(3,0,d.WF0_3);
  305.     m_Five.SetDump(4,0,d.WF0_4);
  306.     m_Five.SetDump(1,1,d.WF1_1);
  307.     m_Five.SetDump(2,1,d.WF1_2);
  308.     m_Five.SetDump(3,1,d.WF1_3);
  309.     m_Five.SetDump(4,1,d.WF1_4);
  310.     m_Five.SetDump(3,2,d.WF2_3);
  311.     m_Five.SetDump(4,2,d.WF2_4);
  312.     m_Five.SetDump(5,5,d.WF5);
  313.     m_Five.SetParam( d.Breadth,d.Deep,d.Thread,d.Delta );
  314. WriteGameParam( m_Five );
  315. }
  316. }
  317. void CMainFrame::OnViewToolbar1() 
  318. {
  319. // TODO: Add your command handler code here
  320. if( m_wndPlayBar.GetStyle()&WS_VISIBLE )
  321. {
  322. ShowControlBar( &m_wndPlayBar,FALSE,FALSE );
  323. }
  324. else
  325. {
  326. ShowControlBar( &m_wndPlayBar,TRUE,FALSE );
  327. }
  328. }
  329. void CMainFrame::OnUpdateViewToolbar1(CCmdUI* pCmdUI) 
  330. {
  331. // TODO: Add your command update UI handler code here
  332. if( m_wndPlayBar.GetStyle()&WS_VISIBLE )
  333. {
  334. pCmdUI->SetCheck( 1 );
  335. }
  336. else
  337. {
  338. pCmdUI->SetCheck( 0 );
  339. }
  340. }
  341. void CMainFrame::OnButtonHui() 
  342. {
  343. // TODO: Add your command handler code here
  344. }
  345. void CMainFrame::OnViewToolbar() 
  346. {
  347. // TODO: Add your command handler code here
  348. if( m_wndToolBar.GetStyle()&WS_VISIBLE )
  349. {
  350. ShowControlBar( &m_wndToolBar,FALSE,FALSE );
  351. }
  352. else
  353. {
  354. ShowControlBar( &m_wndToolBar,TRUE,FALSE );
  355. }
  356. }
  357. void CMainFrame::OnUpdateViewToolbar(CCmdUI* pCmdUI) 
  358. {
  359. // TODO: Add your command update UI handler code here
  360. if( m_wndToolBar.GetStyle()&WS_VISIBLE )
  361. {
  362. pCmdUI->SetCheck( 1 );
  363. }
  364. else
  365. {
  366. pCmdUI->SetCheck( 0 );
  367. }
  368. }
  369. void CMainFrame::OnButtonDin() 
  370. {
  371. // TODO: Add your command handler code here
  372. }
  373. void CMainFrame::OnButtonQian() 
  374. {
  375. // TODO: Add your command handler code here
  376. }
  377. void CMainFrame::OnButtonXia() 
  378. {
  379. // TODO: Add your command handler code here
  380. }