调用一个图形渲染函数接口画了一个图形,由于无法用双缓存(解释起来很麻烦),所以,画出的图形比较抖.
我的想法很简单,希望能够获取当前的绘制窗体CMyWnd上的像素,将它保存在内存DC中再画出来.这样的话,虽然第一次
载入的时候会比较抖,但至少接下来的,我就可以利用上双缓存了.
因此,我的问题在于,如何将一个窗体上的图象信息记录到内存DC上来,希望高手解答!!谢谢!!
我的想法很简单,希望能够获取当前的绘制窗体CMyWnd上的像素,将它保存在内存DC中再画出来.这样的话,虽然第一次
载入的时候会比较抖,但至少接下来的,我就可以利用上双缓存了.
因此,我的问题在于,如何将一个窗体上的图象信息记录到内存DC上来,希望高手解答!!谢谢!!
//将图形画到一个隐藏的窗体上
pWnd->ShowWindow(SW_HIDE);
//由于这个DrawEx依赖于一个窗口句柄,使得事情变得很麻烦
BOOL b = m_pAcroPDPage->DrawEx((long)pWnd->m_hWnd,NULL, pRect.m_lpDispatch,
short(m_pOrigin.x) - 100,short(m_pOrigin.y), m_dZoom);
//创建关于该窗体的画布,内存DC
CDC *dc = pWnd->GetDC();
if(m_Bmp.GetSafeHandle())
m_Bmp.DeleteObject();
m_Bmp.CreateCompatibleBitmap(dc,m_cRect.Width(),m_cRect.Height());
if( m_dcMemory.GetSafeHdc() == NULL )
m_dcMemory.CreateCompatibleDC(dc);
::SelectObject(m_dcMemory.GetSafeHdc(),m_Bmp.GetSafeHandle());
//系统DC打印出来
pDC->BitBlt(0, 0, m_cRect.Width(), m_cRect.Height(), &m_dcMemory, 0, 0, SRCCOPY);
pWnd->ReleaseDC(dc);麻烦高手看看,这样的思路可行吗??
如果按照你的设想,实现步骤是这样:
1、创建窗口dc兼容的内存dc
2、创建跟窗体尺寸一致的位图,选入内存dc
3、从窗口bitblt到内存
4、在内存dc上做图
5、从内存bitblt到窗口或者你换个方式试试:创建一个兼容位图,把它选入窗口dc,调用渲染函数绘制,之后选出并保存该位图,以后用的时候就直接把这个位图bitblt到窗口