首先知道一些定义:
HINSTANCE hInstance:窗口句柄,可以理解为一个窗口的标识符,相当于我们每个人都有一个身份证号一样,用来辨识不同的窗口。
HINSTANCE hPreInstance:32位及以上的计算机不会用到,都设为0。
LPSTR ICmdLine:等同于char* 类型,即字符串指针,往往是在命令行由用户输入的,所以很少用到。
int CmdShow: 用于指定窗口的显示状态,比如最大化、最小化等。
WINAPI:我们发现WinMain前面还有一个WINAPI,它表明函数的调用约定,即函数从调用方接受参数的方式。我们现在只需要先按这个格式定义我们的入口就行了。
#include<Windows.h>
//自定义的窗口过程
LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
switch (Msg) {
case WM_DESTROY://关闭进程
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPreInstance, _In_ LPSTR ICmdLine,_In_ int nCmdShow) {
// 创建窗口类
WNDCLASS wnd = {
CS_HREDRAW,
MyWindowProc, // 使用自定义的窗口过程函数
0,0,hInstance,
LoadIcon(NULL,IDI_APPLICATION),
LoadCursor(NULL,IDC_ARROW),
(HBRUSH)(GetStockObject(WHITE_BRUSH)),
NULL, L"MyWindow"
};
// 注册窗口类
RegisterClass(&wnd);
// 创建窗口
HWND hWnd = CreateWindow(L"MyWindow", L"newWindow", WS_OVERLAPPEDWINDOW,
100, 100, 500, 500, NULL, NULL, hInstance, NULL);
// 显示窗口
ShowWindow(hWnd, nCmdShow);
// 更新窗口
UpdateWindow(hWnd);
//消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{ // 循环获取消息
TranslateMessage(&msg); // 翻译消息
DispatchMessage(&msg); // 派发消息
}
return 0;
}
备注:
1、 int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPreInstance, _In_ LPSTR ICmdLine,_In_ int nCmdShow)
我不加_In_ ,_In_opt_,_In_,_In_j就一直警告:
严重性 代码 说明 项目 文件 行
警告 C28251 “WinMain”的批注不一致: 此实例包含 无批注。请参见 c:\program files (x86)\windows kits\10\include\10.0.18362.0\um\winbase.h(933)。
窗口显示图形 C:\Users\Administrator\source\repos\窗口显示图形\源1.cpp 66
2、注册窗口->创建窗口->显示窗口->更新窗口的顺序来写
3、这里子系统要改成窗口
4、运行结果为