Winapi 当SW_隐藏然后SW_显示正常时,如何防止窗口显示旧内容?
我发现如果你有一个Winapi 当SW_隐藏然后SW_显示正常时,如何防止窗口显示旧内容?,winapi,gdi,Winapi,Gdi,我发现如果你有一个WS\u弹出窗口窗口或对话框并在其中绘制,那么你ShowWindow(SW\u HIDE)它,改变你在其中绘制的内容(甚至打电话在DC上绘制),做一个ShowWindow(SW\u SHOWNORMAL)它将在绘制新内容之前闪烁旧内容。Windows似乎将数据缓存在某个地方,以便ShowWindow快速显示数据(使用旧内容),如何防止ShowWindow(SW\u SHOWNORMAL)显示以前的内容?我已经试过了,没有区别。我只在隐藏然后显示时得到它(我宁愿这样做,然后在每次
WS\u弹出窗口
窗口或对话框并在其中绘制,那么你ShowWindow(SW\u HIDE)
它,改变你在其中绘制的内容(甚至打电话在DC上绘制),做一个ShowWindow(SW\u SHOWNORMAL)
它将在绘制新内容之前闪烁旧内容。Windows似乎将数据缓存在某个地方,以便ShowWindow
快速显示数据(使用旧内容),如何防止ShowWindow(SW\u SHOWNORMAL)
显示以前的内容?我已经试过了,没有区别。我只在隐藏然后显示时得到它(我宁愿这样做,然后在每次需要时销毁并创建窗口)
更新:
似乎与:
LONG ExtendedStyle = GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE);
SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, ExtendedStyle | WS_EX_LAYERED);
::SetLayeredWindowAttributes(GetSafeHwnd(), RGB(1, 11, 21), 0, LWA_COLORKEY);
谢谢。调用
ShowWindow(SW\u SHOWNORMAL)
后,窗口将被重新绘制,最后将重复调用WM\u PAINT
。最好把你的代码最小化,并展示给我们。它是如何重新绘制的?我如何阻止它重新绘制,然后继续WM_PAINT?在回答这些问题之前,我想知道隐藏窗口、绘制窗口然后恢复它之后,您的目的是什么?假设用户选择要查看和交互的图形,比如在其上绘制一些东西,当完成隐藏窗口时,下一个项目选择要在窗口中绘制的内容,取消隐藏,显示新项目(但问题是先前的数据似乎已缓存,并在显示时缩回屏幕,然后新内容最终绘制)。我可以删除对话框/窗口并再次创建,但不知道这里发生了什么,以及如何停止它。调用后,当显示或调整窗口大小时,系统仍可能要求窗口绘制。但是,由于系统存储分层窗口的图像,如果由于桌面上的相对窗口移动而显示部分窗口,则系统不会要求窗口进行绘制。此外,使用UpdateLayeredWindow直接更有效地使用内存,因为在调用ShowWindow(SW_SHOWNORMAL)
后,系统不需要存储重定向窗口图像所需的额外内存,窗口将被重新绘制,最后将重复调用WM_PAINT
。最好把你的代码最小化,并展示给我们。它是如何重新绘制的?我如何阻止它重新绘制,然后继续WM_PAINT?在回答这些问题之前,我想知道隐藏窗口、绘制窗口然后恢复它之后,您的目的是什么?假设用户选择要查看和交互的图形,比如在其上绘制一些东西,当完成隐藏窗口时,下一个项目选择要在窗口中绘制的内容,取消隐藏,显示新项目(但问题是先前的数据似乎已缓存,并在显示时缩回屏幕,然后新内容最终绘制)。我可以删除对话框/窗口并再次创建,但不知道这里发生了什么,以及如何停止它。调用后,当显示或调整窗口大小时,系统仍可能要求窗口绘制。但是,由于系统存储分层窗口的图像,如果由于桌面上的相对窗口移动而显示部分窗口,则系统不会要求窗口进行绘制。此外,使用UpdateLayeredWindow直接更有效地使用内存,因为系统不需要存储重定向窗口映像所需的额外内存