簡體   English   中英

檢測窗口是否完成繪制並在屏幕上顯示(WINAPI)

[英]Detect if a Window is finished drawing and on screen (WINAPI)

我有個問題。 我在線程中創建了一個窗口。 我創建了一個互斥鎖,以便在不等於0之前無法通過函數檢索Window句柄。

我還使用了while循環來確保句柄不為0。

事實是,該句柄永遠不會為0,因為CreateWindowEx會在窗口甚至顯示在屏幕上之前將一個句柄返回給Window。

所以我的互斥鎖和while循環失敗。 我需要知道窗口何時完全顯示並完成其必須做的一切,因此我可以從另一個線程上借鑒它。

句柄不為0,DC不為0。但是當我繪制時,它什么也沒有繪制。 如果我在執行CreateWindowEx和ShowWindow之后立即放置了Sleep(100),則顯示窗口並正確繪制圖像。 我還在循環IsWindowVisisble(WindowHandle)時嘗試過。 那也失敗了。

我不想睡​​覺(100),我該怎么辦?

不要試圖從另一個線程在窗口上繪制。

將一些數據發布到窗口,並使其根據該數據進行繪制。 無論如何,它都需要准備好響應WM_PAINT進行繪制,並且在任何情況下都需要執行此操作所需的任何數據。 跳過箍圈以不同方式進行初始繪制將增加大量工作,並且實際上沒有給您任何回報。

還要注意,在對消息隊列進行操作之前,什么也不會發生(不會顯示窗口)。 PeekMessage / GetMessageDispatchMessage 而且,正如其他人所說,如果您使用GDI進行繪制,則必須在WM_PAINT進行繪制。 如果要強制更新,請使用InvalidateRect 請記住,如果您嘗試使用其他線程創建的窗口,則有很多陷阱。

暫無
暫無

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

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