Windows运行机理——创建窗口
Windows运行机理这系列文章都是来至于《零基础学Qt4编程》——吴迪,个人觉得写得很好,所以进行了搬运和个人加工
Windows 窗口在创建之前,其属性必须设定好,所谓属性包括类的名字、图标、光标及窗口过程处理函数等属性。为了设定这些属性,Windows 要求注册窗口类,一经注册,就可以创建更多的同类窗口,无需再次注册。窗口类仅仅定义了窗口的特征,所有创建窗口的对象都用窗口类来创建窗口。程序必须在产生窗口前先利用API 函数RegisterClass 设定属性,这一个过程就是注册窗口类。窗口注册完之后,就可以创建相应的窗口。注册窗口时,必须给函数传递一个指针,这个指针指向一个包含窗口属性的结构。该结构有2 个版本,WNDCLASS 和WNDCLASSEX,前者本来用于Windows 早期版本,但现在仍可沿用;后者用于32 位Windows,该结构包含1 个cbSize 成员和1 个指向小图标的句柄,其它两者相同。WNDCLASSEX 定义如下:
-
typedef struct_WNDCLASSEX
-
{
-
UINT cbSize;
-
UINT style;
-
WNDPROC lpfn WndProc;
-
int cbClsExtra;
-
int cbWndExtra;
-
HANDLE hInstance;
-
HICON hIcon;
-
HCURSOR hCursor;
-
HBRUSH hbrBackground;
-
LPCTSTR lpszMenuName;
-
LPCTSTR lpszClassName;
-
HICON hIconSm;
-
}WNDCLASSEX;
-
ATOM RegisterClassEx
-
(
-
CONST WNDCLASSEX *lpwcx
-
);
调用过程如下:
-
WNDCLASSEX wcex;
-
wcex.cbSize = sizeof(WNDCLASSEX);
-
wcex.style = CS_HREDRAW | CS_VREDRAW; //窗口风格
-
wcex.lpfnWndproc = (WNDPROC)WndProc; //窗口过程,处理消息响应
-
wcex.cbClsExtra = 0;
-
wcex.cbWndExtra = 0;
-
wcex.hInstance = hInstance; //程序实例
-
wcex.hIcon = 0; //图标
-
wcex.hCursor = LoadCursor(NULL,IDC_ARROW); //光标
-
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //背景色
-
wcex.lpszMenuName = NULL; //菜单资源
-
wcex.lpszClassName = “Your Class Name”; //窗口类名
-
wcex.hIconSm = NULL; //小图标
-
RegisterClassEx(&wcex);
在此之后,就可以使用函数CreateWindow 创建窗口了。不过,这个函数还有11 个参数,第1 个参数就是:
wcex.lpszClassName = “Your Class Name”;
⑶ 如果是动态创建控件,您只需要用Create 等函数来创建窗口,这一过程中,MFC 提供了方法来判断窗口类是否注册。若未注册,则先注册,再创建窗口(您完全可以不了解这些内容)。
文章来源: dreamlife.blog.csdn.net,作者:DreamLife.,版权归原作者所有,如需转载,请联系作者。
原文链接:dreamlife.blog.csdn.net/article/details/79591760
- 点赞
- 收藏
- 关注作者
评论(0)