社区
界面
帖子详情
改变了底色的文本控件为什么不能刷新?
fly_woman
2003-04-10 05:20:42
我在 OnCtlColor 函数中修改了一个静态控件的底色和文本色,可是在修改文本内容时不刷新了,如果原来的内容是 “123”,改成“12”后,显示的还是“123”
如果原来的内容是“12”,却可是改成“13”,这是为什么?
在线等待,一定给分的!!!!!!!!!
...全文
112
9
打赏
收藏
改变了底色的文本控件为什么不能刷新?
我在 OnCtlColor 函数中修改了一个静态控件的底色和文本色,可是在修改文本内容时不刷新了,如果原来的内容是 “123”,改成“12”后,显示的还是“123” 如果原来的内容是“12”,却可是改成“13”,这是为什么? 在线等待,一定给分的!!!!!!!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
重恢的宽度
Static背景和颜色 更改
自己编写的 可以实现
改变
static空间背景色和字体色的 类 希望对学习VC的 同志有帮助
c# 实现Prograssbar
改变
颜色及添加进度百分比
c# 实现Prograssbar
改变
颜色及添加进度百分比,之前的那个用dev
控件
了,有的人打不开
動態 UI 改變, 在畫面直接改變圖案和
底色
動態 UI 改變, 在畫面直接改變圖案和
底色
, Win32 程式
CListCtrl封装的
改变
颜色的类
CListCtrl封装的
改变
颜色的类,可以自己随意设置颜色,留出了专门的接口函数
Edit control 修改背景色.rar_CHECK 背景颜色_EDIT CONTROL_oldestehz_编辑;_背景色
通过check box的选择,
改变
edit
控件
的背景色,颜色可编辑
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章