如果你在win7下用visual studio編譯生成別人的MFC項目,你會發現生成的程序窗口沒有win7的窗體風格,按鈕沒有立體感,窗體邊框不透明,感覺就像win2000的風格
如圖下(一個簡單的端口掃描程序)
但是,你總覺得不好看,而自己寫的程序生成的才窗口卻有win7的風格,這個怎么破了?(具有win7風格的,如圖下)
聲明一下,如果你是用visual studio 2012 寫的MFC的項目,同時你的項目屬性上選擇的是“多字節字符集”的話,效果就是同圖一,而你選擇的是“unicode字符集”的話,生成的窗口屬性,可能就有win7的風格了。但是,你又想選擇多字節的字符集(MBCS),而又想有win7的風格,那如何下手了?
首先引用一下msdn的說明http://msdn.microsoft.com/en-us/library/bb773175(v=VS.85).aspx
1.首先介紹一個最簡單的方法,就是在你的代碼前面加入下面的編譯雜注,不過你的IDE一定要為vs2005或以后的版本
#pragma comment(linker,"\"/manifestdependency:type='win32' \ name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
編譯運行即可········
2.還有一個就是使用清單文件的方法,新建一個文本文件,改名為*.manifest,粘貼下面的xml文本
<?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>
保存后,在項目屬性中——清單工具——輸入輸出,選擇你對應的.manifest文件,建議放到res/文件夾下,或者選擇插入指定的資源文件
(詳見http://blog.sina.com.cn/s/blog_616d3ec20100zuwl.html)
兩種方法都可以實現win7的風格,不過根據微軟的說明,你必須有ComCtl32.dll version 6或更高版本( 一般來說動態dll的加入不需考慮)
方便的話,推薦第一種方法(第二種我試的時候有bug,程序有時會莫名的崩潰,而第一種運行相當穩定,按道理兩者本質應該一樣········)