1.先说说如何更换SDI打开时的默认背景因为SDI任何东东都是通过VIEW类来显示的,所以更改背景显然要在view类里做一些改动在VIEW类中把这个函数重载--OnEraseBkgnd(CDC* pDC)在背景有改动时要执行这个函数,响应WM_ERASEBKGND消息,这个函数默认在cpp中是没有显示出来的,所以你要自己添加。 自己添加重载的代码(各语句含义我不解释了,要那样的话我今晚不用睡觉了)CBitmap bitmap;bitmap.LoadBitmap(m_PictureID);//m_pictureid是BMP图像的ID,即你要显示的背景BITMAP bmp;bitmap.GetBitmap(&bmp);CDC dcCompatible;dcCompatible.CreateCompatibleDC(pDC);dcCompatible.SelectObject(&bitmap);CRect rect;GetClientRect(&rect);//pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);return true; //return CView::OnEraseBkgnd(pDC);//这个不注释有时候会产生有问题好了,你现在就可以用你自己的图片替换默认背景了 2.让用户自己随意选择背景(当然是我们事先准备好的),先往工程中添加要用的图片资源,自己定好各图片的ID,后面要用的我是在主菜单里添加了几个菜单的响应函数以切换背景,当然你自己可以选择其它的方式激发。 a)改app在APP类的头文件里添加一个你自己的VIEW类指针变量m_pActiveView,因为APP头文件里不包含VIEW类的头文件,所以它是不识别这个变量的,因此还要在APP头文件的开头声明一下class C***View;这个变量是指向当前处于活动状态的视图,在SDI中只一个视图,所以m_pActiveView就指向它。在其它类中如果想使用这个变量,先获取全局APP(afxgetapp()),然后就可以使用了。还有一个注意的地方是m_pActiveView放在APP的构造函数中初始化为空,别放在InitInstance()中。 b)改view在OnInitialUpdate()中要给m_pActiveView赋值:((C***App*)AfxGetApp())->m_pActiveView = this;添加一个PUBLIC函数ChangeBk(int pictID),这个在菜单响应函数中要调用到的void C***View::ChangeBk(int pictID)//pictID就是图像的ID{m_PictureID = pictID;CDC* hdc = GetDC();OnEraseBkgnd(hdc);}最后在菜单的响应函数中调用ChangeBk(int pictID),把你想显示的图片的ID作为参数传进去就可以了。不会不知道怎么调用吧,先获取全局APP赋给pApp,然后pApp->m_pActiveView->ChangeBk(IDB_BITMAP_BG);最后改的过程中别忘了在相关类的头文件中添加相应的头文件,否则编译的时候会出一大堆的问题。