社区
界面
帖子详情
改变了底色的文本控件为什么不能刷新?
fly_woman
2003-04-10 05:20:42
我在 OnCtlColor 函数中修改了一个静态控件的底色和文本色,可是在修改文本内容时不刷新了,如果原来的内容是 “123”,改成“12”后,显示的还是“123”
如果原来的内容是“12”,却可是改成“13”,这是为什么?
在线等待,一定给分的!!!!!!!!!
...全文
106
9
打赏
收藏
改变了底色的文本控件为什么不能刷新?
我在 OnCtlColor 函数中修改了一个静态控件的底色和文本色,可是在修改文本内容时不刷新了,如果原来的内容是 “123”,改成“12”后,显示的还是“123” 如果原来的内容是“12”,却可是改成“13”,这是为什么? 在线等待,一定给分的!!!!!!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
重恢的宽度
基础语法篇_10——设置对话框、颜色对话框、字体对话框、示例对话框、
改变
对话框和
控件
的背景及
文本
颜色、位图显示
文章目录一、简单绘图二、设置对话框...⭕⭕1)首先为此程序添加一个子菜单,菜单名称为“绘图”; ⭕⭕2)为其添加四个子菜单项,分别用来控制不同图形的绘制。当用户选择其中的一个菜单项后,程序将按照当前的选...
Qt
控件
使用方法技巧合集
Qt
控件
使用方法合集
多个线程异步修改ListView中每一行的
控件
的样式(颜色,背景等)
一个原则,通过Handler接收到需要修改
控件
状态的事件后,通过修改与ListView匹配的数据列表中某个状态,然后调用notifyDataSetChanged(),从getView中判断该状态修改对应
控件
的样式即可,不要试图将
控件
保存下来,...
解决透明static
控件
后
刷新
问题
我相信很多VC程序员,都用...但是static
控件
改变
之后,就会照成
控件
不
刷新
的问题。 HBRUSH CStadus::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlCol
15. 修改 static
控件
背景颜色 和 文字颜色
当 static
控件
或具有 ES_READONLY 风格的 edit
控件
被绘制时,会向父窗口发送 WM_CTLCOLORSTATIC 消息。...也就是说,
改变
static
控件
的背景颜色只有这一种方式,就是处理 WM_CTLCOLORSTATIC 消息。WM_CTLCOLORSTA...
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章