此文纯属个人分析!高手绕道!
源码如下:(代码这么长,晕倒!? 跳过代码看分析!)
头文件:(TicTac.h)
//#include<afxwin.h>
#define EX 1
#define OH 2
class CMyApp:public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CMainWindow:public CWnd
{
protected:
static const CRect m_rcSquares[9];
int m_nGameGrid[9];
int m_nNextChar;
int GetRectID(CPoint point);
void DrawBoard(CDC* pDC);
void DrawX(CDC* pDC,int nPos);
void DrawO(CDC* pDC,int nPos);
void ResetGame();
void CheckForGameOver();
int IsWinner();
BOOL IsDraw();
public:
CMainWindow();
protected:
virtual void PostNcDestroy();
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags,CPoint point);
afx_msg void OnRButtonDown(UINT nFlags,CPoint point);
afx_msg void OnLButtonDblClk(UINT nFlags,CPoint point);
DECLARE_MESSAGE_MAP()
};
源文件:(TicTac.cpp)
#include<afxwin.h>
#include"TicTac.h"
CMyApp myApp;
/CMyAPP member functions//
BOOL CMyApp::InitInstance()
{
m_pMainWnd=new CMainWindow;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
/CMainWindow message map and member functions/
BEGIN_MESSAGE_MAP(CMainWindow,CWnd)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONDOWN()
ON_WM_LBUTTONDBLCLK()
END_MESSAGE_MAP()
const CRect CMainWindow::m_rcSquares[9]={
CRect(16,16,112,112),
CRect(128,16,224,112),
CRect(240,16,336,112),
CRect(16,128,112,224),
CRect(128,128,224,224),
CRect(240,128,336,224),
CRect(16,240,112,336),
CRect(128,240,224,336),
CRect(240,240,336,336)
};
CMainWindow::CMainWindow(){
m_nNextChar=EX;
::ZeroMemory(m_nGameGrid,9*sizeof(int));
//Register a WNDCLASS.
CString strWndClass=AfxRegisterWndClass(
CS_DBLCLKS,
AfxGetApp()->LoadStandardCursor(IDC_ARROW),
(HBRUSH)(COLOR_3DFACE+1),
AfxGetApp()->LoadStandardIcon(IDI_WINLOGO)
);
//create a window
CreateEx(0,strWndClass,_T("Tic-Tac