1

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

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

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

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

以下是一些截图:

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

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

4

1 回答 1

0

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

我的解决方案是(并且是)在使用 GDI-Functions 之前始终销毁所有 Gdiplus::Graphics - 或者您可以尝试调用 Graphics::Flush。

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

我刚刚发现这篇文章描述了混合 GDI 和 GDI+ 的一些限制:https: //support.microsoft.com/en-gb/help/311221/info-interoperability-between-gdi-and-gdi

于 2013-02-26T09:31:31.957 回答