CWndClassInfo 类

此类提供用于注册窗口类信息的方法。

重要

无法在 Windows 运行时中执行的应用程序中使用此类及其成员。

语法

class CWndClassInfo

成员

公共方法

名称 描述
注册 注册窗口类。

数据成员

名称 描述
m_atom 唯一标识已注册的窗口类。
m_bSystemCursor 指定游标资源是引用系统游标还是模块资源中包含的游标。
m_lpszCursorID 指定游标资源的名称。
m_lpszOrigName 包含现有窗口类的名称。
m_szAutoName 保存窗口类的 ATL 生成的名称。
m_wc 保留 WNDCLASSEX 结构中的窗口类信息。
pWndProc 指向现有窗口类的窗口过程。

备注

CWndClassInfo 管理窗口类的信息。 通常通过三个宏(DECLARE_WND_CLASS、DECLARE_WND_CLASS_EX 或 DECLARE_WND_SUPERCLASS)之一使用 CWndClassInfo,如下表所述:

说明
DECLARE_WND_CLASS CWndClassInfo 注册新窗口类的信息。
DECLARE_WND_CLASS_EX CWndClassInfo 注册新窗口类的信息,包括类参数。
DECLARE_WND_SUPERCLASS CWndClassInfo 注册基于现有类的窗口类的信息,但使用不同的窗口过程。 此方法称为超类化。

默认情况下,CWindowImpl 包含的 DECLARE_WND_CLASS 宏可基于新窗口类创建窗口。 DECLARE_WND_CLASS 为控件提供默认样式和背景色。 如果要自行指定样式和背景色,请从 CWindowImpl 派生类并在类定义中包括 DECLARE_WND_CLASS_EX 宏。

如果要基于现有窗口类创建窗口,请从 CWindowImpl 派生类并在类定义中包括 DECLARE_WND_SUPERCLASS 宏。 例如:

class ATL_NO_VTABLE CMyWindow :
   OtherInheritedClasses
   public CComControl<CMyWindow>
          // CComControl derives from CWindowImpl
{
public:
   // 1. The NULL parameter means ATL will generate a
   //    name for the superclass
   // 2. The "EDIT" parameter means the superclass is
   //    based on the standard Windows Edit box
   DECLARE_WND_SUPERCLASS(NULL, _T("EDIT"))

   // Remainder of class declaration omitted

有关窗口类的详细信息,请参阅 Windows SDK 中的窗口类

若要详细了解如何在 ATL 中使用窗口,请参阅 ATL 窗口类一文。

要求

标头:atlwin.h

CWndClassInfo::m_atom

包含已注册窗口类的唯一标识符。

ATOM m_atom;

CWndClassInfo::m_bSystemCursor

如果为 TRUE,则注册窗口类时将加载系统游标资源。

BOOL m_bSystemCursor;

备注

否则,将加载模块中包含的游标资源。

只有在指定 DECLARE_WND_CLASSCWindowImpl 中的默认设置)或 DECLARE_WND_CLASS_EX 宏的情况下,CWndClassInfo 才使用 m_bSystemCursor。 在这种情况下,m_bSystemCursor 初始化为 TRUE。 有关详细信息,请参阅 CWndClassInfo 概述。

CWndClassInfo::m_lpszCursorID

在低位字中指定游标资源的名称或资源标识符,在高位字中指定零。

LPCTSTR m_lpszCursorID;

备注

注册窗口类时,将由 m_wc 检索并存储由 m_lpszCursorID 标识的游标的句柄。

只有在指定 DECLARE_WND_CLASSCWindowImpl 中的默认设置)或 DECLARE_WND_CLASS_EX 宏的情况下,CWndClassInfo 才使用 m_lpszCursorID。 在这种情况下,m_lpszCursorID 初始化为 IDC_ARROW。 有关详细信息,请参阅 CWndClassInfo 概述。

CWndClassInfo::m_lpszOrigName

包含现有窗口类的名称。

LPCTSTR m_lpszOrigName;

备注

仅当类定义中包含 DECLARE_WND_SUPERCLASS 宏时,CWndClassInfo 才使用 m_lpszOrigName。 在这种情况下,CWndClassInfo 会注册一个基于 m_lpszOrigName 所命名的类的窗口类。 有关详细信息,请参阅 CWndClassInfo 概述。

CWndClassInfo::m_szAutoName

保存窗口类的名称。

TCHAR m_szAutoName[13];

备注

仅当为 DECLARE_WND_CLASSDECLARE_WND_CLASS_EXDECLARE_WND_SUPERCLASSWndClassName 参数传递 NULL 时,CWndClassInfo 才使用 m_szAutoName。 注册窗口类时,ATL 将构造一个名称。

CWndClassInfo::m_wc

保留 WNDCLASSEX 结构中的窗口类信息。

WNDCLASSEX m_wc;

备注

如果已指定 DECLARE_WND_CLASSCWindowImpl 中的默认设置)或 DECLARE_WND_CLASS_EX 宏,则 m_wc 会包含有关新窗口类的信息。

如果已指定 DECLARE_WND_SUPERCLASS 宏,则 m_wc 会包含有关超类(一个基于现有类但使用不同窗口过程的窗口类)的信息。 m_lpszOrigNamepWndProc 分别保存现有窗口类的名称和窗口过程。

CWndClassInfo::pWndProc

指向现有窗口类的窗口过程。

WNDPROC pWndProc;

注解

仅当类定义中包含 DECLARE_WND_SUPERCLASS 宏时,CWndClassInfo 才使用 pWndProc。 在这种情况下,CWndClassInfo 会注册一个窗口类,该类基于现有类但使用不同的窗口过程。 现有窗口类的窗口过程保存在 pWndProc 中。 有关详细信息,请参阅 CWndClassInfo 概述。

CWndClassInfo::Register

CWindowImpl::Create 调用以注册窗口类(如果尚未注册)。

ATOM Register(WNDPROC* pProc);

参数

pProc
[out] 指定现有窗口类的原始窗口过程。

返回值

如果成功,则为一个唯一标识要注册的窗口类的 atom。 否则为 0。

备注

如果已指定 DECLARE_WND_CLASSCWindowImpl 中的默认设置)或 DECLARE_WND_CLASS_EX 宏,则 Register 会注册新窗口类。 在这种情况下,不使用 pProc 参数。

如果已指定 DECLARE_WND_SUPERCLASS 宏,则 Register 会注册超类(一个基于现有类但使用不同窗口过程的窗口类)。 在 pProc 中返回现有窗口类的窗口过程。

另请参阅

CComControl 类
类概述