由于在GDI中绘制图片的效率比较高的方法用BitBlt,所以通过滚动条滚动刷新背景图解决方案是添加一个兼容全局的兼容DC m_hdcMem,然后把位图按窗口最大宽度高度来绘制到兼容DC中,如下伪代码:
HDC CXXX::GetMemDC(HDC hDC/*需要绘制此背景图的窗口DC*/)
{
if(!m_hdcMem)
{
m_hdcMem = CreateCompatibleDC(hDC);
HBITMAP hbmpMem = CreateCompatibleBitmap(hDC, m_nBkgroundWidth/*窗口的最大宽度*/, m_nBkgroundHeight/*窗
口的最大高度*/);
m_hOldBkgBitmap = (HBITMAP)SelectObject(m_hdcMem, hbmpMem);
HDC hdcDraw = CreateCompatibleDC(hDC);
HBITMAP hbmpOldDraw = (HBITMAP)SelectObject(hdcDraw, m_hBkgBitmap/*要绘制的位图句柄*/);
BITMAP bmp = {};
GetObject(m_hBkgBitmap,sizeof(BITMAP),&bmp);
SetStretchBltMode(m_hdcMem, HALFTONE);
StretchBlt(m_hdcMem, 0, 0, m_nBkgroundWidth, m_nBkgroundHeight, hdcDraw, \
0, 0, bmp.bmWidth, bmp.bmHei
HDC CXXX::GetMemDC(HDC hDC/*需要绘制此背景图的窗口DC*/)
{
if(!m_hdcMem)
{
m_hdcMem = CreateCompatibleDC(hDC);
HBITMAP hbmpMem = CreateCompatibleBitmap(hDC, m_nBkgroundWidth/*窗口的最大宽度*/, m_nBkgroundHeight/*窗
口的最大高度*/);
m_hOldBkgBitmap = (HBITMAP)SelectObject(m_hdcMem, hbmpMem);
HDC hdcDraw = CreateCompatibleDC(hDC);
HBITMAP hbmpOldDraw = (HBITMAP)SelectObject(hdcDraw, m_hBkgBitmap/*要绘制的位图句柄*/);
BITMAP bmp = {};
GetObject(m_hBkgBitmap,sizeof(BITMAP),&bmp);
SetStretchBltMode(m_hdcMem, HALFTONE);
StretchBlt(m_hdcMem, 0, 0, m_nBkgroundWidth, m_nBkgroundHeight, hdcDraw, \
0, 0, bmp.bmWidth, bmp.bmHei