Visual Studio 2010或者Visual C++6.0
新建一个多重文档的MFC应用,工程名字为Image
在resourceView中右击Image resources,在弹出的菜单中选择引入命令,弹出引入资源对话框,在文件类型中选择所有文件(*.*),然后选择要加入的背景图片。
在弹出的对话框中选择确定。
在classview标签中右击Image classes,在弹出的对话框中选择New class命令,弹出的新建类对话框。在那么后输入CImage,在Base class下拉列表中选择generic CWnd类,最后单击确定。
右击CImage类,在弹出的菜单中选择Add Windows Message Handler命令,弹出New Windows Message and Handlers for class CImage。在新建Windows消息/事件中选择WM_ERASEBKGND选项,最后单击Add and Edit
在OnEraseBkgnd(CDC* pDC)函数中添加一下代码BOOL CImage::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default CRect rectbk; // 客户区的大小 CDC dcMen; // 内存设备描述表 CBitmap bmbk; // 位图对象 bmbk.LoadBitmap(IDB_BITMAP1); // 从资源加载位图 bitmap // 得到位图bitmap的大小 BITMAP stBitmap; bmbk.GetObject(sizeof(BITMAP),&stBitmap); CSize bmsize(stBitmap.bmWidth,stBitmap.bmHeight); //////// dcMen.CreateCompatibleDC(pDC); // 创建兼容的设备描述表 // 选入新的位图对象并保存旧的位图对象 CBitmap *pold=dcMen.SelectObject(&bmbk); GetClientRect(&rectbk); // 取得客户区的大小 // 从内存向屏幕复制位图对象 pDC->StretchBlt(rectbk.left,rectbk.top,rectbk.Width(), rectbk.Height(),&dcMen,0,0,bmsize.cx,bmsize.cy,SRCCOPY); dcMen.SelectObject(pold); // 恢复旧的位图对象 dcMen.DeleteDC(); // 释放内存设备描述表 return true;}
右击CImage类,在弹出的菜单中选择Add Windows Message Handler命令,弹出New Windows Message and Handlers for class CImage。在新建Windows消息/事件中选择WM_SIZE选项,最后单击Add and Edit
在OnSize(UINT nType, int cx, int cy) 函数中添加一下代码Invalidate();
右击CMainFrame类,在弹出的菜单中选择Add Member Variable命令,弹出添加成员变量对话框,然后进行一下设置
双击CMainFrame类中的OnCreate()函数,并添加一下代码
运行结果如下主窗口中设置图像背景
本程序有点复杂需要细心的操作