简介:
被严密封装的MFC应用程序界面开发是一个很大的问题。先从简单的对话框背景设置来说。
可以设置BITMAP图像或者其他格式的图片做为背景。
MFC内置了CImage类来加载和使用各种类型的图片。
简单使用方式如下:在Rect大小的区域用Image来绘制背景。(也可以使用bkImage.BitBlt();bkImage.StretchBlt()等函数来绘制Rect区域)。
- <SPAN style="FONT-SIZE: 18px">CRect rect;
- GetClientRect(rect);
- CPaintDC dc(this);
- CImage bkImage;
- bkImage.Load(_T("res//bg.jpg"));
- bkImage.Draw(dc, rect);
- bkImage.Destroy();</SPAN>
- <span style="font-size: 18px;">CRect rect;
- GetClientRect(rect);
- CPaintDC dc(this);
- CImage bkImage;
- bkImage.Load(_T("res//bg.jpg"));
- bkImage.Draw(dc, rect);
- bkImage.Destroy();</span>
<span style="font-size:18px;">CRect rect;
GetClientRect(rect);
CPaintDC dc(this);
CImage bkImage;
bkImage.Load(_T("res//bg.jpg"));
bkImage.Draw(dc, rect);
bkImage.Destroy();</span>
绘制可以放在OnPaint()(WM_PAINT消息函数)或者OnEraseBkgnd(CDC *pDC)(WM_ERASEBKGND消息函数)中。
其中又遇到两个问题,
第一个问题是在对话框中的每个控件都包含一个自己的背景色,导致出现了下面的问题。
产生原因:
每个控件默认带一个自己的背景色。
解决方法:
将其默认的背景色设置为透明即可。
在WM_CTLCOLOR消息对应的消息处理函数OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)中
然后返回NULL_BRUSH即可。
第二个问题时出现文字重影问题。
绘制完之后会出现字体的重影问题,即文字在更新时旧有的文字没有被清除。如下图:
产生原因:
咱无
解决方法:
对包含该文字的控件在更新文字之前,
先调用ShowWindow(SW_HIDE);
然后等更新文字到控件之后。
再调用ShowWindow(SW_SHOW);
即可解决。
由于我是通过变量关联的控件所以
直接使用
- <SPAN style="FONT-SIZE: 18px">mCurCourseShow.ShowWindow(SW_HIDE);
- mCurCourseShow.SetWindowText(selStr);//selStr为要更新的字符串
- mCurCourseShow.ShowWindow(SW_SHOW);</SPAN>
- <span style="font-size: 18px;">mCurCourseShow.ShowWindow(SW_HIDE);
- mCurCourseShow.SetWindowText(selStr);//selStr为要更新的字符串
- mCurCourseShow.ShowWindow(SW_SHOW);</span>
<span style="font-size:18px;">mCurCourseShow.ShowWindow(SW_HIDE);
mCurCourseShow.SetWindowText(selStr);//selStr为要更新的字符串
mCurCourseShow.ShowWindow(SW_SHOW);</span>
- <SPAN style="FONT-SIZE: 18px">//也可以直接使用
- ((CEdit *)(GetDlgItem(IDC_EDIT)))->ShowWindow(SW_HIDE);
- ((CEdit *)(GetDlgItem(IDC_EDIT)))->SetWindowText(str);
- ((CEdit *)(GetDlgItem(IDC_EDIT)))->ShowWindow(SW_SHOW);</SPAN>
转载至:http://blog.youkuaiyun.com/maturn/article/details/8052244