小弟想用Cximage类加载png图片做双缓冲遇到些麻烦,读入图片没有问题,显示在屏幕上也没有问题,但是一做成双缓冲就有问题了。想法:小弟的想法是用CxImage a.load(...)读入图片-->OnPaint函数里用a.draw()画到-->HDC mem_hDC上-->BitBlt函数画到m_hDC上。OnPaint代码如下:
HBITMAP hbmpPaint, oldBmp;
hbmpPaint = CreateCompatibleBitmap(m_hDC, SCREEN_WIDTH, SCREEN_HEIGHT);
oldBmp = (HBITMAP)SelectObject(mem_hDC, hbmpPaint); mem_hDC = CreateCompatibleDC(mem_hDC);
a.Draw(mem_hDC,0,0,480,720,0);
BitBlt(m_hDC, 0, 0, 480, 720, mem_hDC, 0, 0, SRCCOPY);
HBITMAP hbmpPaint, oldBmp;
hbmpPaint = CreateCompatibleBitmap(m_hDC, SCREEN_WIDTH, SCREEN_HEIGHT);
oldBmp = (HBITMAP)SelectObject(mem_hDC, hbmpPaint); mem_hDC = CreateCompatibleDC(mem_hDC);
a.Draw(mem_hDC,0,0,480,720,0);
BitBlt(m_hDC, 0, 0, 480, 720, mem_hDC, 0, 0, SRCCOPY);
??
{
// TODO: Add your message handler code here and/or call default
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);//DeleteDC needed
//
CreateCompatibleDC '产生兼容DC',和谁兼容?和()内的pDC兼容。
所以:
mem_hDC = CreateCompatibleDC(mem_hDC);//产生和自己兼容的DC ??
是错的,你必须找到源dc。
又如:
HBITMAP CopyScreenToBitmap(CRect &Rect,HWND hwnd)
{
HDC hScrDC, hMemDC;
HBITMAP hOldBitmap,hBitmap;
int xScrn, yScrn;
// to screen coordinates.
MapWindowPoints(hwnd,NULL,(POINT *)&Rect,2);
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL); hMemDC = CreateCompatibleDC(hScrDC);
m_hDC和hdcPaint;现在小弟想用cximage自带的draw函数,把图片画到hdcPaint里面,再用
BitBlt(m_hDC, 0, 0, 480, 720, mem_hDC, 0, 0, SRCCOPY);函数将图片显示到屏幕上,请问是否可行?
hdcPaint.CreateCompatibleDC(pDC);//DeleteDC needed
//pDC 函数入口参数
OnPiant正确代码如下:
/*创建缓存DC和兼容位图*/
HDC hdcPaint = CreateCompatibleDC(m_hDC);
HBITMAP hbmpPaint = CreateCompatibleBitmap(m_hDC, SCREEN_WIDTH, SCREEN_HEIGHT);
SelectObject(hdcPaint, hbmpPaint);
a.Draw();
BitBlt(m_hDC, 0, 0, 480, 720, hdcPaint, 0, 0, SRCCOPY);//双缓冲机制