关于网友提出的“ 改变了底色的文本控件为什么不能刷新?”问题疑问,本网通过在网上对“ 改变了底色的文本控件为什么不能刷新?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 改变了底色的文本控件为什么不能刷新?
描述: 我在 OnCtlColor 函数中修改了一个静态控件的底色和文本色,可是在修改文本内容时不刷新了,如果原来的内容是 “123”,改成“12”后,显示的还是“123”
如果原来的内容是“12”,却可是改成“13”,这是为什么?
在线等待,一定给分的!!!!!!!!!
解决方案1: 不过也很好解决
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));
}
这样就可以了
解决方案2: 当你调用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;
}
以上介绍了“ 改变了底色的文本控件为什么不能刷新?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2777928.html