Windows运行机理——创建窗口

举报
DreamLife 发表于 2022/04/15 00:42:42 2022/04/15
【摘要】 Windows运行机理这系列文章都是来至于《零基础学Qt4编程》——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 Windows 窗口在创建之前,其属性必须设定好,所谓属性包括类的名字、图标、光标及窗口过程处理函数等属性。为了设定这些属性,Windows 要求注册窗口类,一经注册,就可以创建更多的同类窗口,无需再次注册。窗口类仅仅定...

Windows运行机理这系列文章都是来至于《零基础学Qt4编程》——吴迪,个人觉得写得很好,所以进行了搬运和个人加工

Windows 窗口在创建之前,其属性必须设定好,所谓属性包括类的名字、图标、光标及窗口过程处理函数等属性。为了设定这些属性,Windows 要求注册窗口类,一经注册,就可以创建更多的同类窗口,无需再次注册。窗口类仅仅定义了窗口的特征,所有创建窗口的对象都用窗口类来创建窗口。程序必须在产生窗口前先利用API 函数RegisterClass 设定属性,这一个过程就是注册窗口类。窗口注册完之后,就可以创建相应的窗口。注册窗口时,必须给函数传递一个指针,这个指针指向一个包含窗口属性的结构。该结构有2 个版本,WNDCLASS 和WNDCLASSEX,前者本来用于Windows 早期版本,但现在仍可沿用;后者用于32 位Windows,该结构包含1 个cbSize 成员和1 个指向小图标的句柄,其它两者相同。WNDCLASSEX 定义如下:


  
  1. typedef struct_WNDCLASSEX
  2. {
  3. UINT cbSize;
  4. UINT style;
  5. WNDPROC lpfn WndProc;
  6. int cbClsExtra;
  7. int cbWndExtra;
  8. HANDLE hInstance;
  9. HICON hIcon;
  10. HCURSOR hCursor;
  11. HBRUSH hbrBackground;
  12. LPCTSTR lpszMenuName;
  13. LPCTSTR lpszClassName;
  14. HICON hIconSm;
  15. }WNDCLASSEX;
  16. ATOM RegisterClassEx
  17. (
  18. CONST WNDCLASSEX *lpwcx
  19. );

调用过程如下:


  
  1. WNDCLASSEX wcex;
  2. wcex.cbSize = sizeof(WNDCLASSEX);
  3. wcex.style = CS_HREDRAW | CS_VREDRAW; //窗口风格
  4. wcex.lpfnWndproc = (WNDPROC)WndProc; //窗口过程,处理消息响应
  5. wcex.cbClsExtra = 0;
  6. wcex.cbWndExtra = 0;
  7. wcex.hInstance = hInstance; //程序实例
  8. wcex.hIcon = 0; //图标
  9. wcex.hCursor = LoadCursor(NULL,IDC_ARROW); //光标
  10. wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //背景色
  11. wcex.lpszMenuName = NULL; //菜单资源
  12. wcex.lpszClassName = “Your Class Name”; //窗口类名
  13. wcex.hIconSm = NULL; //小图标
  14. RegisterClassEx(&wcex);

在此之后,就可以使用函数CreateWindow 创建窗口了。不过,这个函数还有11 个参数,第1 个参数就是:

wcex.lpszClassName = “Your Class Name”;
 



⑶ 如果是动态创建控件,您只需要用Create 等函数来创建窗口,这一过程中,MFC 提供了方法来判断窗口类是否注册。若未注册,则先注册,再创建窗口(您完全可以不了解这些内容)。


文章来源: dreamlife.blog.csdn.net,作者:DreamLife.,版权归原作者所有,如需转载,请联系作者。

原文链接:dreamlife.blog.csdn.net/article/details/79591760

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。