Static控件背景透明时文字覆盖问题的解决方案

Static控件背景透明时文字覆盖问题的解决方案

(2009-11-06 15:21:24)
标签:

透明文字覆盖

it

分类: VC

 

HateMath

 

引子:

    我泡论坛的时间并不长,但印象中已经有好多次在VC区看到类似这样的问题,而且经常议之未果:


请问
static控件设置透明后,再更改文字时会与之前的文字覆盖,怎么解决
pDC->SetBkMode(TRANSPARENT);
设置透明后,要改变控件的文字就会发生文字重叠,如果不使用透明就不会,
请问在透明状态下改变文字如何不发生重叠?

起初不以为意,闲暇时自己试了一下,发现:文本确实有重叠。如下图(为了更好的说明问题,我特意设置了背景和前景色):



初步探究其原因,猜想应该是static
控件的背景没有得到及时刷新。

那就好办了,解决办法:强制刷新。

方法1:GetDlgItem(IDC_STATIC)->UpdateWindow();

无效...
方法2:GetDlgItem(IDC_STATIC)-> RedrawWindow();

无效.......
方法3:GetDlgItem(IDC_STATIC)-> Invalidate ();
无效.........

方法4:还不行?来点小技巧

SetDlgItemText(IDC_STATIC, "             ");//多用几个空格,把原先的文本”冲”掉

SetDlgItemText(IDC_STATIC, "TEST");

郁闷了…….


难道这么个小问题要用高级的方法搞?


这个问题困扰了我好几天,终于在一次上WC时突然顿悟:static的背景已经是透明的了,那么残留的文本应该是画在static的父窗口上的。顿悟之后就是感叹:自己真笨啊。


办法有了:在给static
设置新的文本之后(不是之前!)刷新父窗口。

void CTestStaticDlg::OnTimer(UINT nIDEvent)

{

       CString strTime;

       CTime time = CTime::GetCurrentTime();

       strTime = time.Format("%y年%m月%d日 %H:%M:%S");

 

       GetDlgItem(IDC_STATIC)->SetWindowText(strTime);

       GetDlgItem(IDC_STATIC)->GetParent()->RedrawWindow(); //就这两句话而已,呵呵

       CDialog::OnTimer(nIDEvent);

}

编译运行,K.O.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值