MFC解决Static控件背景透明时文本覆盖重影

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

CRect rtlbl; 
GetDlgItem(nID)->GetWindowRect(&rtlbl); 
ScreenToClient(&rtlbl); //转到客户端界面
InvalidateRect(&rtlbl);//最后刷新对话框背景 
UpdateWindow();

时间: 2024-10-02 01:00:07

MFC解决Static控件背景透明时文本覆盖重影的相关文章

VIS MFC的Static控件如何进行涂色?

问题描述 VIS MFC的Static控件如何进行涂色? 想做一个选择颜色的对话框,已经按照大神的方法放好了static,着色又不会了.能不能给出具体的代码,谢谢! 解决方案 void CApp2Dlg::OnButton1() { // TODO: Add your control notification handler code here CColorDialog colorDia; if (colorDia.DoModal() == IDOK) { m_color = colorDia.

MFC对于static控件在界面上的绘图操作,绘图的擦除

问题描述 MFC对于static控件在界面上的绘图操作,绘图的擦除 用MFC语言画图,每次绘图的时候自动擦除之前的图像,用的是什么函数呢? 解决方案 强制刷新客户区,然后画上新的图形,自然就把原来的清除掉了.http://www.cppblog.com/tx7do/archive/2010/02/27/108564.html 解决方案二: Invalidate(TRUE); 解决方案三: 在static控件上绘图(一)

MFC对于static控件在界面上的绘图操作,绘图的擦除操作

问题描述 MFC对于static控件在界面上的绘图操作,绘图的擦除操作 在MFC中画波纹图,需要先事先擦除旧的数据,具体的函数调用是什么? 解决方案 在Static控件上画图的方法.. 声明两个变量在view或Dialog的头文件中. CWnd* pWnd; //表示控件窗口的变量 CDC* pControlDC; //表示控件窗口的设备描述表.DC 在OnInitialUpdate()函数中进行赋值(View) pWnd=GetDlgItem(IDC_STATICRCT); pControlD

请教关于button控件背景透明的问题

问题描述 大家好.我用PictureBox控件作为视频显示输出,并将其中的button控件做透明处理,相关操作包括:Button1.FlatStyle=Popup,Button1.Parent=PictureBox1,Button1.BackColor=Color.Transparent.通过为PictureBox添加背景图片,Button能够实现透明显示,效果如预期.但通过PictureBox显示视频时,Button效果无法实现.视频实现仅有现成函数可以调用,代码如下:MVStartGrabW

C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法_C#教程

本文实例讲述了C# WinForm控件对透明图片重叠时出现图片不透明的简单解决方法.分享给大家供大家参考,具体如下: 在Winform中如果将一个透明图片放在窗体上能正常显示透明,但是如果将该图片放在另一个控件上会导致不能显示透明效果. 解决这种情况,可以采取在控件上使用GDI+绘画出透明图片. 这里我们就以一个pictureBox2控件上面重叠一张png透明图片为例: 我们只需要给pictureBox2控件添加Paint事件,然后对png透明图片进行绘制即可,代码如下: private voi

MFC交叉绘图的问题,两个static控件

问题描述 MFC交叉绘图的问题,两个static控件 MFC交叉绘图的问题,现在有两个static控件,有两个cfile数据,每个数据要分别更新一个控件,那么怎么设计呢? 解决方案 参考这个现成的代码http://blog.csdn.net/saloon_yuan/article/details/7935328 解决方案二: 不太明白你说的交叉是什么意思? 是同时启两个线程,分别读写文件,然后更新static吗? 在非UI线程中,不能访问UI控件 要用PostMessage(),UI类中添加消息

如何解决“呈现控件时出错”的问题

在制作控件的时候容易遇到" 呈现控件时出错"" 发生了未处理的异常.未将对象引用设置到对象 的实例." 这样的错误,如下图:( 也有可能仅仅只是因为未设置runat="server" 标签而导致该错误, 请先检查该项.) 但是在编译时/ 运行时也都是没有错误的. 分析 如图所示的情况我们称之为" 设计时" 以区别于" 编译时"/" 运行时" . 设计时 :在ASP.NET 环境中也就是当

一起谈.NET技术,如何解决“呈现控件时出错”的问题

Webpart部署后在SPD中打开显示呈现控件时出错,后查到这篇文章,主要问题是在CreateChildControls中调用了this.page.Header,在设计视图时,该对象可能还不存在,以后编码时要注意在CreateChildControls尽量不调用数据库/文件系统读取.变量未附初值.调用了类似Page的属性如Session,Page.Request.QueryString等. 在制作控件的时候容易遇到呈现控件时出错发生了未处理的异常.未将对象引用设置到对象的实例.这样的错误,如下图

mscomm控件 接收数据-VS2010 MFC 的MSCOMM 控件 的Get_Input()函数读取不到缓存中的数据

问题描述 VS2010 MFC 的MSCOMM 控件 的Get_Input()函数读取不到缓存中的数据 各位高手好,小弟在使用VS2010 MFC 的MSCOMM 控件时出现了一个问题: 就是在OnComm函数里调用的Get_Input()函数读取不到缓存中的数据,经过验证,发现当接收区缓存数据不为0时程序能触发OnComm消息,可是当程序运行到Get_Input()函数时,OnComm()函数仿佛就直接从Get_Input()函数返回了,后面的代码也没有运行.同时,由于Get_Input()函