了解窗口特征
窗口特征类提供了一个简单的方法,以便标准化用于创建 ATL 窗口对象的样式。 CWindowImpl 和其他 ATL 窗口类接受窗口特征作为模板参数,以此作为在类级别提供默认窗口样式的方式。
如果窗口实例的创建者在调用 Create 时未显式提供样式,则可以使用特征类来确保使用正确的样式创建窗口。 甚至可以确保为该窗口类的所有实例设置一些样式,而且允许根据每个实例来设置其他样式。
ATL 窗口特征模板
ATL 提供了两个窗口特征模板,可用于在编译时使用模板参数来设置默认样式。
类 | 说明 |
---|---|
CWinTraits | 如果要提供默认窗口样式,且仅在调用 Create 中未指定其他样式时使用,请使用此模板。 运行时提供的样式优先于编译时设置的样式。 |
CWinTraitsOR | 如果要指定必须始终为窗口类设置的样式,请使用此类。 将运行时提供的样式与使用按位 OR 运算符在编译时设置的样式相结合。 |
除了这些模板之外,ATL 还为常用窗口样式组合提供许多 CWinTraits
模板的预定义专用化。 有关详情,请参阅 CWinTraits 参考文档。
自定义窗口特征
在专用化 ATL 提供的模板还不够而且需要创建自己的特征类的罕见情况下,只需创建实现两个静态函数的类:GetWndStyle
和 GetWndStyleEx
:
static DWORD GetWndStyle(DWORD dwStyle);
static DWORD GetWndExStyle(DWORD dwExStyle);
将在运行时给每个函数传递一些样式值,可用于生成新的样式值。 如果将窗口特征类用作 ATL 窗口类的模板参数,传递给这些静态函数的样式值将是作为样式参数传递给 Create 的任何值。