如何获取默认复选框图像?

时间:2009-09-28 12:20:02

标签: c++ mfc checkbox cbutton

我正在尝试使用CButton构建一个所有者绘制的复选框,但由于我只想更改文本颜色,我希望复选框标记保持不变。

是否有一个命令允许我检索运行程序的平台的默认复选框位图?

(或者:我怎么才能只改变文字颜色,保留复选框标记?)

4 个答案:

答案 0 :(得分:4)

我使用UxTheme.dll绘制我的自定义复选框。

首先我使用以下方法绘制复选框标记:DrawThemeBackground将修改后的矩形传递给它(checkboxRect.right = pCustomDraw-> rc.left + 15;)

然后我使用:: DrawText自己绘制文本。

我希望它有所帮助。

答案 1 :(得分: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|

答案 2 :(得分: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()将允许您绘制默认复选框位图。

答案 3 :(得分:0)

获取Windows系统复选框图像(我想是这样的问题):

LoadBitmap(0,OBM_CHECKBOXES);

会将位图句柄返回到所有复选框的4x3位图(包括单选按钮,还启用和禁用)