首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么设置Cstatic及其子控件背景色

2012-09-28 
如何设置Cstatic及其子控件背景色我在对话框上建立了一个Cstatic0,然后再cstatic上又放了两个Cstatic,分别

如何设置Cstatic及其子控件背景色
我在对话框上建立了一个Cstatic0,然后再cstatic上又放了两个Cstatic,分别极为1和2,这两个是子控件,我希望这三个Cstatic的背景色都为白色,我在对话框上添加响应消息OnCtlColor,在里面作如下判断,但是只有Cstatic0背景色变,
  if (nCtlColor == CTLCOLOR_STATIC )
  {
  pDC->SetBkMode(TRANSPARENT);
  // Return handle to our CBrush object
  pDC->SetTextColor(RGB(0, 0, 255));
  hbr=(HBRUSH)::GetStockObject(DKGRAY_BRUSH); 
  }
关系为:
Cstatic0为对话框的子控件,Cstatic1,2为Cstatic0的子控件,我现在不想派生新类,该如何解决呢,使三个背景色都变。

[解决办法]
if(nCtlColor == CTLCOLOR_STATIC )
{
pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkColor(RGB(255,255,255));
HBRUSH b=CreateSolidBrush(RGB(255,255,255));
return b;
}

[解决办法]
把你的判断条件修改一下:
 WM_CTLCOLOR 消息响应函数中应该还有一个参数可用就是 窗口句柄 。
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{
if(pWnd->GetDlgCtrlID()==IDC_RADIO_RECT)
{
pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkColor(RGB(255,255,255));
return (HBRUSH)m_brushBk.GetSafeHandle();
}
}
把刷子声明为成员变量,这样会防止泄漏GDI对象句柄。你可以检测你进程的GDI 引用句柄数量
来求证,(window 资源管理器就可以看)析构函数中释放刷子句柄
[解决办法]
if(pWnd->GetDlgCtrlID()==IDC_RADIO_RECT ||
。。。。。。。)
{
pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkColor(RGB(255,255,255));
HBRUSH b=CreateSolidBrush(RGB(255,255,255));//这里会泄漏GDI资源,建议使用成员变量,析构函数中释放刷子句柄。
return b;
}



[解决办法]
Static0 要派生自CStatic
在派生类中:
if (nCtlColor == CTLCOLOR_STATIC )
这是对子Static而言。

热点排行