vC++中的组合框控件的自定义或子类
答
如何使组框/静态控件做子类或自定义 控件。
从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.
}
如何获取所有组框/静态控件数。
使用EnumChildWindows()
来枚举所有子窗口。在回调电话GetClassName()
中检查窗口类是否为“按钮”,并呼叫GetWindowLong(hwnd, GWL_STYLE)
检查是否设置了BS_GROUPBOX
标志。