刚开始研究VC,问题真多啊!
为了解决游戏窗口显示时闪烁的问题,今天学会了一个叫做“双缓冲”的技术。可是使用时出现了让我相当郁闷的错误。
HDC hMemDC=CreateCompatibleDC(hDC);
HBITMAP hbmMem=CreateCompatibleBitmap(hMemDC,
GameEngine::GetGameEngine()->GetWidth(),
GameEngine::GetGameEngine()->GetHeight());
SelectObject(hMemDC,hbmMem);
/****** 在兼容的上下文hMemDC中绘图*****/
………………………
BitBlt(hDC,0,0,GameEngine::GetGameEngine()->GetWidth(),GameEngine::GetGameEngine()->GetHeight(),hMemDC,0,0,SRCCOPY);
………………………………..
我以为这样写没错,可最终显示的结果32位的彩色位图全变成了黑白单色位图。仔细看MSDN,查资料,debug…….
就在我郁闷了几个小时后,随意做了一点改动,意外的解决了。
我把兼容位图的创建改成:
HBITMAP hbmMem=CreateCompatibleBitmap(hDC,
GameEngine::GetGameEngine()->GetWidth(),
GameEngine::GetGameEngine()->GetHeight());
虽然问题解决了,可我还是不知道为什么在hMemDC上绘图要创建与hDC兼容的位图,可能是显示机制的问题吧?这个就深了!