2017-07-26 91 views
2

我最近將項目從VS2005遷移到VS2015。這樣做,我的項目現在拒絕使用系統的外觀和感覺,並使用Windows 98的外觀和感覺。 2005年建成時,它使用系統外觀。Visual Studio從2005年升級到2015年,C++ GUI保留XP主題而非系統主題

描述對話框的.rc文件與我複製並粘貼原始文件時相同。屬性都是一樣的。

我已經搜索了一下,有一個可能性是FlatStyle屬性,它可以設置爲系統,但是我的對話框沒有這個屬性。

此外,我已通過this瞭解並嘗試了這些建議,但似乎沒有任何工作。

我認爲這個問題是我必須在2015年禁用的設置,以便應用程序適應系統外觀。

那麼如何讓我的應用程序適應當前的系統呢?

這是一個對話的一個例子:

STYLE DS_SETFONT | DS_3DLOOK | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW

+1

是否缺少的[糾正清單文件(https://msdn.microsoft.com/en-us /library/windows/desktop/bb773175(v=vs.85).aspx)?檢查[MSDN提示](https://msdn.microsoft.com/en-us/library/bb773187.aspx)。 – Groo

+0

常用控件有兩種風格,您需要選擇新控件,因爲它們只是UTF-16。所以如果你的程序是MBCS,它將無法正常工作。您需要驗證您的程序是否正確使用了Unicode,然後將相應的行添加到應用程序清單中。 – Mgetz

+0

歡呼傢伙,它變成了鏈接器屬性,並顯示,'生成文件'屬性被設置爲'no'。你們都幫助我指出了正確的方向,因爲改變這一點解決了這個問題。 –

回答

4

爲了讓您的應用程序使用視覺樣式,你需要指定要使用ComCtl32.dll 6或更高版本,通過清單文件。 Windows隨附此文件的多個版本,因此您需要指定您需要更新版本的文件。

還要注意的是,作爲@Mgetz在評論中提到的,較新的DLL需要的Unicode正常工作,所以要確保字符集是在項目的一般屬性設置爲Unicode

您可以自行生成文件,或者讓Visual Studio根據源代碼中的項目依賴關係和鏈接器指令自動生成該文件。

所以,最簡單的方法是讓鏈接器生成它。打開該項目的Linker屬性,選擇Manifest頁面,並確保Generate Manifest設置爲Yes。然後將其放置在你的源代碼以下指令:

// broken into several lines for readability, as usual make sure there 
// are no backspaces after trailing backslashes if copy/pasting 
#pragma comment(linker, "\"/manifestdependency:type='win32' \ 
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ 
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") 

或者,您也可以手動生成清單文件。按照Enabling Visual Styles文章,它應該像這樣(的<dependency>屬性有關的一個):

<?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="CompanyName.ProductName.YourApplication" 
     type="win32" 
    /> 

    <description>Your application description here.</description> 

    <dependency> 
     <dependentAssembly> 
     <assemblyIdentity 
      type="win32" 
      name="Microsoft.Windows.Common-Controls" 
      version="6.0.0.0" 
      processorArchitecture="*" 
      publicKeyToken="6595b64144ccf1df" 
      language="*" 
     /> 
     </dependentAssembly> 
    </dependency> 

</assembly>