我有一个游戏循环,它可以调用draw()函数,然后更新屏幕。以下代码有效:
void draw(){
Paintcache = GetDC(windows[0]);
rect.left = 0;rect.top=0;rect.right=1280;rect.bottom=720;
FillRect(Paintcache,&rect,COLOR_WHITE);
drawPlayers();
drawEntities();
ReleaseDC(windows[0],Paintcache);
}
因为(据我所知)不使用任何缓存,我想确保我先在第二个hdc上绘制所有内容,然后将其复制到主窗口。我尝试过几个方面,包括下面的代码示例,但这不起作用。
HDC cDC = GetDC(windows[0]);
Paintcache = BeginPaint(windows[0],&ps);
rect.left = 0;rect.top=0;rect.right=1280;rect.bottom=720;
FillRect(Paintcache,&rect,COLOR_WHITE);
drawPlayers();
drawEntities();
BitBlt(cDC,0,0,1280,720,Paintcache,0,0,SRCCOPY);
ReleaseDC(windows[0],cDC);
EndPaint(windows[0],&ps);
第一次调用它(在启动时,在WM_PAINT中)它可以工作,之后,任何新调用都不再更新屏幕。我也尝试使用以下代码发送WM_PAINT而不是直接调用draw(),但这也没有用。
SendMessage(windows[0],WM_PAINT,NULL,NULL);