2017-08-20 49 views

回答

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. 
} 

如何获取所有组框/静态控件数。

使用EnumChildWindows()来枚举所有子窗口。在回调电话GetClassName()中检查窗口类是否为“按钮”,并呼叫GetWindowLong(hwnd, GWL_STYLE)检查是否设置了BS_GROUPBOX标志。