2011-09-14 71 views
0

我已經使用純win32 api(無MFC或WPF)在C++中編寫了應用程序。 我想要在Windows XP和Windows Vista/Windows 7下運行相同的.exe。爲XP和Vista/Windows 7創建Win32應用程序

我正在使用清單向我的應用程序中的控件添加視覺樣式。但是,當我在XP機器上測試應用程序時,按鈕不顯示。只有編輯控件和菜單欄。

編輯:我想我忘記提到這一點,但該應用程序在WIndows 7/Vista上正常工作。 編輯2:我正在使用MinGW編譯器 我認爲這是一個清單問題,所以我刪除它並重新編譯我的程序。但按鈕仍然不顯示。 我使用清單如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<assemblyIdentity 
    version="1.0.0.0" 
    processorArchitecture="*" 
    name="BlackJack.Viraj" 
    type="win32" 
/> 
<description>Your application description here.</description> 
<dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
      type="win32" 
      name="Microsoft.Windows.Common-Controls" 
      version="6.0.2600.0" 
      processorArchitecture="*" 
      publicKeyToken="6595b64144ccf1df" 
      language="*" 
     /> 
    </dependentAssembly> 
</dependency> 
</assembly> 

請問問題出在哪裏在清單或者是別的東西嗎?

+0

您是否使用了帶有UAC護罩的新按鈕樣式?我不知道XP是否會忽略未知的標誌,或者它是不是一個未知的按鈕。 – RedX

+0

不,他們都是正常的按鈕。 – viraj

+0

你能發佈按鈕創建的代碼嗎? – RedX

回答

3

,請務必讓InitCommonControlsEx

+0

如果他甚至沒有清單並且仍然存在問題,那麼我認爲這不會有幫助 - 據我所知,您不必在Win32中創建簡單的按鈕即可。 (不是說這不是一個好的函數!) –

+0

InitCommonControlsEx與清單無關。它只是確保常見控件DLL被加載 –

+0

是的,我知道 - 我查了它。但按鈕早於公共控件DLL的存在......我很驚訝,如果甚至沒有清單,這個API調用將是必需的! –

1

這是別的。假設它們是正常的標準按鈕,它們應該顯示出來,而不管清單看起來是什麼樣的,或者是否有一個。其他事情正在發生。

0

清單很好。因此,問題必須出現在您的代碼中。創建主題應用程序與非主題應用程序並不完全相同。

1

除非你正在使用新的Windows 7 API,一個標準的應用程序將與這兩個平臺順利。此外,Windows 7具有兼容模式,可以在您發現有問題時嘗試。

您確定您在程序開始時調用了InitCommonControls API嗎?

瞭解爲什麼這很重要 - http://blogs.msdn.com/b/oldnewthing/archive/2005/07/18/439939.aspx

我建議你參考一個純粹的Win32應用程序 http://blogs.msdn.com/b/oldnewthing/archive/2005/04/22/410773.aspx

而且我建議把清單中的連接器選項內本身的源文件英寸

#ifdef _UNICODE 
#if defined _M_IX86 
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") 
#elif defined _M_IA64 
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"") 
#elif defined _M_X64 
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") 
#else 
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 
#endif 
#endif 
+0

'#pragma comment'是我相信的Visual C-ism,所以不會與Mingw一起工作。 –

相關問題