簡體   English   中英

在另一個窗口上繪圖(沒有閃爍?)

[英]Drawing on another window (without flickering?)

我需要在窗口上繪制一些東西(不是我的-它是用戶定義的,如果有關系的話)。

我已經設法通過使用GetDC獲取設備上下文並正常繪制來在窗口上繪制,問題是我不知道何時繪制到窗口上-窗口不斷在重繪自身(例如游戲) 。 我有一些想法,但到目前為止,它們不是好事/不好/沒有實現。

  • 使用計時器。 這是最糟糕的主意,但我現在會嘗試任何方法。 顯然,由於窗口不斷刷新,因此會閃爍。 我曾想過要在我的圖紙之前強制重新繪制窗口,但仍然不好。 真的不能想到使用計時器的良好實現...
  • 掛鈎WM_PAINT消息。 使用SetWindowsHookEx WM_GETMESSAGE掛鈎,我可以使用一個事件,只要其他窗口接收到它,它就會接收WM_PAINT消息,但是完成繪制之前先發送WM_PAINT。 我在MSDN上發現,可以使用WndProcRetHook代替WH_GETMESSAGE Windows Hook,該WndProcRetHook 處理Windows消息並接收到包含消息信息的結構會被調用,但到目前為止還算不上運氣-我無法使其正常工作...
  • 掛鈎工程圖功能。 我嘗試掛鈎繪畫功能(例如ReleaseDC和/或EndPaint),這些功能會使窗口無效,因此我可以進行最后的繪畫。 這次,我讓它工作得很好-但它仍然閃爍了一點,並且在某些窗口上掛了ReleaseDC,以某種方式阻止了該窗口的渲染-它甚至不會擦除其背景。 有時甚至整個過程都崩潰了。

因此,我正在尋找一種好的方法,使其成為在窗口上顯示之前在窗口上繪制的最后一個方法。 我更喜歡避免不使用SetWindowsHookEx(例如:外部DLL)完成鈎子,但這也可以。

謝謝。

一種替代方法可能是避免直接在窗口上繪畫,而是創建一個透明的分層窗口,將其放置在主窗口的頂部。 這樣,您窗口上的圖形不會干擾主窗口上的圖形,反之亦然。

您可能需要采取某些步驟,才能使鼠標單擊從您的窗口轉到主窗口。 例如。 使用HTTRANSPARENT處理WM_NCHITTEST並使用WS_EX_TRANSPARENT樣式。

由於在Windows下,需要按需繪制窗口,因此,唯一的方法是使用SetWindowsHookEx()將WM_PAINT窗口掛鈎到該窗口。

這是一個不平凡的過程,需要您的繪畫代碼駐留在DLL中(這樣才能將DLL加載到目標應用程序的地址空間中)。

通常,除非您有充分的理由這樣做,否則這不是一個好主意。

暫無
暫無

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

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