2009-09-28 15 views
1

我想使用CButton來創建一個自繪的複選框,但由於我只想更改文本顏色,因此我希望複選框的標記保持不變。如何獲取默認複選框圖像?

是否有一個命令允許我檢索程序運行的平臺的默認複選框位圖?

(或者:我怎麼可能只改變文字顏色,保留複選框標記?)

回答

4

我使用UxTheme.dll來繪製我的自定義複選框。

首先我繪製使用複選框標記:DrawThemeBackground傳遞給它的改性矩形(checkboxRect.right = pCustomDraw-> rc.left + 15)

然後我自己使用繪製文本:: DrawText的。

我希望它有幫助。

+1

這工作,再加上我發現CMFCVisualManager :: GetInstance() - > DrawCheckBox做同樣的事情。 – djeidot 2009-09-28 14:57:20

+0

很高興知道你能解決你的問題! – 2009-09-29 08:58:21

+0

是的,我做了,雖然改變文字顏色還有很多工作... – djeidot 2009-09-29 10:12:03

1

你最好的策略是覆蓋爲OnCtlColor處理程序:

BEGIN_MESSAGE_MAP(CBaseDialog, CDialog) 
{ 
    ON_WM_CTLCOLOR() 
} 

HBRUSH CXXX:OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
    HBRUSH hBkgrBrush= CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 

    pDC->SetTextColor(RGB(255,0,0)); // red 
    pDC->SetBkMode (TRANSPARENT); 
    return hBkgrBrush; 
} 

http://msdn.microsoft.com/en-us/library/0wwk06hc(VS.80).aspx|

+0

是的,但這不適用於CButtons ...儘管我可以設置背景顏色,但SetTextColor命令不起作用。 – djeidot 2009-09-28 12:33:11

+0

它在包含對話框級別實現時起作用。 – 2009-09-28 12:45:43

+0

它不適合我。我使用MFC Feature Pack中的CMFCVisualManager來設置應用程序的外觀,也許這就是原因。 – djeidot 2009-09-28 12:52:33

1

如果您只想更改文字顏色,請在包含對話框中爲OnCtlColor實施處理程序。像這樣:

HBRUSH CDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 

    if(pWnd->GetDlgCtrlID() == IDC_CHECK_BOX) //check for your check box control ID 
    { 
     pDC->SetTextColor(RGB(255,0,0)); 
    } 
    return hbr; 
} 

請注意,這不適用於常規按鈕,但複選框應該沒有問題。無需實施自主控制。

編輯:

你必須確保,你的複選框使用BS_AUTOCHECKBOX風格。還要確保沒有設置BS_OWNERDRAW風格。

編輯#2: DrawFrameControl()與DFCS_BUTTONCHECK會讓你繪製默認複選框位圖。

+0

查看我爲@Lior Kogan的答案所作的評論 – djeidot 2009-09-28 12:43:45

+0

我構建了一個示例,並對所做的更改進行了建議,並且工作正常。也許你可以發佈更多的代碼。正如Lior Kogan所建議的那樣,您必須在您的包含對話框中實現您的處理程序,並使用消息映射正確註冊它。 – 2009-09-28 12:54:28

+0

發現它適用於VS2003,但不適用於VS2008。仍然檢查DrawFrameControl()。 – djeidot 2009-09-28 14:02:20