检测窗口是否已完成绘图并在屏幕上显示(WINAPI)

时间:2012-12-25 17:06:23

标签: c++ winapi

我有问题。我在一个线程中创建了一个Window。我创建了一个互斥锁,这样就不能通过函数检索Window句柄,直到它不是0。

我还使用了while循环来确保句柄不是0。

事情是,句柄永远不会为0,因为CreateWindowEx会在窗口显示在屏幕上之前返回窗口的句柄。

所以我的互斥锁和while循环失败了。我需要知道窗口何时完全显示并完成了它必须做的任何事情,所以我可以从另一个线程中进行绘制。

Handle不是0,DC不是0.但是当我画画时,它什么也没画。如果我在CreateWindowEx和ShowWindow之后立即放置Sleep(100),则会显示窗口并正确地绘制图像。我也尝试循环IsWindowVisisble(WindowHandle)。那也失败了。

我不想睡觉(100),我该怎么办?

2 个答案:

答案 0 :(得分:7)

不要试图从另一个线程中绘制窗口。

将一些数据发布到窗口,让它根据该数据绘制自己。无论如何,它需要准备好自己绘制以响应WM_PAINT,并且在任何情况下都需要任何必要的数据。跳过篮球以不同的方式进行初始绘图将会增加大量工作并且基本上不会给你任何回报。

答案 1 :(得分:0)

另请注意,在对消息队列执行某些操作之前,不会发生任何事情(窗口不会显示);即PeekMessage / GetMessageDispatchMessage。而且,正如其他人所说,如果你使用GDI绘制,你必须在WM_PAINT中进行绘制。如果要强制更新,请使用InvalidateRect。请记住,如果您尝试使用其他线程创建的窗口,会有很多陷阱。