如果你想按下按钮就换一张位图,就应该在view中捕获WM_KEYDOWN消息,并在其响应函数中编辑代码,具体过程就不用多说了吧? 至于你说使用Invalidate()以后位图消失,是因为用了该函数以后将会发生窗口重绘工作,你写的代码并不在onpaint 这个消息响应函数下吧,也就是说窗口重绘以后,你的代码就失效了,所以就不能显示位图!
//在对话框内显示位图 void CShowBmpInDlgDlg::ShowBmpInDlg() { CBitmap hbmp; HBITMAP hbitmap; //装载资源 MM.bmp是我的一个文件名,用你的替换 hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),"MM.bmp", IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); hbmp.Attach(hbitmap); //获取图片格式 BITMAP bm; hbmp.GetBitmap(&bm); CDC dcMem; dcMem.CreateCompatibleDC(GetDC()); CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp); CRect lRect; GetClientRect(&lRect); lRect.NormalizeRect(); //显示位图 GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(), &dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY); dcMem.SelectObject(&poldBitmap); }