1

CButton を使用して所有者描画のチェック ボックスを作成しようとしていますが、テキストの色だけを変更したいので、チェック ボックスのマークは同じままにしておきたいです。

プログラムが実行されているプラ​​ットフォームのデフォルトのチェック ボックス ビットマップを取得できるコマンドはありますか?

(または、チェック ボックスのマークを保持したまま、テキストの色だけを変更するにはどうすればよいでしょうか?)

4

4 に答える 4

4

UxTheme.dll を使用して、カスタム チェックボックスを描画します。

最初に、以下を使用してチェック ボックス マークを描画します

そして、::DrawText を使用して自分でテキストを描画します。

お役に立てば幸いです。

于 2009-09-28T13:39:35.693 に答える
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: DFCS_BUTTONCHECKを指定したDrawFrameControl()を使用すると、デフォルトのチェックボックスビットマップを描画できます。

于 2009-09-28T12:40:19.913 に答える
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|を参照してください。

于 2009-09-28T12:30:36.667 に答える