之前的做法是在要加载背景图片的地方放一个Picture控件,然后在Picture控件上放图片,这样有个问题就是刷新的时候,加载的图片会把Pictuer控件位置上的控件遮挡住。后来才用下面的方法:首先给要加载背景的窗口添加WM_ERASEBKGND消息响应函数OnEraseBkgnd。代码如下:
- BOOL CDlgMain::OnEraseBkgnd(CDC* pDC)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- CImage image;
- image.Load(_T("./res/top.png"));
- image.Draw(pDC->m_hDC,0,0,image.GetWidth(),image.GetHeight());
- //ReleaseDC(pDC);
- return TRUE;
- //return CDialog::OnEraseBkgnd(pDC);
- }
说明:CImage是ATL实现的类,里面对图片的加载时通过GDI+实现的,所以使用该类要先包含atlimage.h头文件,Draw函数有多种形式,重写该方法时一定要注释return CDialog::OnEraseBkgnd(pDC),否者会调用CDialog中的该方法重新画背景,使我们上面画的背景没用。而且,我觉得应该加上 ReleaseDC(pDC),否者会CDC指针没有释放,本来想进CDialog类看下OnEraseBKgnd的实现,看其是否释放的,但找好好久都看不到该类的实现。CImage类目前好像不支持jpg的图片。
阅读(8483) | 评论(0) | 转发(0) |