• 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”;

    只有用注册过的窗口类名才可以创建窗体。不过,用户一般情况下不用担心这些事情,因为,MFC 已经做了其中的大部分事情。如:
    ⑴ 在3 个应用程序框架里,主要的窗口都已经被创建了,可以直接使用C++对象;
    ⑵ 在资源编辑器里,控件窗口也被设计好了,您可以用Class Wizard 为控件窗口连接C++对象。

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

  • 相关阅读:
    微信redirect_uri域名与后台配置不一致,错误代码10003
    windows安装centos7子系统
    c++中的var_dump
    egret3.x升级5.2
    PHP更改自动加载的顺序
    重定向如何携带cookie
    elasticsearch和mysql排序问题
    npm错误:Error: listen EADDRNOTAVAIL
    Spring Boot WebFlux 集成 Mongodb 数据源操作
    泥瓦匠:程序猿为啥要坚持写原创技术博客?
  • 原文地址:https://www.cnblogs.com/DreamDog/p/9159977.html
Copyright © 2020-2023  润新知