非托管DLL(导出对话框)+类库(DLL)+无Windows样式/主题

时间:2010-02-23 15:23:25

标签: c# themes dllimport class-library

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

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

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

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

我只想查看托管/非托管模块的一般问题,因此我使用[DLLImport()]调用相同的MyTestConfigDlg()对话框,但这次直接在我的TestApplication.exe中!哇!按照我的预期工作。 Dialog是XP Style / Themes!

所以,这里有谁可以帮我解决? 仅供参考:我也尝试(仅用于测试)在我的类库Dll中调用MessageBoxA() API调用,后来我的TestApplication.exe调用了MessageBoxA()也没有样式/主题!

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

希望这有帮助, 最好的祝福, 汤姆。