改变了底色的文本控件为什么不能刷新?

fly_woman 2003-04-10 05:20:42
我在 OnCtlColor 函数中修改了一个静态控件的底色和文本色,可是在修改文本内容时不刷新了,如果原来的内容是 “123”,改成“12”后,显示的还是“123”
如果原来的内容是“12”,却可是改成“13”,这是为什么?
在线等待,一定给分的!!!!!!!!!
...全文
106 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ukyoking 2003-04-11
  • 打赏
  • 举报
回复
不过也很好解决
if(ctlId == IDC_STATIC1){
pDC->SetTextColor(RGB(255,255,0)); //改变字体的颜色
pDC->SetBkColor(RGB(18,91,162));
CRect rc;
pWnd->GetClientRect(&rc);
pDC->FillSolidRect(&rc,RGB(18,91,162));
return HBRUSH(GetStockObject(HOLLOW_BRUSH));
}
这样就可以了
ukyoking 2003-04-11
  • 打赏
  • 举报
回复
就是 webber84(***闭关修炼中***) 说的原因
webber84 2003-04-10
  • 打赏
  • 举报
回复
当你调用SetWindowText改变static的内容时,系统要先用你选定的brush去把以前的内容擦掉,然后再绘制新的内容。由于你给static设置了一个HOLLOW_BRUSH,也就是一个中空的刷子,结果原来的内容根本就刷不掉,造成的结果就是如果你新设置的标题比原来的长,就能看到效果;如果比原来短,那么以前的内容就有一部分被留下来;像你说的就是一种极端的情况,新的标题是老标题的子串,结果你感觉标题根本就没有改变。
我给你改了一下:

HBRUSH CDLGDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
int ctlId;
ctlId = pWnd->GetDlgCtrlID();
if(ctlId == IDC_STATIC_FRAMERATE)
{
pDC->SetTextColor(RGB(255,255,0)); //改变字体的颜色
pDC->SetBkMode(TRANSPARENT); 透明的字符背景
return HBRUSH(CreateSolidBrush(RGB(18,91,162)));
}
return hbr;
}
shilong 2003-04-10
  • 打赏
  • 举报
回复
我也遇到过同样的问题
解决方法有两上
1.重载CStatic,当然这要麻烦不少

2.把Static换成Edit,同样也可以显示信息
而EDIT在改了颜色后可以刷新
fly_woman 2003-04-10
  • 打赏
  • 举报
回复
ukyoking(东方不败)
我试了您的方法,但是更新后的文本在无文字显示的地方底色成了白色,而不是我设置的颜色,您还有别的办法吗?
谢谢!!
fly_woman 2003-04-10
  • 打赏
  • 举报
回复
代码如下:

HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here int ctlId;
int ctlId;
ctlId = pWnd->GetDlgCtrlID();

if(ctlId == IDC_STATIC_FRAMERATE){
pDC->SetTextColor(RGB(255,255,0)); //改变字体的颜色
pDC->SetBkColor(RGB(18,91,162));
return HBRUSH(GetStockObject(HOLLOW_BRUSH));
}

// TODO: Return a different brush if the default is not desired
return hbr;
}

void CMyDlg::OnTimer(UINT nIDEvent)
{
GetDlgItem(IDC_STATIC_FRAMERATE)->SetWindowText(strFrameRate);//strFrameRate是个字符串变量
}

如何修改?敬请指教,谢谢!!
webber84 2003-04-10
  • 打赏
  • 举报
回复
会有这种事?你的代码呢?
ukyoking 2003-04-10
  • 打赏
  • 举报
回复
在OnCtlColor中调用
pWnd->Invalidate();
pWnd->UpdateWindow();
winphoenix 2003-04-10
  • 打赏
  • 举报
回复
重恢的宽度

15,979

社区成员

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

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