2010-02-23 42 views
1

我在C#中有一个托管应用程序TestApplication.exe,并且已调用Application.EnableVisualStyles()非托管DLL(导出对话框)+类库(DLL)+无Windows样式/主题

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

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

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

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

那么,这里的任何人谁可以帮我吗? 供参考:我也试过(仅用于测试)在我的类库Dll中调用MessageBoxA() API调用,稍后由我的TestApplication.exe和MessageBoxA()调用也没有样式/主题!

在此先感谢!

回答

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(),比其它解决这个问题,我的想法......

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

+0

谢谢你的信息,但它并没有帮助我很多解决我的问题! – Gohlool 2010-02-23 20:36:41