我看到的每个示例代码都是GetDC和releaseDC一次又一次。 (或BeginPaint / EndPaint) 但我认为绘图屏幕经常发生(特别是在游戏中),将它们存储在内存中会更好,然后一直得到释放。
所以我确实喜欢将mainDC保持为全局并且只使用它,只在程序结束时才释放它。但为什么人们不喜欢这样呢? (也许获得/释放DC费用很少?)
case WM_CREATE:
hdc = GetDC(hWnd); //hdc is declared as global HDC
MyBitmap = LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
return 0;
case WM_PAINT:
MemDC = CreateCompatibleDC(hdc);
OldBitmap = (HBITMAP)SelectObject(MemDC, MyBitmap);
BitBlt(hdc, 0, 0, 300, 300, MemDC, 0, 0, SRCCOPY);
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
return 0;
答案 0 :(得分:0)
您在此处提供的代码是错误的。首先,您需要阅读更多文档。这是一个有用的链接:Painting and Drawing。基本上有两种方法可以更新窗口:
编写一些代码来处理WM_PAINT消息通常几乎是强制性的,而具体绘图也是可选的,具体取决于应用程序的要求。
永远不要自己发送或发布WM_PAINT消息,而是使部分或整个客户区无效 - 应用程序将在空闲之前收到WM_PAINT消息。如果要立即进行绘制,请调用UpdateWindow() - 这会绕过消息队列。
答案 1 :(得分:0)
Windows 10中最近的(2016年8月)安全更新阻止了打印机设备上下文的重用。打印一个文档后,Windows 10将拒绝使用相同的DC再次打印。为每个文档创建一个新的DC一直是一种优选的做法,但现在它似乎是Windows 10中的一项要求。