也就是把一个图片作为背景显示在SDI的客户区时,因为图片太大,只能显示一部分
就把客户区给填满了,怎么才能让这个图片全部显示在SDI的客户区?
当程序界面的大小改变时,这个图片也会随着改变大小,但是保持全部显示在SDI的
客户区.
就把客户区给填满了,怎么才能让这个图片全部显示在SDI的客户区?
当程序界面的大小改变时,这个图片也会随着改变大小,但是保持全部显示在SDI的
客户区.
解决方案 »
- 跨平台多线程读取和写入的问题
- 急!MFC CListCtrl控件怎么实现透明效果?急,在线等
- 求助,串口通讯,如何动态设置校验位?
- 树控件的问题?急!在线等!
- directshow的问题~~分都问完没了!乐于助人的朋友来帮个忙!!谢谢了先!
- 高手请进,如何屏蔽WINDOWS对鼠标和键盘的响应????急
- 高手请进!-----关于CString与BYTE相互转化的问题!
- 请问如何给窗口加载背景图?
- 请问用SHELLEXCUTE执行命令行程序,怎么样才能等待外部程序执行完,才继续呢?
- 怎么用vc6.0抓取百度百科词库中所有词语?
- 如何用installshield6.3打包用vc生成的应用程序??
- 你是Win32 Application高手?
然后在某个适当的地方加上:
HBITMAP hBitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"YourFilePathName",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
m_bmpBitmap.Attach(hBitmap);
在视图类的OnDraw()中加上:
BITMAP bm;
pDoc->m_bmpBitmap.GetBitmap(&bm);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap=(CBitmap*)dcMem.SelectObject(pDoc- >m_bmpBitmap);
CRect lRect;
GetClientRect(lRect);
lRect.NormalizeRect();
pDC->StretchBlt(0,0,lRect.Width(),lRect.Height(),&dcMem,0,0,bm.bmWidth ,bm.bmHeight,
SRCCOPY);
然后添加代码如下:
BOOL C****View::OnEraseBknd(CDC* pDC)
{
CBitmap bmpBackGroud;
VERIFY(bmpBackGroud.LoadBitmap(IDB_BACKGROUND));
BITMAP bm;
bmpBackGround.GetObject(sizeof(BITMAP),&bm);
RECT clientRect;
GetClientRect(&clientRect);
CPoint point(clientRect.left,clientRect.top);
CSize size(clientRect.right,clientRect.bottom);
CDC memDC;
VERIFY(memDC.CreateCompatibleDC(pDC));
CBitmap* pOldBmp=memDC.SelectObject(&bmpBackGround);
ASSERT(pOldBmp!=NULL);
pDC->StretchBlt(point.x,point.y,size.cx,size.cy,&memDC,0,0,bmWidth-1,bm.bmHeight-1,SRCOPY);
VERIFY(memDC.SelectObject(pOldBmp));
bmpBackGround.DeleteObject();
return TRUE;
}
要显示在整个client区域,如果是做背景,那么就可以在OnEraseBkground上操作,这样闪烁感就可以减少很多。不要在OnDraw中绘图。