我想在指定的客户区rcDst(例如rect大小为(0,0,100,100))缩放显示位图rcSrc(例如rect大小为(0,0,50,50)),结果显示出现了问题:向上滚动窗口图像却向下滚动,但没有上下颠倒。而且如果进行缩小显示的时候,不能显示。
部分代码如下:
BOOL CDibImage::ImShow(CDC *pDC, const CRect *rcDst, const CRect *rcSrc)
{
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap bitmap;
bitmap.Attach(m_hBitmap);
CBitmap* pOldBmp = MemDC.SelectObject(&bitmap);
CPalette pal;
pal.Attach(m_Pal);
CPalette* pOldPal = pDC->SelectPalette(m_pPalette, TRUE);
pDC->RealizePalette(); CBrush brush(GetSysColor(COLOR_WINDOW));
CBrush* oldbrush = pDC->SelectObject(&brush);
CPen pen(PS_SOLID,1,GetSysColor(COLOR_WINDOW));
CPen* oldpen = pDC->SelectObject(&pen);
BOOL bSuccess;/* if ((RECTWIDTH(rcDst) == RECTWIDTH(rcSrc)) &&(RECTHEIGHT(rcDst) == RECTHEIGHT(rcSrc)))
bSuccess = pDC->BitBlt(rcDst->left,rcDst->top,rcDst->Width(),rcDst->Height(),&MemDC,rcSrc->left,rcSrc->top,SRCCOPY);
else
*/ bSuccess = pDC->StretchBlt(rcDst->left,rcDst->top,rcDst->Width(),rcDst->Height(), &MemDC,rcSrc->left,rcSrc->top,rcSrc->Width(),rcSrc->Height(),SRCCOPY);
MemDC.SetMapMode(pDC->GetMapMode());
MemDC.SetWindowExt(pDC->GetWindowExt());
MemDC.SetViewportExt(pDC->GetViewportExt());
MemDC.SetWindowOrg(rcDst->left, rcDst->top);
MemDC.SelectObject(pOldBmp);
pDC->SelectPalette(pOldPal, TRUE);
bitmap.Detach();
pal.Detach();
return bSuccess;
}偶是菜鸟啦,第一次接触内存DC绘图,还望高手来挣分啦!!
部分代码如下:
BOOL CDibImage::ImShow(CDC *pDC, const CRect *rcDst, const CRect *rcSrc)
{
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap bitmap;
bitmap.Attach(m_hBitmap);
CBitmap* pOldBmp = MemDC.SelectObject(&bitmap);
CPalette pal;
pal.Attach(m_Pal);
CPalette* pOldPal = pDC->SelectPalette(m_pPalette, TRUE);
pDC->RealizePalette(); CBrush brush(GetSysColor(COLOR_WINDOW));
CBrush* oldbrush = pDC->SelectObject(&brush);
CPen pen(PS_SOLID,1,GetSysColor(COLOR_WINDOW));
CPen* oldpen = pDC->SelectObject(&pen);
BOOL bSuccess;/* if ((RECTWIDTH(rcDst) == RECTWIDTH(rcSrc)) &&(RECTHEIGHT(rcDst) == RECTHEIGHT(rcSrc)))
bSuccess = pDC->BitBlt(rcDst->left,rcDst->top,rcDst->Width(),rcDst->Height(),&MemDC,rcSrc->left,rcSrc->top,SRCCOPY);
else
*/ bSuccess = pDC->StretchBlt(rcDst->left,rcDst->top,rcDst->Width(),rcDst->Height(), &MemDC,rcSrc->left,rcSrc->top,rcSrc->Width(),rcSrc->Height(),SRCCOPY);
MemDC.SetMapMode(pDC->GetMapMode());
MemDC.SetWindowExt(pDC->GetWindowExt());
MemDC.SetViewportExt(pDC->GetViewportExt());
MemDC.SetWindowOrg(rcDst->left, rcDst->top);
MemDC.SelectObject(pOldBmp);
pDC->SelectPalette(pOldPal, TRUE);
bitmap.Detach();
pal.Detach();
return bSuccess;
}偶是菜鸟啦,第一次接触内存DC绘图,还望高手来挣分啦!!
解决方案 »
- CListCtrl::InsertItem(int,LPCTSTR,int) 为什么只能依次的插入行 不能隔行插啊? 在线等 有好的回答立刻结贴
- 求 动态语法分析编辑器的思路,类似vb.net那样.语法输错,马上提示
- 请问如何才能获取网页里applet中的数据?
- 如何知道一个声明为inline的函数在编译时真的是以inline方式编译的?
- pConn->realease()异常,pConn->close()正常?
- 菜鸟求救:Console Application 转为dll 的问题
- 如何删除呢?
- SQL多表查询
- 不是高手就不要进(200分问题)
- dll 注册不了?
- How to reset the size and position of controls in OnSize()?
- 7月専家榜
MemDC.SetMapMode(pDC->GetMapMode());
MemDC.SetWindowExt(pDC->GetWindowExt());
MemDC.SetViewportExt(pDC->GetViewportExt());
MemDC.SetWindowOrg(rcDst->left, rcDst->top);把这些去掉试试,,为什么要用这个?
你把坐标都给改了,我估计是这个问题!有些时候确实需要这么做,但是只显示个图片用不着!
MemDC.SetMapMode(pDC->GetMapMode());
MemDC.SetWindowExt(pDC->GetWindowExt());
MemDC.SetViewportExt(pDC->GetViewportExt());
MemDC.SetWindowOrg(rcDst->left, rcDst->top);3.
"对于一些比较大(3000*2000)的图像,放大10倍以上的时候,重绘整个ScrollView会很长时间,所以我想根据客户区的大小和ScrollView的位置,计算出应该显示图像的哪个部分,再进行放大显示。"这个想法没什么问题,你的问题可能出现在1中。