如何将一张小的bmp位图平铺到整个逻辑窗口上。因为我的窗口会出现滚动条,在我拖动滚动条的时候,在超出物理窗口的逻辑区域,位图铺不上去。请告诉我如何在OnDraw()函数中将整个逻辑窗口铺上位图,使得在拖动滚动条的时候也能够出现我的bmp位图背景。

解决方案 »

  1.   

    Bitblt可以把bmp画在窗口了,但是如果bmp比较小要想让它充满窗口就要用StretchBlt把bmp等比缩放咯!!
      

  2.   

    我在OnDraw()中的代码:
    CGraphDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);        
    HBITMAP hBitmap = (HBITMAP) LoadImage(NULL, _T          ("c:\\backgrnd.bmp"), IMAGE_BITMAP,
                        0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
        m_bitmaptest->Attach(hBitmap);   
    if(hBitmap==NULL)
    MessageBox("error");
    BITMAP bm1;
    m_bitmaptest->GetObject(sizeof(BITMAP),&bm1);
    CDC dcImage;
    if (!dcImage.CreateCompatibleDC(pDC))
    return ;
    CBitmap* pOldBitmap = dcImage.SelectObject(m_bitmaptest);  
    CRect rect_t1;
    GetClientRect(&rect_t1);
    for(int wide_x=0;wide_x<rect_t1.right;wide_x+=bm1.bmWidth) 
       for(int wide_y=0;wide_y<rect_t1.bottom;wide_y+=bm1.bmHeight)
    {
    pDC->BitBlt( wide_x, wide_y, bm1.bmWidth, bm1.bmHeight, &dcImage, 0, 0, SRCCOPY );
    }
    dcImage.SelectObject(pOldBitmap);
    DeleteObject(m_bitmaptest->Detach());
      

  3.   

    先GetScrollPosition, 然后在ONDRAGDROP里调OnDraw就可以,用设备坐标画。
      

  4.   

    see the sample below :http://www.codeproject.com/bitmap/graphicsuite.asp
      

  5.   

    设lpszName 是你要加载的位图路径,pDC是显示DC
    则:
        const char* lpszName = "c:\\test.bmp";
        HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL,
                                                lpszName,
                                                IMAGE_BITMAP,
                                                 0,
                                                 0,
                                                  LR_LOADFROMFILE);
        CBitmap bmp;
        bmp.Attach(hBitmap);
        BITMAP bm;
        bmp.GetBitmap(&bm);
        CDC memDC;
        memDC.CreateCompatibleDC(pDC);
        CBitmap *pOldBmp = memDC.SelectObject(&bmp);
        pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&memDC,0,0,SRCCOPY);    memDC.SelectObject(pOldBmp);
    ---------------------------------------
    void CTestListDlg::OnPaint() 
    {
        CPaintDC dc(this); // device context for painting
        
        // TODO: Add your message handler code here
        HBITMAP hBitmap;    hBitmap=(HBITMAP)LoadImage(
          ::AfxGetInstanceHandle(),"res\\background.bmp",
          IMAGE_BITMAP,0,0,
          LR_LOADFROMFILE|LR_CREATEDIBSECTION);
        ASSERT( hBitmap);
        HBITMAP hOldBitmap;
        
        CDC MemDC;
       CRect rect;
       CDC *pDC=this->GetDC();
       MemDC.CreateCompatibleDC(pDC);
       GetClientRect(rect);
       hOldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);
       pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
       MemDC.SelectObject(hOldBitmap);    // Do not call CDialog::OnPaint() for painting messages
    }
      

  6.   

    CBitmap bmp;
      CBrush brush;
      CRect rect;  GetClientRect(&rect);
      bmp.LoadBitmap(IDR_MYBITMAP);//加载位图资源
      brush.CreatePatternBrush(&bmp);
      pDC->FillRect(rect,&brush);