C++ Windows GDI+;应用

C++ Windows GDI+;应用,c++,winapi,user-interface,gdi+,C++,Winapi,User Interface,Gdi+,在使用GDI+绘制应用程序的用户界面时,我遇到了一个奇怪的问题。有时会出现显示其他应用程序工件的显示错误。有时,文本控件的边框完全用黑色绘制 在某些情况下,问题不仅仅是简单的显示错误。当这种情况发生时,我的应用程序中嵌入了另一个应用程序的菜单或上下文菜单。此菜单不仅可见,还可以通过鼠标悬停在菜单项上方并展开子菜单来高亮显示菜单项。但是,当您单击条目时,它们背后没有任何功能。这些菜单似乎总是Windows资源管理器的一部分 我不知道从哪里开始寻找这些问题的原因。也许在座的某个人能给我指出问题的可能

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

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

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

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

以下是一些屏幕截图:

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

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


正如您所说,您嵌入了另一个应用程序,我想您正在使用经典的GDI调用和GDI+?那是一件乏味的事。我也做了同样的事情,这导致了一些问题,我的程序的某些部分没有被画出来,变得看不见了

我的解决方案是(现在也是)在使用GDI函数之前总是销毁所有Gdiplus::Graphics,或者您可以尝试调用Graphics::Flush

毕竟,我必须重申,开始使用GDI+是一个坏主意,而将其混入现有GDI应用程序是一个可怕的主意。您应该只使用一个API(而不是direct3D)。GDI+并不是基于GDI的,显然两者是并行工作的


我刚刚发现这篇文章描述了混合GDI和GDI+的一些限制:

我们需要更多信息,请:相同的代码在许多不同的PC上有相同的问题,还是只有一台?不同的代码在您的电脑上有相同的问题?您是否尝试过升级图形驱动程序?能给我们看看代码吗?ETC有时我的文本控件的边框完全用黑色绘制。你确定没有GDI句柄泄漏吗?我修复了一些泄漏的GDI对象。但是问题仍然存在。嗨,谢谢你的回答。我没有嵌入另一个应用程序。这种行为是我们面临的错误的一部分。Windows资源管理器中的上下文菜单有时显示在我们的应用程序中,这是错误症状的一部分。是的,我们确实混淆了GDI和GDI+。你有类似的行为吗?@RED SOFT ADAIR,你能提供一个链接到任何资源,说你不能混合GDI和GDI+?不,我不能-这只是我痛苦的经历。我不想挑逗,但我已经混合GDI和GDI+很多年了,没有任何问题。GDI+通常更易于使用,但GDI有时速度要快得多(尤其是使用位图),因此我发现同时使用这两种技术非常有帮助,可以充分利用这两种技术。