我看到的每個示例代碼都是GetDC和releaseDC。 (或者BeginPaint/EndPaint) 但是我認爲繪圖畫面經常發生(特別是在遊戲中),將它們存儲在內存中總是會得到更好的釋放。Win32API)我爲什麼要一次又一次獲取DC和ReleaseDC?
所以我確實喜歡把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;
*「但是爲什麼人們不這樣做?」* - 因爲它都是錯誤的。所以你節省了廉價的操作'GetDC'只在每次重繪時調用昂貴的操作('CreateCompatibleDC')。而且由於你永遠不會調用'BeginPaint' /'EndPaint',無效區域永遠不會被驗證,即使沒有任何東西可以繪製,也會產生連續的WM_PAINT消息。在嘗試優化之前,您需要了解它的工作原理。 – IInspectable
人們不這樣做,因爲文檔說你不能。不應該像這樣緩存DC,除非您特別注意使用適當的標誌創建窗口類,而不應該這樣做。區議會旨在成爲臨時性對象,僅在必要時創建並在事後立即處置。使用'GetDC'檢索DC足夠便宜,這在286處理器上運行良好。無論您現在運行什麼芯片,它都能夠保證足夠快。 –
@CodyGray哇,我的好奇心剛剛吹走!謝謝大家回答。 – JokyDandy