创建一个工程Mine 由于扫雷只是简单的界面响应及绘制 不需要复杂的文档视图界面 因此需要对框架类进行化:
1.删除MineDoc.h MineDoc.cpp MainFrame.h MainFrame.cpp MineView.h MineView.cpp 6个文件
删除方法 在FileView视图中删除这6个文件(Delete键) 然后在工程文件夹中删除这6个文件 即可
2.创建扫雷主窗口 用于替代删除的CMainFrame类 可以在InitInstance中通过Win32方式定义注册并创建一个主窗口m_pMineWnd
3.在m_pMineWnd窗口创建完成后 将m_pMineWnd赋给CWinApp的主窗口成员m_pMainWnd
4.在CWinApp中删除关于CAboutDialog的定义
5.将CWinApp中的默认消息映射删掉 因为此时默认主菜单响应以及CAboutDialog都已不存在
代码:
const CString classname = _T("MineClass");
BOOL CMineApp::InitInstance()
{
m_pMineWnd = new CMineWnd();
WNDCLASS wc;
ZeroMemory(&wc, sizeof(WNDCLASS));
wc.hInstance = AfxGetInstanceHandle();
wc.hbrBackground = NULL;
wc.lpfnWndProc = ::DefWindowProc;
wc.hCursor = LoadCursor(IDC_ARROW);
wc.hIcon = LoadIcon(IDR_MAINFRAME);
wc.lpszClassName = classname;
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);
if(!AfxRegisterClass(&wc))
{
AfxMessageBox("注册窗口失败!");
return FALSE;
}
UINT uWidth = DEFAULT_FRAME_X + m_xMineNum*MINE_WIDTH + LINE_WIDTH_0*3 +
SIDE_WIDTH_0 + SIDE_WIDTH_1;
UINT uHeight = DEFAULT_FRAME_Y + m_yMineNum*MINE_HEIGHT + LINE_WIDTH_0*3 +
SIDE_WIDTH_0*2 + SIDE_WIDTH_1 + SHELL_S_H;
UINT uxPos = GetSystemMetrics(SM_CXSCREEN)/2 - uWidth/2;
UINT uyPos = GetSystemMetrics(SM_CYSCREEN)/2 - uHeight/2;
if(!m_pMineWnd->CreateEx(NULL, classname, _T("扫雷"), WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
uxPos, uyPos, uWidth, uHeight, NULL, NULL))
{
AfxMessageBox("创建主窗口失败!");
return FALSE;
}
m_pMainWnd = m_pMineWnd;
m_pMineWnd->ShowWindow(SW_SHOW);
m_pMineWnd->UpdateWindow();
return TRUE;
}
要做一个和window游戏扫雷一模一样的界面 就必须要了解Windows游戏扫雷的窗体组成 然后将各种边界值作成宏 方便在窗体随难度改变时作出对应大小改变
//以下宏用于定义窗体各部分边框的大小
#define DEFAULT_FRAME_X 6
#define DEFAULT_FRAME_Y 44
#define LINE_WIDTH_0 3
#define LINE_WIDTH_1 2
#define SIDE_WIDTH_0 6
#define SIDE_WIDTH_1 5
#define SHELL_S_H 37
#define SHELL_S_START_X 9
#define SHELL_S_START_Y 9
#define SHELL_L_START_X 9
#define SHELL_L_START_Y 52
#define MINEAREA_FRAME_X 12
#define MINEAREA_FRAME_Y 55
#define MINE_WIDTH 16
#define MINE_HEIGHT 16
#define MINE_AREA_LEFT 12
#define MINE_AREA_TOP 55
这里根据窗口大小定义了一系列的宏 这些宏主要是为了增加可读性 具体含义在下一节界面加载分析