XP风格界面
關(guān)于讓自己的程序界面實(shí)現(xiàn)XP風(fēng)格這個(gè)問題,在網(wǎng)上的討論很多,大多數(shù)的作法都是寫一個(gè).manifest文件,然后將文件名改一下,比如.exe文件為test.exe,就將這個(gè).manifest文件改名成test.exe.manifest,并將其和test.exe放在同一個(gè)目錄里,這樣test.exe在XP或2003(必須啟動(dòng)Themes服務(wù))下運(yùn)行時(shí)就會(huì)呈現(xiàn)XP界面風(fēng)格。 有件事情必須說一下,按照上面的方法,test.exe必須先調(diào)用InitCommonControls函數(shù)(已經(jīng)廢除,不建議使用)或者InitCommonControlsEx函數(shù)從comctl32.dll中注冊(cè)組件類。這一步在VB中是必須的,但是在VC(MFC程序)中,我們好像并沒有調(diào)用這個(gè)函數(shù),可是編譯后的程序?yàn)槭裁催€能實(shí)現(xiàn)XP風(fēng)格呢?原因是MFC替我們做了這件事。如果我們是讓MFC注冊(cè)的窗口類,它會(huì)調(diào)用_AfxInitCommonControls函數(shù),而_AfxInitCommonControls的主要操作就是把comctl32.dll裝載進(jìn)來,然后判斷.dll文件中有沒有InitCommonControlsEx函數(shù),如果有就調(diào)用,沒有則調(diào)用InitCommonControls,到此真相大白。可能有人和我一樣,看著以“afx”開頭的窗口類名稱很不舒服,于是喜歡自己注冊(cè)窗口類,但在我們注冊(cè)自己的窗口類時(shí)一定要確保調(diào)用過InitCommonControlsEx函數(shù),這點(diǎn)一定要記得,如果忘記的話你將會(huì)看到一個(gè)空白的窗口。 說了這么多,有點(diǎn)跑題了,呵呵。現(xiàn)在回到正題。我上面提到的方法很多網(wǎng)站上都有介紹,但是卻有一個(gè)致命的缺點(diǎn),就是必須有那個(gè).manifest文件如影隨形,exe文件到哪,它就得到哪,這當(dāng)然是我們不愿意看到的。有沒有辦法能把它“合”到exe文件中呢?答案是肯定的,這也正是本文題目中“無負(fù)擔(dān)”三個(gè)字的意思。 當(dāng)然了,那個(gè).manifest文件還是要有的,只不過不是和.exe文件放在同一目錄中,而是把它放到資源文件中,編譯后生成.res文件,link后自然就和.exe文件“合”到一起了。 首先,請(qǐng)出.manifest文件:
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity ?name="XP style manifest" ?processorArchitecture="x86" ?version="1.0.0.0" ?type="win32"/> <dependency> ?<dependentAssembly> ??? <assemblyIdentity ????? type="win32" ????? name="Microsoft.Windows.Common-Controls" ?? ???version="6.0.0.0" ????? processorArchitecture="x86" ????? publicKeyToken="6595b64144ccf1df" ????? language="*" ??? /> ?</dependentAssembly> </dependency> </assembly> |
| 1 24 “XPStyle.manifest” |
?
轉(zhuǎn)載于:https://www.cnblogs.com/hitszxin/archive/2008/04/10/1147080.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: C#集合类(HashTable, Dic
- 下一篇: 用 C# 做组件设计时的事件实现方法讨论