写作目的
- 了解 windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动;
- 掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;
操作步骤
1.定义 WInMain 函数;
2.设计窗口类 WNDCLASS ;
3.注册窗口类;
4.创建窗口;
5.显示并更新窗口;
6.编写消息循环;
7.编写窗口过程调用函数;
源代码
#include<Windows.h>
LRESULT CALLBACK WndProc(
HWND hwnd, UINT message,
WPARAM wParam,
LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdline,
int nCmdShow)
{
WNDCLASS wndclass;
HWND hwnd;
MSG msg;
char lpszClassName[] = "window";
//设计窗口类型
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbWndExtra = 0;
wndclass.cbClsExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = lpszClassName;
//注册窗口类型
if (!RegisterClass(&wndclass))
return FALSE;
//创建窗口
hwnd = CreateWindow(lpszClassName,
"window窗口创建",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
//显示并刷新窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
//消息循环
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//响应窗口消息
LRESULT CALLBACK WndProc(
HWND hwnd, UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch (message) {
case WM_PAINT:
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc,150,150,"MY FIRST WINDOW",15);
EndPaint(hwnd, &ps);
break;
case WM_LBUTTONDOWN:
{
MessageBeep(0);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
小结
刚开始一直使用vs2019来完成作业但是一直报错,最后发现是开始的文件没有创建正确。