Windows GDI +应用程序中出现奇怪的显示错误

时间:2013-02-26 08:32:36

标签: c++ winapi user-interface gdi+

使用GDI +绘制应用程序的用户界面时,我遇到了一个奇怪的问题。有时会出现显示错误,显示其他应用程序的工件。有时我的文本控件的边框完全用黑色绘制。

在某些情况下,问题不仅仅是简单的显示错误。当发生这种情况时,我有一个嵌入我的应用程序的其他应用程序的菜单或上下文菜单。此菜单不仅可见,而且您还可以通过鼠标悬停在菜单上并突出显示子菜单来突出显示菜单条目。但是,当您单击条目时,它们背后没有功能。似乎这些菜单始终是Windows资源管理器的一部分。

我不知道应该在哪里开始寻找这些问题的原因。也许在SO的某个人可以指出我可能的问题来源甚至解决方案?

澄清:相同的代码在具有不同硬件,不同图形卡驱动程序和不同操作系统(XP,Win7,Server 2008)的多台PC上显示此错误。我想发布一些代码,但它在整个应用程序中非常复杂和广泛。由于我不知道问题的根本原因是什么,我无法隔离代码的正确部分。

以下是一些屏幕截图:

我的文字控件和面板控件周围有黑色边框:

另一个应用程序的内容是在我的应用程序窗口中绘制的。您可以从左侧的Windows资源管理器和右侧的Excel工作表的某些部分查看上下文菜单。表单下半部分的网格表通常直接位于窗口标题栏下: 在显示资源管理器上下文菜单的表单中显示错误:

1 个答案:

答案 0 :(得分:0)

正如你所说,你嵌入了另一个应用程序,我猜你正在使用经典的GDI调用和GDI +?这是一件乏味的事情。我做了同样的事情,它引起了一些问题,我的程序的某些部分没有被绘制出来并且变得不可见。

对我来说解决方案是(并且是)在使用GDI函数之前总是销毁所有Gdiplus :: Graphics - 或者你可以尝试调用Graphics :: Flush。

毕竟我必须恢复,开始使用GDI +是一个坏主意,并将其混合到现有的GDI应用程序是一个可怕的想法。您应该只使用一个API(也许是direct3D)。 GDI +不是基于GDI - 显然两者并行工作。