VC2008下的checkbox,算bug吗?

ssneptune 2010-05-31 06:03:40
我刚刚安装了VC2008+sp1,出现了这样一个问题:创建一个对话框,上面添加了若干控件,创建类CDlgTest,然后将基类修改为CDialogEx(这个类是VC2008下出现的),在OnInitDialog()函数中,调用函数:SetBackgroundColor(RGB(255,255,255));运行程序,其他控件正常,背景色也改为了白色,但是checkbox有问题,背景色是黑色。基类CDialogEx相关代码如下:
afxdialogex.cpp文件中
HBRUSH CDialogEx::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if (m_brBkgr.GetSafeHandle() != NULL || m_hBkgrBitmap != NULL)
{
#define AFX_MAX_CLASS_NAME 255
#define AFX_STATIC_CLASS _T("Static")
#define AFX_BUTTON_CLASS _T("Button")

if (nCtlColor == CTLCOLOR_STATIC)
{
TCHAR lpszClassName [AFX_MAX_CLASS_NAME + 1];

::GetClassName(pWnd->GetSafeHwnd(), lpszClassName, AFX_MAX_CLASS_NAME);
CString strClass = lpszClassName;

if (strClass == AFX_STATIC_CLASS)
{
pDC->SetBkMode(TRANSPARENT);
return(HBRUSH) ::GetStockObject(HOLLOW_BRUSH);
}

if (strClass == AFX_BUTTON_CLASS)
{
// if ((pWnd->GetStyle() & BS_GROUPBOX) == 0)
{
pDC->SetBkMode(TRANSPARENT);
}

return(HBRUSH) ::GetStockObject(HOLLOW_BRUSH);
}
}
}

return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}

我在CDlgTest作如下修改:
创建OnCtlColor函数,复制代码,同时

return(HBRUSH) ::GetStockObject(HOLLOW_BRUSH);
修改为
return (HBRUSH)m_brBkgr.GetSafeHandle();
问题解决。
但是这样的话,每个有checkbox的类,都要重写一遍,请问一下,大家有什么好办法吗?
...全文
99 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-06-08
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
soswaidao 2010-05-31
  • 打赏
  • 举报
回复
这个不算bug

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧