改变了底色的文本控件为什么不能刷新? 我在 OnCtlColor 函数中修改了一个静态控件的底色和文本色,可是在修改文本内容时不刷新了,如果原来的内容是 “123”,改成“12”后,显示的还是“123”如果原来的内容是“12”,却可是改成“13”,这是为什么?在线等待,一定给分的!!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在OnCtlColor中调用pWnd->Invalidate();pWnd->UpdateWindow(); 代码如下: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是个字符串变量}如何修改?敬请指教,谢谢!! ukyoking(东方不败) 我试了您的方法,但是更新后的文本在无文字显示的地方底色成了白色,而不是我设置的颜色,您还有别的办法吗? 谢谢!! 我也遇到过同样的问题解决方法有两上1.重载CStatic,当然这要麻烦不少2.把Static换成Edit,同样也可以显示信息 而EDIT在改了颜色后可以刷新 当你调用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;} 就是 webber84(***闭关修炼中***) 说的原因 不过也很好解决 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)); } 这样就可以了 怎么把列表框的内容显示在编辑框 ERP开发, 开发工具选择 请教个文件指针移动的问题 VC怎么实现桌面监视呀?急死了啊 初学者请教:怎样用好MSDN 关于自定义消息 问一个CDialogBar的美化的问题 怎么样用vc调用vb并传递参数 内存分配问题,malloc(),virtualalloc(),heapalloc()等这些函数有什么区别?我通常都用MALLOC的,其他的几乎不用,那么其他的函数在什么 VC高手们请进!!! 关于Common Dialog的简单问题 初学vc请好心人推荐几本好书?????????
pWnd->Invalidate();
pWnd->UpdateWindow();
{
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是个字符串变量
}如何修改?敬请指教,谢谢!!
我试了您的方法,但是更新后的文本在无文字显示的地方底色成了白色,而不是我设置的颜色,您还有别的办法吗?
谢谢!!
解决方法有两上
1.重载CStatic,当然这要麻烦不少2.把Static换成Edit,同样也可以显示信息
而EDIT在改了颜色后可以刷新
我给你改了一下: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;
}
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));
}
这样就可以了