1

我在 C# 中有一个托管应用程序 TestApplication.exe 并且Application.EnableVisualStyles()已经被调用。

我在 C# 中也有一个类库 MySharedCode.dll,它用于[DLLImport()]从非托管 dll 中导入一些外部对话框。

好吧,现在我在我的 TestApplication.exe 中使用(添加引用)MySharedCode.dll 并调用function MyTestConfigDlg()它。TestClass.MyTestConfigDlg();

好的,一切正常,我得到了我的对话框,但对话框没有 XP 样式/主题?

我只是想看看它是否是托管/非托管模块的一般问题,所以我使用[DLLImport()]来调用相同的MyTestConfigDlg()对话框,但这次直接在我的 TestApplication.exe 中!哇!按我的预期工作。对话框采用 XP 风格/主题!

那么,这里有人可以帮助我吗?仅供参考:我还尝试(仅用于测试)MessageBoxA()在我的类库 Dll 中调用 API 调用,后来由我的 TestApplication.exe 调用并且MessageBoxA()也没有样式/主题!

提前致谢!

4

1 回答 1

0

的用法Application.EnableVisualStyles()适用于某些 Windows 控件,例如 ListBox、ListView、Menu、Buttons,以使其从一开始就与 XP 主题控件保持一致,如果它在 Vista 及更高版本上运行,它也会使控件符合该样式. 简而言之,我不知道你是什么意思,当直接通过引用调用对话框时,对话框没有 XP/Themes 支持,但是当你使用DllImport关键字导入它起作用的函数时,这是不寻常的。通常使用的DllImport是非托管代码API,但不知何故它捡起了它......我确实记得.NET 1.1框架存在一个错误,如果你调用Application.EnableVisualStyles()它,它就无法工作,除非调用Application.DoEvents()在启用视觉样式和实例化一个winforms之间被调用,也许在你的情况下,当实例化一个对话框时,也许可以通过调用来解决它,除此之外Application.DoEvents(),我没有想法......

希望这会有所帮助,最好的问候,汤姆。

于 2010-02-23T16:06:34.670 回答