曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3263|回复: 0
打印 上一主题 下一主题

窗口类

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2012-1-27 16:46:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
每一个窗口都属于一个窗口类(Window Class)。每一种窗口类具有对固定的用户输入的处理模式,同一类窗口具有相同的菜单项,背景,图标,鼠标指针和窗口消息处理函数。

应用程序在创建窗口前,需要向系统注册窗口类(RegisterClass()),或使用系统已经定义好的窗口类(一些公用的控件所需的窗口类已经由系统定义好了)。在注册窗口类时,需要制定窗口消息的处理函数,比如:
WNDCLASSEX mywcex;
mywcex.lpfnWndProc = WndProc;
其中,WndProc() 就是消息处理函数。

Windows API 函数 RegisterClass() 和 RegisterClassEx() 都可以完成窗口类的注册,后者是前者的一个扩展。

WNDCLASSEX 的定义如下:
[C++] 纯文本查看 复制代码
typedef struct {
    UINT cbSize;
    UINT style;
    WNDPROC lpfnWndProc;
    int cbClsExtra;
    int cbWndExtra;
    HINSTANCE hInstance;
    HICON hIcon;
    HCURSOR hCursor;
    HBRUSH hbrBackground;
    LPCTSTR lpszMenuName;
    LPCTSTR lpszClassName;
    HICON hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;

其中 style 是窗口类样式,通过系统预定义的一些常量来设置窗口的样子。比如,CS_BYTEALIGNCLIENT 表示窗口客户区以 byte 的宽度对齐,CS_DBLCLKS 表示如果有双击就会向窗口发送消息,CS_NOCLOSE 表示没有关闭按钮,CS_HREDRAW 和 CS_VREDRAW 表示窗口的长度或宽度在变化后会重绘窗口。

lpfnWndProc 是应用程序的实例句柄,和 WinMain() 函数中的第一个参数一样。

hIcon ,hCursor,hbrBackground,lpszMenuName 分别是窗口类的图标样式,鼠标指针样式,背景画刷(COLOR_BACKGROUND,COLOR_WINDOW等,也可以自定义画刷),菜单名。

lpszClassName 是新建窗口类的类名,在创建窗口时需要制定窗口所属类的类名。

将窗口类中的元素填充完毕后需要注册窗口类,注册窗口类使用 RegisterClass() 或 RegisterClassEx() 函数。下面是一段示例代码:
[C++] 纯文本查看 复制代码
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX mywcex;

    mywcex.cbSize = sizeof(WNDCLASSEX);

    mywcex.style            = CS_HREDRAW | CS_VREDRAW;
    mywcex.lpfnWndProc    = WndProc;
    mywcex.cbClsExtra        = 0;
    mywcex.cbWndExtra        = 0;
    mywcex.hInstance        = hInstance;
    mywcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
    //mywcex.hIcon            = LoadIcon(NULL, IDI_ERROR);
    mywcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    mywcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
    mywcex.lpszMenuName    = MAKEINTRESOURCE(IDC_WIN32MAIN);
    mywcex.lpszClassName    = szWindowClass;
    mywcex.hIconSm        = NULL;//LoadIcon(mywcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

    return RegisterClassEx(&mywcex);
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-15 20:24 , Processed in 0.076820 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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