【发布时间】:2020-12-06 15:56:54
【问题描述】:
我已经阅读了关于后缓冲的article,我通过以下方式重新创建了它:
void paint(HWND handle)
HDC device = GetDC(handle);
HDC backBufferDevice = CreateCompatibleDC(device);
RECT boundRect;
GetClientRect(handle, &boundRect);
HBITMAP backbufferBmp = CreateCompatibleBitmap(
backBufferDevice,
boundRect.right - boundRect.left,
boundRect.bottom - boundRect.top
);
SelectObject(backBufferDevice, backbufferBmp);
// This is in a separate function void clear(HDC device)
RECT rect{ 0, 0, 300, 300 };
GetClientRect(WindowFromDC(backBufferDevice), &rect);
FillRect(hdc, &rect, br);
BitBlt(
device,
boundRect.left, boundRect.top,
boundRect.right - boundRect.left, boundRect.bottom - boundRect.top,
backBufferDevice,
0, 0,
SRCCOPY
);
DeleteObject(backbufferBmp);
DeleteDC(backBufferDevice);
ReleaseDC(handle, device);
}
LRESULT CALLBACK ProcessMessage(
HWND handle,
unsigned int message,
WPARAM wParam,
LPARAM lParam
) {
switch (message) {
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
case WM_MOUSEMOVE:
paint(handle);
return 0;
case WM_ERASEBKGND:
return 1;
default:
return DefWindowProc(handle, message, wParam, lParam);
}
}
void main() {
// ... window initialiation
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
但是当我启动应用程序时,会发生以下情况:
应该发生的情况是应该在 RGB(20, 20, 20) 中清除窗口。似乎它处于黑白模式并且 WindowFromDC() 失败。第二个不足为奇,但是为什么设备是黑白的,我应该如何修复它?
(抱歉英语不好)
【问题讨论】:
-
@DavidHeffernan 抱歉不清楚,我已经编辑过了
-
CreateCompatibleBitmap: "注意:当一个内存设备上下文被创建时,它最初会选择一个1×1的单色位图。如果这个内存设备上下文用于@ 987654328@,创建的位图是单色位图。"