我正在尝试使用CButton构建一个所有者绘制的复选框,但由于我只想更改文本颜色,我希望复选框标记保持不变。
是否有一个命令允许我检索运行程序的平台的默认复选框位图?
(或者:我怎么才能只改变文字颜色,保留复选框标记?)
答案 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位图(包括单选按钮,还启用和禁用)