共用方式為


Windows 機密 消失的資料指標的大小寫

Raymond Chen

您可能已經注意到 當您按了螢幕擷取畫面,才能 PrtSc 鍵時, 游標閃爍簡短。 信不信由您,它實際上會,Windows XP fade-out 關機畫面不包括半透明的 Windows 相同的原因。

這些半透明的視窗,稱為層次視窗,不通常包含由 bitblt 函式讀取在螢幕上的像素為單位) 時。 為了取得這些,您必須傳遞 CAPTUREBLT 的旗標。 當您執行這項您可能也注意到將滑鼠游標閃爍。 所以為什麼的?

一次 upon,時間,浮動 「 上方 」 在螢幕上物件的其餘部分只圖形物件都是在滑鼠游標。 原本,系統所支援的只有單色的滑鼠游標。 這些資料指標支援在軟體或您發生在硬體上的傑出視訊卡。

當您使用視訊卡支援資料指標時,圖形裝置介面 (GDI) 提供點陣圖] 和 [遮罩的視訊卡,並指出,"確定,這是在滑鼠游標。 覆疊這在我指定的座標處在螢幕上 」。 使用者移動滑鼠時時, 請 GDI 傳送,更新的視訊卡的座標,並視訊卡會進行硬式移動像素,在螢幕的工作。

另一方面,當您使用軟體支援游標,然後 GDI 是負責儲存像素游標下的它繪製至框架緩衝區之前。 適用於以下列方式的程序: 當使用者移動滑鼠時,GDI 以手動方式還原之原始的像素儲存在資料指標的新位置,像素的所有並將然後它繪製游標的新位置。

當使用硬體游標時,滑鼠游標的像素實際中沒有框架緩衝區因為硬體是負責執行覆疊。 因此,bitblt 功能是能夠只複製像素為單位從不擔心挑選像素為單位從滑鼠游標不小心因為這些像素為單位) 不開始框架緩衝區中存在的框架緩衝區。

反過來說,如果正在使用軟體游標,然後 GDI 必須移除滑鼠游標在螢幕在 bitblt 執行從畫面,如果要複製的區域重疊的滑鼠游標之前。

當動畫的游標採用時,硬體游標只是不要相當剪的 mustard 因為硬體游標不動畫顯示。 因此,在軟體中,會實作動畫的游標。

確定大。 但為何不會這有與 CAPTUREBLT? 掛上,我沒有收到。

在 Windows 2000,撰寫機制,用於軟體資料指標是歸納起來,讓應用程式可能也利用它。 這些 pseudo-cursors 最後成為稱為層次視窗。 像軟體的資料指標時您執行一個 bitblt 從螢幕因為真的沒有一般觀念中,分層的 Windows 不要顯示設定。 從資料指標與分層的 Windows 像素,最後一刻有複合在螢幕上。

但您想要擷取透過 bitblt 層次視窗的像素的怎麼辦? 這是其中新的 CAPTUREBLT 旗標派上用場。 之後,撰寫引擎進行的說,這就會擷取像素。 因為程式碼會產生 Windows XP 的呈現暗灰色的關機畫面不傳遞,CAPTUREBLT,不要顯示層次的視窗。

仍沒有似乎解釋為什麼游標閃爍,但是。 它實際上,會。 將滑鼠游標會是只是另一種撰寫物件,且因此會被擷取 CAPTUREBLT 旗標。 若要防止這發生在擷取畫面時,撰寫引擎會對隱藏游標、 執行的 CAPTUREBLT,然後 re-show 游標。

藉由公開應用程式在 Windows 2000 撰寫引擎,資料指標已遺失其特殊的狀態。 我們已完整 circle 出現。 它現在的就像好舊天數,回所有您有時框架的緩衝區] 和 [在軟體的游標。

Raymond Chen Web 站台, The Old New Thing並處理 Windows 的歷史,Win32 的程式設計和 misreading 新聞頭條的採用相同標題的書名 (Addison-Wesley,2007)。