扫雷应该是一个非常经典的游戏,不少人玩过(虽然我没玩过)。那这个专栏就一起来做一个。
新建项目
虽然说源代码可以在工具->编译选项->代码生成/优化->连接器里把不产生控制台改成Yes,但运行exe的时候还是会闪现黑框框。所以建议用Windows Application项目。
先新建一个项目
自己命名一下这个文件的名字~~~
这我已经把他的代码删了,自己可以留着,反正就是个winmain框架。
下面开始Coding~
这次先写难度选择。
代码
#include <windows.h>
LRESULT CALLBACK WndProc_main(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam){
switch(Msg)
{
case WM_DESTROY: {
PostQuitMessage(0);
return 0;
}
default:return DefWindowProc(hWnd,Msg,wParam,lParam);
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){
WNDCLASSEX wcex;
memset(&wcex,0,sizeof(wcex));
wcex.cbSize=sizeof(wcex);
wcex.lpfnWndProc=WndProc_main;
wcex.hInstance=hInstance;
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.style=CS_DBLCLKS|CS_SAVEBITS|CS_GLOBALCLASS;
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszClassName="WindowClass";
wcex.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wcex.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
if (!RegisterClassEx(&wcex)) {
MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
HWND hWnd = CreateWindowExA(WS_EX_ACCEPTFILES,"WindowClass", "Minesweeper",
WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
CW_USEDEFAULT,
CW_USEDEFAULT,
310,
150,
NULL, NULL, hInstance, NULL);
if(!hWnd){
MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
MSG msg={};
while (GetMessage(&msg, NULL, 0, 0) > 0) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
#else
然后运行会有一个小白窗口,名字是Minesweeper(用中文会很美妙)。
往ShowWindow(hWnd,nShowCmd)前头加上Edit的代码:
CreateWindow("Button", "Easy", WS_VISIBLE | WS_CHILD, 25, 55, 80, 32, hWnd, (HMENU)1, NULL, NULL);
CreateWindow("Button", "Middle", WS_VISIBLE | WS_CHILD, 115, 55, 80, 32, hWnd, (HMENU)2, NULL, NULL);
CreateWindow("Button", "Hard", WS_VISIBLE | WS_CHILD, 205, 55, 80, 32, hWnd, (HMENU)3, NULL, NULL);
大小、编号可以自己调,不过改大小要记得窗口大小也要变(不然窗口不美观)。
让后是美妙的窗口过程函数时刻:
case WM_PAINT: {
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 111, 25, "Minesweeper", lstrlen("Minesweeper"));
EndPaint(hWnd, &ps);
break;
}
这一块是一个小小的文字标题(当然喽,位置可以自己改)。
运行一下:
那么别的部分就下篇再继续~~~