【发布时间】:2020-02-25 04:56:14
【问题描述】:
已解决:我已发布我的解决方案作为答案。
这是我的问题:(gif)(如果我在任何 WM_PAINT 消息之前取消最小化时重新加载位图以绘制背景图像,就可以解决。)
每当我取消最小化应用程序、应用程序首次显示 OK 的时间(除非您正在使用调试器单步执行,否则会短暂显示一秒钟),然后突然变黑(或在应用程序窗口中设置为 hbrBackground 的任何颜色)时,就会发生这种情况类)。我可以通过重新加载 WM_PAINT 中使用的 HBITMAP 来防止这种行为,这些 HBITMAP 是全局变量,并在应用启动时使用其相应的值进行初始化。
gif 开始显示应用程序在最小化后重新打开,调试器逐步通过 Rich Edit Control 消息循环的父窗口,所有窗口的背景变为黑色之前和之后的时刻,然后步入 Rich编辑 Control 子类消息循环,进入 WM_PAINT。
- 如果我在应用程序之间切换而相关应用程序之前从未被最小化过,则不会发生这种情况。
- 如果富编辑控件 (RICHEDIT50W) 之前没有显示任何文本,即不会发生这种情况。如果没有显示任何文字,则应用可以正常工作。
- 这是窗口树:
- 主窗口
- 一些子窗口
- 子窗口 1
- 丰富的编辑控件
- 主窗口
步出子窗口1 WndProc;进入 WndSubclassProcWhatever 回调中 Rich Edit Control 的 WM_PAINT。
在意识到在 unminimize 之后调用 LoadImage() 可以解决后台问题之前,我做了一些事情:
-
使用子类拦截 Rich Edit Control 的消息循环,并处理(以及在每个其他窗口中)消息:WM_COMMAND、WM_IME_NOTIFY、WM_NCPAINT、WM_WINDOWPOSCHANGED、WM_WINDOWPOSCHANGING、WM_ERASEBKGND... 主要返回与DefSubclassProc/DefWindowProcW.
-
应用重新打开后立即调用 ValidateRect()...
在此之前发生过这种情况,而不是整个应用变黑,只有文本“突出显示”或 Rich Edit Control 父级变黑,整个应用在另一个最小化取消最小化周期后变黑。
我在更新的 Windows 10 中使用具有默认设置的 Visual Studio Community 2019,并且在发布和调试版本中都看到了这个问题。
我现在期待防止位图“卸载”,从而节省许多看似不必要的 LoadImage() 调用。 已解决
我尝试上传代码的最小版本,但行为结果并不完全相同,所以感谢之前给出的答案!
【问题讨论】:
-
请发布一个可以构建和运行的代码的最小版本,它会显示错误。否则很难猜出哪里出了问题。
-
@jwezorek 完成!抱歉,我希望有人可以毫不费力地解决我的问题。请注意,错误必须具有将窗口变成无边界无标题的设置,但我想保持相同的方式!