也就是把一个图片作为背景显示在SDI的客户区时,因为图片太大,只能显示一部分
就把客户区给填满了,怎么才能让这个图片全部显示在SDI的客户区?
当程序界面的大小改变时,这个图片也会随着改变大小,但是保持全部显示在SDI的
客户区.

解决方案 »

  1.   

    在onDraw()方法中,用StretchBlt该api函数就可以了
      

  2.   

    给文档类加一个public CBitmap m_bmpBitmap;
    然后在某个适当的地方加上:
    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);
      

  3.   

    路上的这段代码可以!就是用StrechBlt高定!
      

  4.   

    在视类中添加消息映射函数OnEraseBkgnd
    然后添加代码如下:
    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;
    }
      

  5.   

    如果是对于位图,我这儿有一个类。
    要显示在整个client区域,如果是做背景,那么就可以在OnEraseBkground上操作,这样闪烁感就可以减少很多。不要在OnDraw中绘图。