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);
响应事件,点相应的按钮做出相应的响应,