2019独角兽企业重金招聘Python工程师标准>>>

关于Static控件背景透明时文本覆盖重影的问题

通过映射OnCtlColor消息,而后在该函数中使用pDC->SetBkMode(TRANSPARENT)使Static控件背景透明时会出现:文本覆盖重影的问题,当改变控件的文本就会发生新文本与旧文本重叠的现象。 
        可以通过以下方式使Static控件文本在透明状态下改变时不会产生文本重叠问题:
        1、由于Static控件的背景已经是透明的了,那么旧文本应该是画在Static控件的父窗口上的。
        2、在给Static控件设置新文本之后(不是之前!)刷新父窗口即可。例如:
                GetDlgItem(IDC_STATIC_TEST)->SetWindowText(_T("北京2008")); 
                GetDlgItem(IDC_STATIC_TEST)->GetParent()->RedrawWindow();
                IDC_STATIC_TEST为控件ID号。
        3、用上面方法刷新的是整个父窗口客户区,界面会闪烁,可以只刷Static控件所在的RECT区域,就不会闪烁了。

我相信很多VC程序员,都用过OnCtlColor来改变控件的底色,字体颜色等。但是static控件改变之后,就会照成控件不刷新的问题。

HBRUSH CStadus::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here

if (nCtlColor == CTLCOLOR_STATIC)

{

pDC->SetTextColor(RGB(0, 0, 0));//设置成你背景的颜色

pDC->SetBkMode(0);//透明

return (HBRUSH)::GetStockObject(NULL_BRUSH);

}

// TODO: Return a different brush if the default is not desired

return hbr;

}

通过上述代码使static控件实现透明效果,但是这时候通过setWindowText()改变static控件的内容时,会发现出现了文字重叠在一起,调用次数越多,重叠越严重,黑成一团。研究了老久,终于找到解决方法。

方法1RedrawWindow();

在控件需要改变文字的代码后面加入这个函数即可,如下:

GetDlgItem(IDC_STATIC)->SetWindowText("your string");

GetDlgItem(IDC_STATIC)->GetParent()->RedrawWindow();

GetDlgItem(IDC_STATIC)->SetWindowText("your string");

GetDlgItem(IDC_STATIC)->GetParent()->RedrawWindow();

这个方法比较奏效,但是有时候窗口刷新太频繁,一闪一闪,效果不太好。幸好有高人指点,可以用局部刷新来实现。

方法2:局部刷新

可以自定义一个函数如下:

void YourDlg::RefreshControl(UINT uCtlID)

{

CRect    rc;

GetDlgItem(uCtlID)->GetWindowRect(&rc);

ScreenToClient(&rc);

InvalidateRect(rc);

}

方法3:隐藏和显示

m_BrightStatic.ShowWindow(SW_HIDE);
   m_BrightStatic.ShowWindow(SW_SHOW);

void YourDlg::RefreshControl(UINT uCtlID)

{ CRect rc;

GetDlgItem(uCtlID)->GetWindowRect(&rc);

ScreenToClient(&rc); InvalidateRect(rc

方法4 用空白位置填充

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

SetDlgItemText(IDC_STATIC, "TEST");

方法四:

Redrawwindow();//可以防止窗口刷新次数过多 推荐用

转载于:https://my.oschina.net/ypimgt/blog/61106

关于Static控件背景透明时文本覆盖重影的问题相关推荐

  1. MFC 加入背景图片并让控件背景透明

    /*加入背景图片*/ BOOL CTOOLDlg::OnEraseBkgnd(CDC* pDC) {  // TODO: 在此加入消息处理程序代码和/或调用默认值  CDialog::OnEraseB ...

  2. MFC 设置static(标签)控件背景透明

    1.设置控件的属性Transparent 为True 2.重载OnCtlColor函数 在该函数体中加入以下代码: if(pWnd->GetDlgCtrlID() == IDC_XXXX) // ...

  3. 【转】修改static控件背景颜色和文字颜色

    当 static 控件或具有 ES_READONLY 风格的 edit 控件被绘制时,会向父窗口发送 WM_CTLCOLORSTATIC 消息.如果我们在窗口过程中处理该消息,就必须返回一个画刷句柄, ...

  4. C++ MFC深入详解之----设置控件背景透明

    首先要添加OnCtlColor函数 1.该函数在VC++中的添加方法为:快捷键Ctrl+W或右击空白处打开ClassWizard对话框(也可以菜单->view->ClassWizard), ...

  5. VC设置CEdit控件背景透明、文字背景也透明

    开发环境:VC6, a dialog based MFC application. 主界面: 为对话框添加WM_CTLCOLOR消息响应函数: HBRUSH CDDlg::OnCtlColor(CDC ...

  6. VC 控件背景透明、文字背景透明

    Visual C++  开发实战宝典 功能:位图上显示文字,背景透明. void CP400Dlg::OnPaint()  { .... CBitmap bmp; bmp.LoadBitmap(IDB ...

  7. 设置控件背景背景颜色为透明

    有时候,我们需要将控件的背景颜色设定为透明,比如说label(标签)控件.那么,如何将控件的背景颜色设定为透明?是不是只要将控件的BackColor属性设为Transparent(透明)就可以了呢?答 ...

  8. C# Winform控件对透明图片重叠时导致图片不透明的解决方法

    C# Winform控件对透明图片重叠时导致图片不透明的解决方法 参考文章: (1)C# Winform控件对透明图片重叠时导致图片不透明的解决方法 (2)https://www.cnblogs.co ...

  9. 将winform的PictureBox/panel控件背景图多余白边设置为透明

    有关如何将winform的PictureBox控件背景图多余白边设置为透明 如图所示: PictureBox控件如果直接这样叠加,原本png图片没有像素的边角会变成白色填充 只需要设置该图片的父容器为 ...

最新文章

  1. 【Qt】Qt再学习(六):Qt中JSON保存和加载的示例
  2. Windows2003利用×××+NAT+静态路由表建立网通电信双线×××服务器
  3. sqlite3API函数
  4. 前端学习(543):npm包管理
  5. 向oracle表空间添加一个数据文件命令
  6. python hook_python_理解篇_钩子方法的理解
  7. android实现号码归属地,Android 如何获取手机号码归属地
  8. 数据库-Linux系统下的命令
  9. 越混越差的十个原因,看看你有没有?
  10. 各年龄段都是怎么提加薪的?
  11. 西瓜笔记(五上)--线性模型
  12. 云计算之Docker
  13. 让信息带钩的六种武器——《让创意更有黏性》优秀读后感4300字
  14. 南信大 计算机与软件学院 校花,美哭了!南京12所高校最美“校花”新鲜出炉!颜值爆表!你的母校上榜了吗?...
  15. 和外国bi相比,国产bi软件更适合中国企业
  16. upp(统一流程平台)项目范围说明书
  17. Android自定义ImageView圆角
  18. 野火i.MX6ULL Pro开发板构建根文件系统
  19. chatGPT研究-(一)使用入门及Access Denied打不开问题解决
  20. Springboot2.x集成ES7.x

热门文章

  1. 小能量汇聚成大能量_清体能量棒配料解析:小种子,大能量,藜麦和青稞
  2. 利用多个域名来存储网站资源
  3. android+多米音乐+自动播放,android 高仿多米音乐播放器
  4. python ui自动化配置文件,Python+Selenium进行UI自动化测试项目中,常用的小技巧2:读取配置文件(configparser,.ini文件)...
  5. python中easygui最新下载教程_python怎么下载easygui
  6. python服务器搭建nginx_Nginx简单快速搭建文件服务器
  7. E数据结构实验之查找五:平方之哈希表
  8. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
  9. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-02-基于Python的卷积运算
  10. Spring - Java/J2EE Application Framework 应用框架 第 9 章 DAO支持