读书人

如何用HDC完成双缓冲绘图。

发布时间: 2013-03-17 13:48:31 作者: rapoo

求救,怎么用HDC完成双缓冲绘图。。。。
HDC hMemDC;
HDC hDC,tDC;//这两个全为全局变量,只在这里放入了。
HBITMAP hbitmap,Membmp;
BITMAP bm;

RECT rcWnd;
// 获取子窗口的绘图区域
::GetWindowRect(hwnd, &rcWnd);

// 计算子窗口绘图区域的宽度和高度
int nWidth = rcWnd.right - rcWnd.left;
int nHeight = rcWnd.bottom - rcWnd.top;


tDC=GetWindowDC(hwnd);
hDC=CreateCompatibleDC(tDC);
hMemDC=CreateCompatibleDC(hDC);


hbitmap=LoadBitmap(m_hInstance,MAKEINTRESOURCE(ID));
Membmp=CreateCompatibleBitmap(hDC,nWidth,nHeight);
SelectObject(hDC,Membmp);
SelectObject(hMemDC,hbitmap);
GetObject(hbitmap,sizeof(BITMAP),(LPBYTE)&bm);

BitBlt(hDC,x,y,bm.bmWidth,bm.bmHeight,hMemDC,0,0,SRCCOPY);

//打算在其他地方调用这一步。方便问问题就暂时放进来了。
BitBlt(tDC,0,0,512,640,hDC,0,0,SRCCOPY);

DeleteDC(hMemDC);
DeleteObject(Membmp);
DeleteObject(hbitmap);
ReleaseDC(hwnd,hDC);

打算弄一个函数在内存里画图,然后再用另一个函数一次性绘在屏幕上,以解决屏幕闪的问题。
结果窗口什么都没。。求大神帮助。。困这好久了。
代码问题实在太大的话请求正确的解决方式。。拜托了。
[解决办法]
hMemDC=CreateCompatibleDC(hDC);
memdc.CreateCompatibleDC(pDC);?//创建与显示设备兼容的位图??
========================
创建兼容DC和兼容位图用的HDC不能是hDC,而是应该是上面的tDC;

bitmap.CreateCompatibleBitmap(pDC,?rect.Width(),?rect.Height());??//加载位图
===========================
这个也是这样的,而且这个不是加载位图吧!

读书人网 >VC/MFC

热点推荐