1、绘制时机优化
问题:
把读图像文件的方法放在了OnDraw之中,发现拖动滚动条闪烁的很严重,原因在于ScrollBar拖动时会产生消息激活OnDraw,这样的话,每拖动滚动条就读一次文件,重绘一次,效率低下
解决方案:
更换图像后调用UpdateAllViews,内存DC的绘制都放在OnUpdate中操作,在内存绘制好后再在屏幕中贴图。
m_pOldBitmap = m_memDC.SelectObject(&m_memBitmap);
m_memDC.FillSolidRect(0,0,2000,2000,RGB(100,100,100));
CString pStrFullPath = pDoc->m_pStrPath + pDoc->m_pStrName;
USES_CONVERSION;
LPWSTR
lpwStr = A2W(pStrFullPath);
Image img(lpwStr
);
pDoc->m_nWidth = img.GetWidth();
pDoc->m_nHeight = img.GetHeight();
Graphics g(m_memDC.GetSafeHdc()); //此处只有为了试验GDI+,完全可以直接使用GDI来绘制
g.DrawImage(&img,25,55,img.GetWidth(),img.GetHeight());