小弟新手,望各位指教。我在视类的OnDraw中实现如下代码:
CRect rect;
GetClientRect(&rect);
……………………
width = rect.Width();
height = rect.Height();
::StretchDIBits(pDC->GetSafeHdc(),rect.left,rect.top,width,height,0,0,width,height,m_lpDIBits, (LPBITMAPINFO) m_lpBMPHdr,DIB_RGB_COLORS, SRCCOPY);
当图像尺寸大于View的区域时,怎么显示效果是图像的左下角与View窗口左下角重合,而图象其余超出View显示区域的部分隐藏了呢?我觉得应该是左上角重合吧.
请各位指教。多谢。
CRect rect;
GetClientRect(&rect);
……………………
width = rect.Width();
height = rect.Height();
::StretchDIBits(pDC->GetSafeHdc(),rect.left,rect.top,width,height,0,0,width,height,m_lpDIBits, (LPBITMAPINFO) m_lpBMPHdr,DIB_RGB_COLORS, SRCCOPY);
当图像尺寸大于View的区域时,怎么显示效果是图像的左下角与View窗口左下角重合,而图象其余超出View显示区域的部分隐藏了呢?我觉得应该是左上角重合吧.
请各位指教。多谢。
我照这样改还是一样的,因为本身rect.left,rect.top二者肯定都是0
你的问题应该出在这里吧
这里应该是原目标的宽度和高度,而你用了clientrect的宽度和高度。
改为
StretchDIBits(pDC- >GetSafeHdc(),rect.left,rect.top,width,height,0,0,dib.width,dib.height,m_lpDIBits, (LPBITMAPINFO) m_lpBMPHdr,DIB_RGB_COLORS, SRCCOPY);
,m_lpDIBits, (LPBITMAPINFO) m_lpBMPHdr,DIB_RGB_COLORS, SRCCOPY); 第五个到第八个参数应该指向原位图的大小(源矩形大小)
{
CDC *pDC = this->GetDC(); m_MemDC.CreateCompatibleDC(pDC); m_bmp.LoadBitmap(IDB_BMP_BKGND);
m_MemDC.SelectObject(&m_bmp); BITMAP Bitmap;
m_bmp.GetBitmap(&Bitmap); m_nBmpHeight = Bitmap.bmHeight;
m_nBmpWidth = Bitmap.bmWidth; CSize size(m_nBmpWidth,m_nBmpHeight);
SetScrollSizes(MM_TEXT,size); this->ReleaseDC(pDC);
}
{
CDC *pDC = this->GetDC(); m_MemDC.CreateCompatibleDC(pDC); m_bmp.LoadBitmap(IDB_BMP_BKGND);
m_MemDC.SelectObject(&m_bmp); BITMAP Bitmap;
m_bmp.GetBitmap(&Bitmap); m_nBmpHeight = Bitmap.bmHeight;
m_nBmpWidth = Bitmap.bmWidth; CSize size(m_nBmpWidth,m_nBmpHeight);
SetScrollSizes(MM_TEXT,size); this->ReleaseDC(pDC);
}
{
pDC->BitBlt(0,0,m_nBmpWidth,m_nBmpHeight,
&m_MemDC,0,0,SRCCOPY); SetScrollSizes(MM_TEXT, CSize(m_nBmpWidth,m_nBmpHeight));
CChildFrame *pParentFrame =
(CChildFrame *)this->GetParentFrame();
pParentFrame->RecalcLayout();
ResizeParentToFit(); }
shunruo 的说法不对吧,因为我的位图不是资源加载的,是根据文件构建的DIB。