【提问】Label文字重叠的问题(顶者有分)

ljn398431 2011-11-04 05:33:48
我是用的OnCtlColor设置的初始化字体颜色和透明背景
HBRUSH CVirtualEarthquakePlayDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if (nCtlColor==CTLCOLOR_STATIC)

{
pDC-> SetTextColor(RGB(0,0,0)); //字体颜色
pDC-> SetBkMode(TRANSPARENT); //设置字体背景为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH);


} return hbr;

然后设置一个Timer在Timer里实现字体的变换颜色的功能
if (m_leid == 1)
{
if((BST_CHECKED==((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck())
&&m_ckey)
{
m_ckey = 0;
m_ld3.SetTextColor(RGB(255,0,0));
}
else
{
m_ckey = 1;
m_ld3.SetTextColor(RGB(0,0,0));
}
}

然后在CLabel类里的SetTextColor函数代码如下
CLabel& CLabel::SetTextColor(COLORREF crText)
{
m_crText = crText;
RedrawWindow();
return *this;
}

然后问题出现了,当SetTimer后 字体没有来回变色 而是重叠在一起了。。。黑红黑红的。。。 求大侠帮忙
...全文
309 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljn398431 2011-11-07
  • 打赏
  • 举报
回复
求助啊~~
ljn398431 2011-11-06
  • 打赏
  • 举报
回复
自己顶下 求解
ljn398431 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 kaile 的回复:]
每次更新显示后,都Invalidate刷新一下
[/Quote]Invalidate也试过了不好使啊、、、、
Kaile 2011-11-06
  • 打赏
  • 举报
回复
每次更新显示后,都Invalidate刷新一下
schlafenhamster 2011-11-05
  • 打赏
  • 举报
回复
上传到你的资源,大家帮你看看。
ljn398431 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hai296 的回复:]
感觉你的CLabel& CLabel::SetTextColor(COLORREF crText)这函数写的有问题,好像要加上
pDC-> SetTextColor(m_crText );//字体颜色
pDC-> SetBkMode(TRANSPARENT); //设置字体背景为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH);


……
[/Quote]Clabel里有OnCtlColor这个函数有这几句话 但是当我把对话框里的OnCtlColor函数去掉还是会出现重叠现象
ljn398431 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hai296 的回复:]
感觉你的CLabel& CLabel::SetTextColor(COLORREF crText)这函数写的有问题,好像要加上
pDC-> SetTextColor(m_crText );//字体颜色
pDC-> SetBkMode(TRANSPARENT); //设置字体背景为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH);


……
[/Quote]Clabel里有这句话
ljn398431 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 heksn 的回复:]
pDC-> SetTextColor(RGB(0,0,0)); //字体颜色
pDC-> SetBkMode(TRANSPARENT); //设置字体背景为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH);

这些放到你的CLabel中
[/Quote]放到CLabel里也不好使啊。。。 对了我的label控件是放在一个图片上面的
xhb296 2011-11-04
  • 打赏
  • 举报
回复
感觉你的CLabel& CLabel::SetTextColor(COLORREF crText)这函数写的有问题,好像要加上
pDC-> SetTextColor(m_crText );//字体颜色
pDC-> SetBkMode(TRANSPARENT); //设置字体背景为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH);



凌乱哥 2011-11-04
  • 打赏
  • 举报
回复
pDC-> SetBkMode(TRANSPARENT); //设置字体背景为透明
这句去掉看看。。还有,这句不是设置字体背景,是设置Label的背景,两者还是有区别的
yuucyf 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 ljn398431 的回复:]
我是用的OnCtlColor设置的初始化字体颜色和透明背景

C/C++ code
HBRUSH CVirtualEarthquakePlayDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

……
[/Quote]
CVirtualEarthquakePlayDlg::OnCtlColor中的Code绑到CLabel的CtlColor中.
  • 打赏
  • 举报
回复
pDC-> SetTextColor(RGB(0,0,0)); //字体颜色
pDC-> SetBkMode(TRANSPARENT); //设置字体背景为透明
return (HBRUSH)::GetStockObject(NULL_BRUSH);

这些放到你的CLabel中
ljn398431 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fandh 的回复:]
没有刷新背景!是不是刷新背景被你干掉了?
[/Quote]RedrawWindow();
这个不是么
fandh 2011-11-04
  • 打赏
  • 举报
回复
没有刷新背景!是不是刷新背景被你干掉了?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧