飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3344|回复: 1

Windows API一日一练 RegisterClass 和 RegisterClassEx 函数

[复制链接]
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-5-26 12:44:48 | 显示全部楼层 |阅读模式
    为了可以创建自己的窗口,就需要向 Windows 操作系统注册窗口类型,以便后面创建窗口
    时调用。当然,如果使用Windows 预先注册的窗口是不需要注册的。
      
    函数声明如下:
    #if(WINVER >= 0x0400)
    WINUSERAPI
    ATOM
    WINAPI
    RegisterClassExA(
        __in CONST WNDCLASSEXA *);
    WINUSERAPI
    ATOM
    WINAPI
    RegisterClassExW(
        __in CONST WNDCLASSEXW *);
    #ifdef UNICODE
    #define RegisterClassEx RegisterClassExW
    #else
    #define RegisterClassEx RegisterClassExA
    #endif // !UNICODE
      
    函数的输入参数是一个WNDCLASSEXA 或WNDCLASSEXW 的指针。这里主要介绍
    UNICODE 版本的函数定义,WNDCLASSEXW 的结构定义如下:
    typedef struct tagWNDCLASSEXW {
        UINT         cbSize;
         /* Win 3.x */
        UINT         style;
        WNDPROC      lpfnWndProc;
         int          cbClsExtra;
         int          cbWndExtra;
        HINSTANCE   hInstance;
        HICON       hIcon;
        HCURSOR     hCursor;
        HBRUSH      hbrBackground;
         LPCWSTR      lpszMenuName;
         LPCWSTR      lpszClassName;
         /* Win 4.0 */
        HICON       hIconSm;
    } WNDCLASSEXW, *PWNDCLASSEXW, NEAR *NPWNDCLASSEXW, FAR
    *LPWNDCLASSEXW;
      
    cbSize 是本结构的字节大小,一般设置为 sizeof(WNDCLASSEXW);
    style 是窗口类型。
    lpfnWndProc 是窗口处理消息的回调函数。
    cbClsExtra 是窗口类型的扩展。
    cbWndExtra 是窗口实例的扩展。
    hInstance 是窗口实例句柄。
    hIcon 是窗口图标。
    hCursor 是窗口的光标。
    hbrBackground 是窗口背景颜色。
    lpszMenuName 是窗口菜单名称。
    lpszClassName 是窗口类型的名称。
    hIconSm 是窗口小图标。
      
    调用这个函数的实例如下:
    #001 //
    #002 // 函数: MyRegisterClass()
    #003 //
    #004 // 目的: 注册一个窗口类型.
    #005 //
    #006 // 蔡军生 2007/07/12
    #007 //
    #008 ATOM MyRegisterClass(HINSTANCE hInstance)
    #009 {
    #010  WNDCLASSEX wcex;
    #011  
    #012  wcex.cbSize = sizeof(WNDCLASSEX);
    #013  
    #014  wcex.style             = CS_HREDRAW | CS_VREDRAW;
    #015  wcex.lpfnWndProc = WndProc;
    #016  wcex.cbClsExtra           = 0;
    #017  wcex.cbWndExtra        = 0;
    #018  wcex.hInstance      = hInstance;
    #019  wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TESTWIN));
    #020  wcex.hCursor         = LoadCursor(NULL, IDC_ARROW);
    #021  wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
    #022  wcex.lpszMenuName      = MAKEINTRESOURCE(IDC_TESTWIN);
    #023  wcex.lpszClassName     = szWindowClass;
    #024  wcex.hIconSm        = LoadIcon(wcex.hInstance,
    MAKEINTRESOURCE(IDI_SMALL));
    #025  
    #026  return RegisterClassEx(&wcex);
    #027 }
      
    第 10 行定义一个窗口结构的对象 wcex。
    第 12 行设置窗口结构的大小。
    第 14 行设置窗口类型。
    第 15 行设置窗口消息处理函数WndProc。
    第 16 行设置窗口类型的扩展为空。
    第 17 行设置窗口实例的扩展为空。
    第 18 行设置窗口当前实例句柄 hInstance。
    第 19 行设置窗口图标。
    第 20 行设置光标为箭头。
    第 21 行设置窗口背景颜色为白色。
    第 22 行设置窗口菜单。
    第 23 行设置窗口类型名称。
    第 24 行设置窗口小图标。
    第 26 行是调用函数 RegisterClassEx 注册这个窗口类型。
      
    如果注册成功,返回这个窗口类型的标识号,可以用标识号进行创建窗口,查找窗口和注销
    窗口类型等等。如果失败返回的值是空,因此可以通过检查返回值为判断是否调用成功。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-5-26 13:35:14 | 显示全部楼层
    沙发/关键是来学技术的
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表