扩展控件时识别控件类型(静态,按钮,Gropbox等)

时间:2016-09-05 06:51:02

标签: mfc

我正在扩展MFC上的一些控件以用于多个应用程序。我有一个派生类来扩展标签和组合框,因为它们都是静态标签,只需要绘制操作。

在我的派生class Label : public CWnd中,我已正确编写了OnEraseBkgndOnPaint msg处理程序。一切都适用于标签和groupboxed,我不介意自己画一切。

我的问题是,从这个派生类'透视,我如何确定我是静态标签还是组合框?

我当然可以添加一个成员变量或函数来指示控件类型,将其设置在应用程序开头的某个位置,然后检查并相应地绘制。但是我想在扩展类的代码中解决这个问题,而不是应用程序代码。

注意:我尝试GetStyle()并检查BS_GROUPBOX,但没有帮助,因为静态样式SS_*的某些组合可以与BS_GROUPBOX相同。

1 个答案:

答案 0 :(得分:1)

GetStyle()的样式属性对于每个控件类都不同。在确定它是静态的之后,查看它的样式将有助于确定它的静态类型。

由于组框是一个按钮,您需要检查样式为BS_GROUPBOX的BUTTON类类。

要记住一件事,按钮的样式使用低4位来确定类型。使用BS_TYPEMASK获取按钮样式。

if ( (GetStyle() & BS_TYPEMASK) == BS_GROUPBOX ) {
   // etc
}