簡體   English   中英

正確使用 Win32 設備上下文

[英]Proper use of Win32 Device Context

我已經與 GDI 合作了一段時間,我正在努力提高我對它的理解,以便能夠為它創建一個包裝類。

  1. 為什么在應用程序結束之前我不能保持窗口設備上下文? 它是否會因任何事件而失效? 我聽到有人說 WM_SIZE 后上下文無效,這是真的嗎? 即使我總是緩存窗口上下文,我也從未經歷過這種情況。 這使得在構造函數中 createCompatibleDC()s 和 createCompatibleBitmaps()s 變得更加容易。 我還緩存這些創建的 DC 並使用它們來避免閃爍,對於局部邊界繪制,緩存繪制操作,以防窗口最小化然后最大化。

  2. 為什么應用程序一次會獲取 1 個以上的窗口上下文? 由於文檔抱怨用完窗口上下文限制。

請記住,在您談論的上下文中,“無效”意味着需要重新繪制窗口的某些部分,這並不意味着從 GetDC 檢索到的句柄將無法使用。

具有 CS_HREDRAW 或 CS_VREDRAW 的窗口將需要在指示方向上的任何調整大小以及任何增加窗口大小的調整大小操作上至少部分重繪。

由於 GDI 對象數量的限制,正常模式是處理 WM_PAINT 消息並使用由 BeginPaint 返回的句柄(只有在不調用 EndPaint 時才會保持可用)。

並且正如一些程序員在評論中所說的那樣,可以使用第二個 DC 進行無閃爍繪圖,耗時的繪圖是在屏幕外 DC 上完成,然后簡單地復制到屏幕 DC 上。 即使這完全在 WM_PAINT 處理程序中完成,一旦繪圖操作完成,屏幕外 DC 通常會被釋放,以免占用 GDI 資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM