多语言展示
当前在线:1744今日阅读:103今日分享:49

MFC具有图片背景的主窗口

在主窗口中设置图像背景,让主窗口更加的漂亮
工具/原料

Visual Studio 2010或者Visual C++6.0

方法/步骤
1

新建一个多重文档的MFC应用,工程名字为Image

2

在resourceView中右击Image resources,在弹出的菜单中选择引入命令,弹出引入资源对话框,在文件类型中选择所有文件(*.*),然后选择要加入的背景图片。

3

在弹出的对话框中选择确定。

4

在classview标签中右击Image classes,在弹出的对话框中选择New class命令,弹出的新建类对话框。在那么后输入CImage,在Base class下拉列表中选择generic CWnd类,最后单击确定。

5

右击CImage类,在弹出的菜单中选择Add Windows Message Handler命令,弹出New Windows Message and Handlers for class CImage。在新建Windows消息/事件中选择WM_ERASEBKGND选项,最后单击Add and Edit

6

在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;}

7

右击CImage类,在弹出的菜单中选择Add Windows Message Handler命令,弹出New Windows Message and Handlers for class CImage。在新建Windows消息/事件中选择WM_SIZE选项,最后单击Add and Edit

8

在OnSize(UINT nType, int cx, int cy) 函数中添加一下代码Invalidate();

9

右击CMainFrame类,在弹出的菜单中选择Add Member Variable命令,弹出添加成员变量对话框,然后进行一下设置

10

双击CMainFrame类中的OnCreate()函数,并添加一下代码

11

运行结果如下主窗口中设置图像背景

注意事项

本程序有点复杂需要细心的操作

推荐信息