绘制操作
m_hSrcBitmap = CreateCompatibleBitmap(m_hdc, m_rcSrcMem.right, m_rcSrcMem.bottom);
m_hdcSrcMem = CreateCompatibleDC(m_hdc);
m_hOldSel = SelectObject(m_hdcSrcMem,m_hSrcBitmap);
m_pImage->Draw(m_hdcSrcMem,&m_rcSrcMem,NULL);
//m_pImage 为 IImage
OnPaint()里面
PAINTSTRUCT ps;
m_hdc = BeginPaint(m_hSlide, &ps); if(m_bIsInitialized && m_hdc && m_hdcSrcMem)
{
RECT rect = {0};
GetClientRect(m_hSlide, &rect);
FillRect(m_hdc, &rect, reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH)));
StretchBlt(m_hdc,
m_rcThumbnail.left,
m_rcThumbnail.top,
m_rcThumbnail.right - m_rcThumbnail.left,
m_rcThumbnail.bottom - m_rcThumbnail.top,
m_hdcSrcMem,
m_rcSrcMem.left,
m_rcSrcMem.top,
m_rcSrcMem.right - m_rcSrcMem.left,
m_rcSrcMem.bottom - m_rcSrcMem.top,
SRCCOPY);
RETAILMSG(1, (TEXT("CPicture::ShowEx() Paint1111 \r\n")));
}
EndPaint(m_hSlide, &ps);为什么这样子还会有闪烁?
把WM_ERASEBKGND直接返回TRUE则没有闪烁,但是OnPaint() FillRect里面则没起作用了。
我是想实现一张图片小的时候点击它一下然后变成全屏的,所以必须填充一个整个窗口
大家有什么办法吗?
m_hSrcBitmap = CreateCompatibleBitmap(m_hdc, m_rcSrcMem.right, m_rcSrcMem.bottom);
m_hdcSrcMem = CreateCompatibleDC(m_hdc);
m_hOldSel = SelectObject(m_hdcSrcMem,m_hSrcBitmap);
m_pImage->Draw(m_hdcSrcMem,&m_rcSrcMem,NULL);
//m_pImage 为 IImage
OnPaint()里面
PAINTSTRUCT ps;
m_hdc = BeginPaint(m_hSlide, &ps); if(m_bIsInitialized && m_hdc && m_hdcSrcMem)
{
RECT rect = {0};
GetClientRect(m_hSlide, &rect);
FillRect(m_hdc, &rect, reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH)));
StretchBlt(m_hdc,
m_rcThumbnail.left,
m_rcThumbnail.top,
m_rcThumbnail.right - m_rcThumbnail.left,
m_rcThumbnail.bottom - m_rcThumbnail.top,
m_hdcSrcMem,
m_rcSrcMem.left,
m_rcSrcMem.top,
m_rcSrcMem.right - m_rcSrcMem.left,
m_rcSrcMem.bottom - m_rcSrcMem.top,
SRCCOPY);
RETAILMSG(1, (TEXT("CPicture::ShowEx() Paint1111 \r\n")));
}
EndPaint(m_hSlide, &ps);为什么这样子还会有闪烁?
把WM_ERASEBKGND直接返回TRUE则没有闪烁,但是OnPaint() FillRect里面则没起作用了。
我是想实现一张图片小的时候点击它一下然后变成全屏的,所以必须填充一个整个窗口
大家有什么办法吗?
这个也可以缓存到内存设备中去.否则你在屏幕dc上做了两次
要么在m_hdcSrcMem上绘,要么放在在函数StretchBlt后面一行,
当然了,你既然用来双缓冲,还是
FillRect(m_hdcSrcMem, &rect, reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH)));
m_hSrcBitmap = CreateCompatibleBitmap(m_hdc, m_rcSrcMem.right, m_rcSrcMem.bottom);
m_hdcSrcMem = CreateCompatibleDC(m_hdc);
m_hOldSel = SelectObject(m_hdcSrcMem,m_hSrcBitmap);
RECT rect = {0};
GetClientRect(m_hSlide, &rect);
int nFillRet = FillRect(m_hdcSrcMem, &rect, reinterpret_cast<HBRUSH>(GetStockObject(BLACK_BRUSH)));
RETAILMSG(1, (TEXT("CPicture::Load() Fill rect:%d--%d-%d-%d-%d \r\n"),nFillRet,
rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top));
RETAILMSG(1, (TEXT("CPicture::Load() Draw rect:%d-%d-%d-%d \r\n"),
m_rcSrcMem.left, m_rcSrcMem.top, m_rcSrcMem.right - m_rcSrcMem.left, m_rcSrcMem.bottom - m_rcSrcMem.top));
m_pImage->Draw(m_hdcSrcMem,&m_rcSrcMem,NULL);
m_hSrcBitmap = CreateCompatibleBitmap(m_hdc, m_rcSrcMem.right, m_rcSrcMem.bottom);
这个Bitmap只有m_rcSrcMem这么大?这个m_rcSrcMem是你m_pImage的大小吧?应该小于Client Rect的大小吧?那么你的FillRect的效果另外OnPaint和OnEraseBkgnd呢?怎么写的?
m_hSrcBitmap = CreateCompatibleBitmap(m_hdc, m_rcSrcMem.right, m_rcSrcMem.bottom);
这个Rect的是不是传得不对。
这是OnPaint的代码:
PAINTSTRUCT ps;
m_hdc = BeginPaint(m_hSlide, &ps); if(m_bIsInitialized && m_hdc && m_hdcSrcMem)
{
StretchBlt(m_hdc,
m_rcThumbnail.left,
m_rcThumbnail.top,
m_rcThumbnail.right - m_rcThumbnail.left,
m_rcThumbnail.bottom - m_rcThumbnail.top,
m_hdcSrcMem,
m_rcSrcMem.left,
m_rcSrcMem.top,
m_rcSrcMem.right - m_rcSrcMem.left,
m_rcSrcMem.bottom - m_rcSrcMem.top,
SRCCOPY);
RETAILMSG(1, (TEXT("CPicture::ShowEx() FillRect(m_hdcSrcMem) Paint1111 \r\n")));
}
EndPaint(m_hSlide, &ps)OnEraseBkgnd 直接返回TRUE
> 请大家移步这里 http://topic.csdn.net/u/20100805/18/31121f9c-cc3e-4960-b568-e7f092e5a96b.html?61483