2010-02-23 66 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