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);打算弄一个函数在内存里画图,然后再用另一个函数一次性绘在屏幕上,以解决屏幕闪的问题。
结果窗口什么都没。。求大神帮助。。困这好久了。
代码问题实在太大的话请求正确的解决方式。。拜托了。
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);打算弄一个函数在内存里画图,然后再用另一个函数一次性绘在屏幕上,以解决屏幕闪的问题。
结果窗口什么都没。。求大神帮助。。困这好久了。
代码问题实在太大的话请求正确的解决方式。。拜托了。
CRect rect;//定义一个区域
GetClientRect(&rect);//要画的区域CDC memdc; //画布对象
CBitmap bitmap; //内存位图
memdc.CreateCompatibleDC(pDC); //创建与显示设备兼容的位图
bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()); //加载位图
CBitmap *pOldBit=memdc.SelectObject(&bitmap); //将位图选入设备
memdc.FillSolidRect(0,0,rect.Width(),rect.Height(),RGB(255,255,255));
//绘图
//如果在memdc这个DC里画东西,可以看见,而你用pDC->来画的话,是看不见的。
while(ii<200){ii++;
memdc.MoveTo(0,0);
memdc.LineTo(100+ii,100);}
//释放资源
pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memdc, 0, 0, SRCCOPY);
bitmap.DeleteObject(); //释放位图
memdc.DeleteDC(); //释放内存画布
ReleaseDC(pDC); //这个看情况
记得把背景去掉
memdc.CreateCompatibleDC(pDC); //创建与显示设备兼容的位图
========================
创建兼容DC和兼容位图用的HDC不能是hDC,而是应该是上面的tDC;bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height()); //加载位图
===========================
这个也是这样的,而且这个不是加载位图吧!
有没有用HDC的方法。。用的是win32工程。用CDC的函数总会报错。
把这两个hDC换成tDC了。
但是还是一次画一个位图在窗口。
本来的目的是想在函数1中绘制背景1.
再在函数1中绘制背景2,人物。但是不显示在屏幕上。
之后再在函数2中完成全部一起显示在屏幕上的操作。如果要达到这个效果应该怎么做?