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_CLASS(CWindowImpl 中的默认设置)或 DECLARE_WND_CLASS_EX 宏的情况下,CWndClassInfo
才使用 m_bSystemCursor
。 在这种情况下,m_bSystemCursor
初始化为 TRUE。 有关详细信息,请参阅 CWndClassInfo 概述。
CWndClassInfo::m_lpszCursorID
在低位字中指定游标资源的名称或资源标识符,在高位字中指定零。
LPCTSTR m_lpszCursorID;
备注
注册窗口类时,将由 m_wc 检索并存储由 m_lpszCursorID
标识的游标的句柄。
只有在指定 DECLARE_WND_CLASS(CWindowImpl 中的默认设置)或 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_CLASS、DECLARE_WND_CLASS_EX 或 DECLARE_WND_SUPERCLASS 的 WndClassName
参数传递 NULL 时,CWndClassInfo
才使用 m_szAutoName
。 注册窗口类时,ATL 将构造一个名称。
CWndClassInfo::m_wc
保留 WNDCLASSEX 结构中的窗口类信息。
WNDCLASSEX m_wc;
备注
如果已指定 DECLARE_WND_CLASS(CWindowImpl 中的默认设置)或 DECLARE_WND_CLASS_EX 宏,则 m_wc
会包含有关新窗口类的信息。
如果已指定 DECLARE_WND_SUPERCLASS 宏,则 m_wc
会包含有关超类(一个基于现有类但使用不同窗口过程的窗口类)的信息。 m_lpszOrigName 和 pWndProc 分别保存现有窗口类的名称和窗口过程。
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_CLASS(CWindowImpl 中的默认设置)或 DECLARE_WND_CLASS_EX 宏,则 Register
会注册新窗口类。 在这种情况下,不使用 pProc 参数。
如果已指定 DECLARE_WND_SUPERCLASS 宏,则 Register
会注册超类(一个基于现有类但使用不同窗口过程的窗口类)。 在 pProc 中返回现有窗口类的窗口过程。