2.win32框架

本文详细介绍了Win32应用程序开发中的关键步骤,包括注册窗口类、创建窗口、显示和更新窗口、设置消息循环以及窗口消息处理。通过示例代码展示了如何从入口函数开始,到窗口创建、显示和更新,再到消息的处理,最后解释了窗口消息处理函数和默认窗口消息处理函数的作用,为读者提供了深入理解Win32框架的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

win32框架

一、注册窗口类

ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;//表示一个窗口类信息的结构体变量
				//后缀EX表示拓展
wcex.cbsize = sizeof(WNDCLASSEX);	//结构占内存大小
wces.lpfnWndProc = WndProc;//该窗口类用于处理窗口消息的回调函数是谁
wces.cbClsExtra = 0;//类的而外信息
wcex.cbWndExtra = 0;//窗口的而外信息 
wcex.hInstance = hInstance;//窗口的实例句柄
wcex.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_CLASS02));//图标
wcex.hCursor = LoadCursor(NULL,IDC_ARROW);//加载光标
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//背景颜色
wcex.lpszMenName = MAKEINTRESOURCE(IDC_CLASS02);//加载菜单
wcex.lpszClassName = szWindowClass;//窗口类名
wcex.hIconsm = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_CLASS02));//小图标
return RegisterClassEx(&wcex);//返回一个系统的注册类信息的函数调用结果。 
}

二、创建窗口

hWnd = CreateWindow(szWindowClass,//已注册窗口的类名
_T("这是第一个windows窗口程序"),//窗口的标题
WS_OVERLAPPEDWINDOW|WS_HSCROLL,//窗口的风格
100,100//窗口左上角X,Y坐标,如果X用的是CW-USEDEFAULT默认值,Y填0.那么自动匹配Y的坐标。
800,600,//窗口的宽和高,如果宽用的是CW-USEDEFAULT,高为0,那么自动匹配高。
NULL,// 父类窗口句柄
null,//窗口菜单句柄,如果给NULL就默认使用注册的菜单,如果不给空,需要自己创建一个菜单,填入创建菜单句柄
hInstance,//实例句柄
null);//窗口的辅助信息,基本不用。

三、显示和更新窗口

ShowWindow(hWnd,nCmdshow);//显示窗口
UpdateWindow(hWnd);//更新窗口。

四、消息循环

//主消息循环
if(!hWnd)//是否创建成功。如果创建失败,那么hWnd为空。返回结果FALSE。
{
    return FALSE;
}
while()
{
    
    
}

五、win32框架流程

1、入口函数

int APIENTRY wWinMain(In HINSTANCE hInstance,
In_opt HINSTANCE hPrevInstance,
In LPWSTR lpCmdLine,
In int nCmdShow)
{}

2、窗口注册类信息

MyRegisterClass(hInstance);

3、窗口创建

if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

HWND hWnd = CreateWindowW(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL,cxClient / 3, cyClient / 3, cxClient / 3, cyClient / 3, nullptr,hmenu_1, hInstance, nullptr);

4、窗口显示

ShowWindow(hWnd,nCmdshow);//显示窗口

5、窗口更新

UpdateWindow(hWnd);//更新窗口。

6、消息循环

while (GetMessage(&msg, nullptr, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

7、入口函数返回

return (int) msg.wParam;

六、窗口消息处理函数

while (GetMessage(&msg, nullptr, 0, 0))//从消息队列中获取消息
{
 if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
     //判断是否为快捷键消息,不是快捷键消息则进行下一步
 {
     TranslateMessage(&msg);//将虚拟按键消息,转为字符消息
     DispatchMessage(&msg);//将消息分派给窗口过程。相当于回调函数,返回一个指令。
 }
}

七、默认窗口消息处理函数

DefWindowProc(hWnd, message, wParam, lParam);

响应事件,点相应的按钮做出相应的响应,

回一个指令。
}
}




## 七、默认窗口消息处理函数

```c
DefWindowProc(hWnd, message, wParam, lParam);

响应事件,点相应的按钮做出相应的响应,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值