Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 当SW_隐藏然后SW_显示正常时,如何防止窗口显示旧内容?_Winapi_Gdi - Fatal编程技术网

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直接更有效地使用内存,因为系统不需要存储重定向窗口映像所需的额外内存