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

动态改变控件颜色和文本颜色有关问题

2012-04-05 
动态改变控件颜色和文本颜色问题各位大侠,我现在在OnCtlColor中添加了如下代码if (pWnd-GetDlgCtrlID()

动态改变控件颜色和文本颜色问题
各位大侠,我现在在OnCtlColor中添加了如下代码
if (pWnd->GetDlgCtrlID()==IDC_SANQIANSHUI)
  {
if (State[10]==2)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(255,0,0));
  return m_RedBrush;
}
else if (State[10]==1)
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(0,255,0));
  return m_GreBrush;
}
else
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(119,119,119));
  return m_GrayBrush;
}
  }
其中IDC_SANQIANSHUI为一静态控件ID,State[10]为一整形变量,它在Invalidate调用之前改变,然后系统调用OnCtlColor,可是除了初始的颜色外,一直没有改变

[解决办法]
HBRUSH XXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == IDC_XXX)
{
if (XXX)
{
pDC->SetTextColor(RGB(255,0,0));
}
}
return hbr;
}
程序里扣了段出来。。没问题啊。。
[解决办法]
lz 
OnCtlColor只在开始的时候相应一次
按你的意思是要根据不同的状态来改变控件的颜色
你应该在变量改变的时候发送WM_CTLCOLOR消息
让其响应其他状态
[解决办法]
状态改变之后调用Invalidate。

调试跟踪一下看代码是否执行。
[解决办法]
OnCtlColor只在开始的时候一次运行,后面是不会运行的。

既然用变量控制,那么就要发送WM_CTLCOLOR,然后刷新看效果

热点排行