我正在扩展MFC上的一些控件以用于多个应用程序。我有一个派生类来扩展标签和组合框,因为它们都是静态标签,只需要绘制操作。
在我的派生class Label : public CWnd
中,我已正确编写了OnEraseBkgnd
和OnPaint
msg处理程序。一切都适用于标签和groupboxed,我不介意自己画一切。
我的问题是,从这个派生类'透视,我如何确定我是静态标签还是组合框?
我当然可以添加一个成员变量或函数来指示控件类型,将其设置在应用程序开头的某个位置,然后检查并相应地绘制。但是我想在扩展类的代码中解决这个问题,而不是应用程序代码。
注意:我尝试GetStyle()
并检查BS_GROUPBOX
,但没有帮助,因为静态样式SS_*
的某些组合可以与BS_GROUPBOX
相同。
答案 0 :(得分:1)
GetStyle()
的样式属性对于每个控件类都不同。在确定它是静态的之后,查看它的样式将有助于确定它的静态类型。
由于组框是一个按钮,您需要检查样式为BS_GROUPBOX
的BUTTON类类。
要记住一件事,按钮的样式使用低4位来确定类型。使用BS_TYPEMASK
获取按钮样式。
if ( (GetStyle() & BS_TYPEMASK) == BS_GROUPBOX ) {
// etc
}