自定义或子类化vc ++中的组框控件

时间:2017-08-20 03:13:45

标签: visual-c++ mfc custom-controls

如何使组框/静态控件执行子类或自定义控件。

如何计算所有Group框/静态控件的数量。这样我就可以将圆角应用于所有Group Box /静态控件。

1 个答案:

答案 0 :(得分:1)

  

如何使组框/静态控件执行子类或自定义   控制。

CButton派生一个班级。处理NM_CUSTOMDRAW通知以执行自定义绘图。或者,可以使用BS_OWNERDRAW窗口样式,但这与BS_GROUPBOX互斥。使用NM_CUSTOMDRAW时,可以保留原始窗口样式标志。

请注意,NM_CUSTOMDRAW通常会发送到父窗口,但您可以重新路由此消息以在控件类中处理它,如下所示:

BEGIN_MESSAGE_MAP(CMyGroupBox, CButton)
    ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
END_MESSAGE_MAP()

OnCustomDraw()的定义如下:

void CMyGroupBox::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
    auto pnmc = reinterpret_cast<NMCUSTOMDRAW*>( pNMHDR );
    // Query pnmc members and do the custom drawing as documented on MSDN.
    // Assign the result to *pResult.
}
  

如何计算所有Group框/静态控件的数量。

使用EnumChildWindows()枚举所有子窗口。在回调调用GetClassName()中检查windows类是否为“button”并调用GetWindowLong(hwnd, GWL_STYLE)以检查是否设置了BS_GROUPBOX标志。