刚开始用StretchDIBits函数,有些地方不明白,请高手指点
                     X1X2
                     X3X4我将512x512 的图像分为如上图所示四块。我固定屏幕显示位置仅在X1块,当我在内存中指定X1块的数据在屏幕X1中显示时,能够在正确位置显示,可是如果我指定内存中X4块的数据在屏幕X1显示时,却在X4块显示,这是怎么回事,我并没改动DC 的显示位置坐标,块大小一样,没有缩放。

解决方案 »

  1.   

    我在文档的OnReceiver事件中,给DC的m_rectDC 和DIB的 m_rectDIB  赋值,然后触发视图Ondraw(),将图像(512x512)右上四分之一块显示在屏幕左上角,可结果却显示在屏幕右下角。现贴上CMYDoc::OnReceive()和CMYView::Ondraw()主要代码。
    CMYDoc::OnReceive()
    {
      m_rectDC.left = 0;
      m_rectDC.top = 0;
      m_rectDC.right = 256;
      m_rectDC.bottom = 256;  m_rectDIB.left = 256;
      m_rectDIB.top = 256;
      m_rectDIB.right = 512;
      m_rectDIB.bottom = 512;
      pMYView->Invalidate(TRUE);
      pMYView->UpdateWindow();
    }CMYView::Ondraw(CDC* pDC)
    {
      CMYDoc *pDoc = GetDocument();
      lpDCRect = pDoc->m_rectDC;
      lpDIBRect = pDoc->m_rectDIB;
      bSuccess = ::StretchDIBits(pDC->m_hDC,                          // hDC
       
                                lpDCRect>left,                 // DestX
                       lpDCRect>top,                  // DestY
       
                                RECTWIDTH(lpDCRect),            // nDestWidth
     
                                RECTHEIGHT(lpDCRect),           // nDestHeight                    lpDIBRect>left,                // SrcX
                       lpDIBRect>top,                 // SrcY
      
                                RECTWIDTH(lpDIBRect),           // wSrcWidth
       
                                RECTHEIGHT(lpDIBRect),          // wSrcHeight
                       lpDIBBits,                      // lpBits
       
                                (LPBITMAPINFO)lpDIBHdr,         // lpBitsInfo
                       DIB_RGB_COLORS,                 // wUsage
                       SRCCOPY);                       // dwROP