我有一個(gè)以前的用vc6開(kāi)發(fā)的小示例,移植到vs2005上去,今天突然發(fā)現(xiàn)了一個(gè)小問(wèn)題:直接使用vs2005生成的項(xiàng)目編譯后工具欄的風(fēng)格是xp風(fēng)格(圖1),而移植上去的項(xiàng)目工具欄風(fēng)格卻是2k風(fēng)格(圖2)。

(圖1)

(圖2)
當(dāng)然我很清楚,這是manifest導(dǎo)致的問(wèn)題,于是自然在vs2005直接生產(chǎn)的項(xiàng)目里去尋找manifest文件,結(jié)果沒(méi)發(fā)現(xiàn),轉(zhuǎn)至項(xiàng)目目錄下也沒(méi)有發(fā)現(xiàn)。感覺(jué)很是奇怪,于是我全項(xiàng)目搜索“manifest”,發(fā)現(xiàn)stdafx.h里有如下代碼:
#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
記得在vs2003里面是默認(rèn)生成一個(gè)manifest,不同項(xiàng)目里面的manifest內(nèi)容大同小異。而在vs2005里面是通過(guò)一個(gè)擴(kuò)展的#pragma comment指令來(lái)生成manifest,該指令在vs2003中是無(wú)效的。編譯器內(nèi)部具體采用什么手段就不得而知,也無(wú)暇細(xì)究,不過(guò)大概思想就是強(qiáng)制使用高版本的common control達(dá)到漂亮的顯示效果。我在c6轉(zhuǎn)到vs2005的工程對(duì)應(yīng)位置加上后,即達(dá)到了圖1的效果,包括所有的common控件都切換到了xp風(fēng)格。
這里注意幾點(diǎn):
1、必須使用unicode編譯,否則無(wú)法達(dá)到效果。vs2005默認(rèn)生產(chǎn)的項(xiàng)目是基于unicode編譯的。至于網(wǎng)上所說(shuō)的手動(dòng)添加manifest文件的方法我沒(méi)有試驗(yàn)過(guò)。
2、上面的#pragma comment指令只在vs2005中有效,在vs2003里面必須手動(dòng)把編譯字節(jié)碼改為unicode才可使common控件變?yōu)閤p風(fēng)格。
3、common控件的xp風(fēng)格最終還是取決于操作系統(tǒng)還有就是當(dāng)前的顯示主題,在2k的機(jī)器上是無(wú)法顯示出xp風(fēng)格的,在xp以上的機(jī)器上如果選擇2k經(jīng)典主題還是無(wú)法顯示出xp風(fēng)格。
posted on 2007-02-28 19:36
萬(wàn)連文 閱讀(3210)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
亂七八糟