检测窗口是否完成绘制并显示在屏幕上(WINAPI)
Detect if a Window is finished drawing and on screen (WINAPI)
我有一个问题。我在线程中创建了一个窗口。我创建了一个互斥锁,这样Window句柄就不能通过函数检索,直到它不为0。
我还使用了一个while循环来确保句柄不为0。
问题是,句柄永远不会为0,因为CreateWindowEx在窗口显示在屏幕上之前返回一个句柄给窗口。
我的互斥体和while循环失败了。我需要知道窗口何时完全显示并完成它必须做的事情,以便我可以从另一个线程绘制它。
句柄不为0,DC不为0。但是当我画的时候,它什么也没画。如果我在执行CreateWindowEx和ShowWindow后立即设置Sleep(100),则显示窗口并正确绘制图像。我也尝试在循环iswindowvisible (WindowHandle)。
我不想睡觉,我该怎么办?
不要尝试从另一个线程绘制窗口。
发送一些数据到窗口,并让它根据这些数据绘制自己。无论如何,它都需要准备好以响应WM_PAINT来绘制自己,并且需要在任何情况下这样做所需的任何数据。跳来跳去以不同的方式进行最初的绘图将会增加大量的工作,并且基本上没有任何回报。
还请注意,在您对消息队列执行某些操作之前,不会发生任何事情(窗口不会显示);即PeekMessage
/GetMessage
和DispatchMessage
。就像其他人说的,如果你要用GDI来画画,你必须用WM_PAINT
。如果您想强制更新,请使用InvalidateRect
。请记住,如果您尝试使用由其他线程创建的窗口,会遇到很多问题。
相关文章:
- WinAPI挂钩鼠标
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 将执行、作业和WinAPI相乘
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- 如何在桌面C++上使用 WinApi 画线
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- Winapi:屏幕截图未显示在窗口中
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 如何在快板的屏幕中显示子位图的绘制?
- Qt with WinAPI MouseProc
- 捕获桌面屏幕QT/C Winapi
- 窗口的C Winapi屏幕截图
- Winapi在屏幕上使用MouseClick活动显示图标
- C++ & WinApi - 在创建的窗口中将文本从键盘输出到屏幕
- 多显示器屏幕截图只有2个显示器在C++与WinApi
- Winapi使用TextOut将文本打印到屏幕
- WinApi:如何为屏幕阅读器的所有者绘制的按钮添加替代文本
- 检测窗口是否完成绘制并显示在屏幕上(WINAPI)