VS2010解决对话框设置背景图片和文字重叠问题

内容:MFC基于对话框的项目设置背景图片以及解决设置对话框背景之后导致文字重叠(叠影)问题。

简介:

被严密封装的MFC应用程序界面开发是一个很大的问题。先从简单的对话框背景设置来说。

可以设置BITMAP图像或者其他格式的图片做为背景。

MFC内置了CImage类来加载和使用各种类型的图片。

简单使用方式如下:在Rect大小的区域用Image来绘制背景。(也可以使用bkImage.BitBlt();bkImage.StretchBlt()等函数来绘制Rect区域)。

[css] view plain copy print ?
  1. <SPAN style="FONT-SIZE: 18px">CRect rect;  
  2. GetClientRect(rect);  
  3. CPaintDC dc(this);  
  4. CImage bkImage;  
  5. bkImage.Load(_T("res//bg.jpg"));  
  6. bkImage.Draw(dc, rect);  
  7. bkImage.Destroy();</SPAN>  

绘制可以放在OnPaint()(WM_PAINT消息函数)或者OnEraseBkgnd(CDC *pDC)(WM_ERASEBKGND消息函数)中。

其中又遇到两个问题,

第一个问题是在对话框中的每个控件都包含一个自己的背景色,导致出现了下面的问题。

VS2010解决对话框设置背景图片和文字重叠问题_第1张图片

产生原因:

每个控件默认带一个自己的背景色。

解决方法:

将其默认的背景色设置为透明即可。

在WM_CTLCOLOR消息对应的消息处理函数OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)中

pDC->SetBkMode(TRANSPARENT);

然后返回NULL_BRUSH即可。


第二个问题时出现文字重影问题。

绘制完之后会出现字体的重影问题,即文字在更新时旧有的文字没有被清除。如下图:

产生原因:

咱无

解决方法:

对包含该文字的控件在更新文字之前,

先调用ShowWindow(SW_HIDE);

然后等更新文字到控件之后。

再调用ShowWindow(SW_SHOW);

即可解决。

由于我是通过变量关联的控件所以

直接使用

[cpp] view plain copy print ?
  1. <SPAN style="FONT-SIZE: 18px">mCurCourseShow.ShowWindow(SW_HIDE);  
  2. mCurCourseShow.SetWindowText(selStr);//selStr为要更新的字符串  
  3. mCurCourseShow.ShowWindow(SW_SHOW);</SPAN>  

[cpp] view plain copy print ?
  1. <SPAN style="FONT-SIZE: 18px">//也可以直接使用  
  2. ((CEdit *)(GetDlgItem(IDC_EDIT)))->ShowWindow(SW_HIDE);  
  3.   
  4. ((CEdit *)(GetDlgItem(IDC_EDIT)))->SetWindowText(str);  
  5.   
  6. ((CEdit *)(GetDlgItem(IDC_EDIT)))->ShowWindow(SW_SHOW);</SPAN>  

 

转载至:http://blog.csdn.net/maturn/article/details/8052244

你可能感兴趣的:(VS2010解决对话框设置背景图片和文字重叠问题)