我想使用CButton來創建一個自繪的複選框,但由於我只想更改文本顏色,因此我希望複選框的標記保持不變。如何獲取默認複選框圖像?
是否有一個命令允許我檢索程序運行的平臺的默認複選框位圖?
(或者:我怎麼可能只改變文字顏色,保留複選框標記?)
我想使用CButton來創建一個自繪的複選框,但由於我只想更改文本顏色,因此我希望複選框的標記保持不變。如何獲取默認複選框圖像?
是否有一個命令允許我檢索程序運行的平臺的默認複選框位圖?
(或者:我怎麼可能只改變文字顏色,保留複選框標記?)
我使用UxTheme.dll來繪製我的自定義複選框。
首先我繪製使用複選框標記:DrawThemeBackground傳遞給它的改性矩形(checkboxRect.right = pCustomDraw-> rc.left + 15)
然後我自己使用繪製文本:: DrawText的。
我希望它有幫助。
你最好的策略是覆蓋爲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|
如果您只想更改文字顏色,請在包含對話框中爲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會讓你繪製默認複選框位圖。
這工作,再加上我發現CMFCVisualManager :: GetInstance() - > DrawCheckBox做同樣的事情。 – djeidot 2009-09-28 14:57:20
很高興知道你能解決你的問題! – 2009-09-29 08:58:21
是的,我做了,雖然改變文字顏色還有很多工作... – djeidot 2009-09-29 10:12:03