CButton を使用して所有者描画のチェック ボックスを作成しようとしていますが、テキストの色だけを変更したいので、チェック ボックスのマークは同じままにしておきたいです。
プログラムが実行されているプラットフォームのデフォルトのチェック ボックス ビットマップを取得できるコマンドはありますか?
(または、チェック ボックスのマークを保持したまま、テキストの色だけを変更するにはどうすればよいでしょうか?)
UxTheme.dll を使用して、カスタム チェックボックスを描画します。
最初に、以下を使用してチェック ボックス マークを描画します。
そして、::DrawText を使用して自分でテキストを描画します。
お役に立てば幸いです。
テキストの色のみを変更したい場合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: DFCS_BUTTONCHECKを指定したDrawFrameControl()を使用すると、デフォルトのチェックボックスビットマップを描画できます。
あなたの最善の戦略は、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|を参照してください。