CMFCToolbar 图像通过远程桌面或连接到投影仪时消失
CMFCToolbar image disappears through remote desktop or when connected to projector
我在派生自 CDialog 的对话框中使用 CMFCToolbar,并使用 LoadBitmap() 在工具栏上加载图像。当我 运行 应用程序时,图像可以正常显示。但是,当我通过远程桌面连接计算机时,图像消失了。当计算机长时间闲置或进入睡眠模式时,也会出现同样的问题。这仅发生在 CMFCToolbar 中。所有其他工具栏都正确可见。
经过一些调试,我有以下观察(虽然很奇怪)。我发现只要在 OnSize() 事件(在我的对话框中超载)中发生某些异常(例如在 NULL 指针上调用 SetWindowPos()),图像就不会消失。这意味着 windows 在出现异常后停止进一步调用,并且不会出现该问题。但是,如果没有异常,则 OnSize() 会成功评估并出现此问题。我尝试删除 OnSize() 事件但没有成功。
终于想通了,解决了问题。我正在使用 LoadBitmap() 加载 PNG 图像。在我连接到远程桌面或投影仪或计算机从睡眠模式唤醒之前,它工作得非常好。当我用 BMP 文件替换 PNG 文件时,问题得到解决。在这些情况下,PNG 文件似乎不能与 CMFCToolbar 控件一起使用,尽管它们可以在正常工作流中工作。
我在派生自 CDialog 的对话框中使用 CMFCToolbar,并使用 LoadBitmap() 在工具栏上加载图像。当我 运行 应用程序时,图像可以正常显示。但是,当我通过远程桌面连接计算机时,图像消失了。当计算机长时间闲置或进入睡眠模式时,也会出现同样的问题。这仅发生在 CMFCToolbar 中。所有其他工具栏都正确可见。
经过一些调试,我有以下观察(虽然很奇怪)。我发现只要在 OnSize() 事件(在我的对话框中超载)中发生某些异常(例如在 NULL 指针上调用 SetWindowPos()),图像就不会消失。这意味着 windows 在出现异常后停止进一步调用,并且不会出现该问题。但是,如果没有异常,则 OnSize() 会成功评估并出现此问题。我尝试删除 OnSize() 事件但没有成功。
终于想通了,解决了问题。我正在使用 LoadBitmap() 加载 PNG 图像。在我连接到远程桌面或投影仪或计算机从睡眠模式唤醒之前,它工作得非常好。当我用 BMP 文件替换 PNG 文件时,问题得到解决。在这些情况下,PNG 文件似乎不能与 CMFCToolbar 控件一起使用,尽管它们可以在正常工作流中工作。