对话框如何添加背景图??
解决方案 »
- 用什么方法可以把文件(如图片)变成字符串,还能把字符串变成原文件?
- 程序调试时,如何随时打开自己做的界面啊?
- 用GDI+打开图像时不支持中文路径怎么办?
- 今天朋友介绍我来这个网站~很高兴啊!散分!顺便做点事~~~
- 对话框CDialog类的的一个对象,用DoModal()弹出后,是否会启动一个线程.
- 求助高手:如何取得系统所安装的所有应用程序呀?
- 跪求MFC蓝牙编程实例!!在线等
- 请师傅们求教Windows程序设计第五版414页
- FindWindow()和FindWindowEx(),,有什么区别,他们应该怎么用啊,里面参数怎么写有例子嘛
- VC++6升级VCSP4时不成功,打不开Access 2000的mdb文件。
- 如何使用 Microsoft chart control(oledb)编程的问题
- 谁知道是wdl(程序教程)什末格式。用什末浏览.
问题是这样产生的.在OnEraseBkGnd中,如果你不调用原来缺省
的OnEraseBkGnd只是重画背景则不会有闪烁.而在OnPaint里面,
由于它隐含的调用了OnEraseBkGnd,而你又没有处理OnEraseBkGnd
函数,这时就和窗口缺省的背景刷相关了.缺省的
OnEraseBkGnd操作使用窗口的缺省背景刷刷新背景(一般情况
下是白刷),而随后你又自己重画背景造成屏幕闪动.
另外一个问题是OnEraseBkGnd不是每次都会被调用的.如果你
调用Invalidate的时候参数为TRUE,那么在OnPaint里面隐含
调用BeginPaint的时候就产生WM_ERASEBKGND消息,如果参数
是FALSE,则不会重刷背景.
所以解决方法有三个半:
1.用OnEraseBkGnd实现,不要调用原来的OnEraseBkGnd函数.
2.用OnPaint实现,同时重载OnEraseBkGnd,其中直接返回.
3.用OnPaint实现,创建窗口时设置背景刷为空
4.用OnPaint实现,但是要求刷新时用Invalidate(FALSE)这样
的函数.(不过这种情况下,窗口覆盖等造成的刷新还是要闪一
下,所以不是彻底的解决方法)
都挺简单的
在OnInitDialog()中加
bmpBackground.LoadBitmap(IDB_BACKGROUND);//IDB_BACKGROUND是你自己的图对应的ID
再OnPaint()中加上如下代码:
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc); BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
1、向对话框中拖入Picture控件
2、导入做为背景的位图,ID不妨为:IDB_BACKGROUND
3、选择Picture控件,修改其属性,类型改为Bitmap,Image下拉框中选择IDB_BACKGROUND
4、调整适合的尺寸。OK了。