2017-08-20 51 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標誌。