【Windows编程】第一个窗口程序
创建一个C++ Win32 空项目
引入头文件
#include <Windows.h>
#include <iostream>
自实现 WindowProc 函数
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
) {
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
}
创建入口函数
int WINAPI WinMain (
HINSTANCE hInstance,
HINSTANCE hPreInstance,
LPSTR lpCmdeLine,
int nCmdShow
) {
return 0;
}
- 创建一个窗口类
WNDCLASS myClass = {0};
myClass.lpszClassName = L"myClass";
myclass.lpfnWndProc = WindowProc;
- 注册窗口类
RegisterClass(&myClass);
- 创建窗口
HWND hwindow = CreateWindow(
myClass.lpszClassName,
L"myWindow",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
0
);
- 显示窗口
ShowWindow(hwindow, SW_SHOWNORMAL);
- 获取消息
MSG msg = {0};
while (GetMessage(&msg, 0, 0, 0)) {
DispatchMessage(&msg);
}
- 在窗口回调函数处理消息
switch (uMsg) {
case WM_CREATE:
MessageBox(hwnd, L"窗口创建了", L"提示", MB_OK);
break;
case WM_CLOSE:
MessageBox(hwnd, L"窗口关闭了", L"提示", MB_OK);
break;
}
- 完善 WM_CLOSE 逻辑
DestroyWindow(hwnd);
PostQuitMessage(0);
最后一步:修改项目属性,进入属性 - 链接器 - 系统,子系统修改为"窗口"
完整代码
#include <Windows.h>
#include <iostream>
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
) {
switch (uMsg) {
case WM_CREATE:
MessageBox(hwnd, L"窗口创建了", L"提示", MB_OK);
break;
case WM_CLOSE:
MessageBox(hwnd, L"窗口关闭了", L"提示", MB_OK);
DestroyWindow(hwnd);
PostQuitMessage(0);
break;
}
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
}
int WINAPI WinMain (
HINSTANCE hInstance,
HINSTANCE hPreInstance,
LPSTR lpCmdeLine,
int nCmdShow
) {
WNDCLASS myClass = {0};
myClass.lpszClassName = L"myClass";
myClass.lpfnWndProc = WindowProc;
RegisterClass(&myClass);
HWND hwindow = CreateWindow(
myClass.lpszClassName,
L"myWindow",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
0
);
ShowWindow(hwindow, SW_SHOWNORMAL);
MSG msg = {0};
while (GetMessage(&msg, 0, 0, 0)) {
DispatchMessage(&msg);
}
return 0;
}