專利名稱:使用匯合點的主題識覺管理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng),特別是涉及當提供系統(tǒng)部件時使用匯合點(fusion)的主題識覺管理(theme aware management)。
在商業(yè)和家庭環(huán)境中的計算機用戶已經(jīng)變成習慣于使用具有圖形操作系統(tǒng)的計算機。例如,許多用戶操作其上裝有微軟公司“視窗”操作系統(tǒng)的計算機。這些圖形操作系統(tǒng)的某些部件公知為“控件”。例如,一個控件可以是“OK”按鈕,其通常是其中寫有“OK”的長方形按鈕。通過移動光標在按鈕上和單擊鼠標,將開始一個與該控件相關(guān)的已知操作。還有許多其它的控件,例如包括滾動條,對話框和滑動條(slider)。除了控件,隨著在計算機顯示上的需要,圖形操作系統(tǒng)還畫出或提供其它的圖形部件,例如圖文框,最小化框和關(guān)閉框。
視窗中有兩種普通的控件標準控件和用戶控件。標準控件是由操作系統(tǒng)提供的。創(chuàng)建、畫出和拖動標準控件的代碼是包含在公共控件庫(DLL)中,其是視窗的一部分。用戶控件是所有其它的控件。用戶控件可以由操作系統(tǒng)的制造商或者第三方創(chuàng)建。用于用戶控件的代碼是包含在對應的單獨庫(DLL)或者在應用程序中。
當前,當諸如控件的圖形用戶界面部件是通過應用程序使用時,該應用程序請求創(chuàng)建該部件的實例(instance)。隨之,操作系統(tǒng)將類消息傳輸?shù)皆摬考?,指令該部件提供自身。該應用程序在路由從主視窗到目標控件的消息中起作用,但是該控件代碼進行畫圖。該應用程序使用應用程序編碼接口(API)來創(chuàng)建和與該控件交互。API用作為由其它程序使用的軟件接口,類似于鍵板用作為計算器的界面。API是高水平編程的基本概念。在高水平編程中,程序常常不是由其本身來執(zhí)行任務。而是程序要求一些其它的程序來執(zhí)行這些任務。例如,程序頻繁地將各種任務委托到底層的操作系統(tǒng)。繼續(xù)上述的例子,應用程序?qū)⒖丶奶峁┪薪o該控件的代碼。
在現(xiàn)有技術(shù)的環(huán)境中,當類給消息是通過控件提供其自己被接收時,該控件將使用其自己的畫圖軟件代碼來畫出自己。在該現(xiàn)有技術(shù)的環(huán)境中,該控件知道被認為像什么,被認為如何做,以及能夠在計算機的用戶界面上實現(xiàn)這種顯示。因此,應用程序可以將可視供給(rendering)的所有方面委托給這些控件,避免包含軟件代碼的需要,該軟件代碼支持在其主機應用程序內(nèi)的該控件的可視供給。
通過利用由操作系統(tǒng)定義和提供的標準控件,所有的控件將具有相同的外表,與應用程序無關(guān)。圖形操作系統(tǒng)的用戶能夠僅僅改變控件的有限數(shù)目的特征。在“視窗”操作系統(tǒng)中,用戶能夠改變在監(jiān)視器上顯示各種控件和部件所使用的顏色主題。用戶還能夠選擇將由控件和部件使用的一小組的字體(font)。因此,可以改變控件和部件的顏色、字體和有限量的尺寸。但是,控件和部件的基本的外形是通過在控件庫中的供給軟件代碼決定的,該控件庫包含了特定的圖形部件或控件。在現(xiàn)有技術(shù)環(huán)境中,為改變控件或者圖形部件的外表,一定要改變供給軟件代碼。例如,如果希望改變“OK”按鈕的外表,一定要改變在包含該按鈕控件的操作系統(tǒng)DLL文件中的供給軟件代碼,并且該DLL文件在二進制級上重構(gòu)。如果是希望提供作為橢圓的而不是作為傳統(tǒng)的長方形的按鈕,則軟件代碼將不得不因此而改變。如果不是不可能,則這種方法將使計算機用戶和軟件制造商容易改變控件和圖形部件之外表變得困難。
為了增強計算機的用戶經(jīng)驗,通過改變各種圖形部件的總的可見外表或“主題”,用戶希望具有改變圖形顯示的綜合“看和感覺”的能力。換言之,如果用戶不僅能夠改變在監(jiān)視器上出現(xiàn)的圖形部件的顏色和字形,希望還能夠改變這些圖形部件的外表。例如,希望能夠改變和控制控件部件的配置,以及定義控件或其部件的形狀。還希望控制如何畫出控件或其零件的所有方面。由于在現(xiàn)有技術(shù)環(huán)境的DLL文件中存在的控件和圖形部件是用它們自己提供軟件代碼“硬編碼”,因此改變所有這些控件和部件的外表是困難和麻煩的。做這需要求重新編碼每一個的控件以獲得希望的外表。如果要求多個可見格式,則它們的每一個將不得不預先定義且每個都被“硬編碼”到每個控件中。而且,如果要使用不同的提供技術(shù),則還一定要記錄這些控件。例如,如果使用位圖來提供這些控件和希望使用矢量的提供器,則一定要改變每個控件。
某些現(xiàn)有技術(shù)方法企圖尋址上述狀態(tài)。但是,這些方案并不能使得整個系統(tǒng)的所有控件和圖形部件被改變。相反,現(xiàn)有技術(shù)方法僅僅尋址被顯示部件族中的有限部分。這使得可改變一些控件和圖形部件的外表,但剩余的卻不能改變。這種方法使得外表不能夠按希望那樣被協(xié)調(diào)的改變。
現(xiàn)有技術(shù)方法是被這種技術(shù)進一步限制的,它們用來實現(xiàn)圖形用戶界面可見單元之外表特性的控制?,F(xiàn)有技術(shù)外表改變裝置是通過截取被傳輸?shù)皆摽丶念愄峁┬盘柡褪褂玫图壊僮飨到y(tǒng)圖形API來操作的,用該控件的提供代碼來代替它們自己的提供代碼。但是,圖形用戶界面中僅僅一部分可見元件是可截取的。由于現(xiàn)有技術(shù)方法僅僅依賴于操作系統(tǒng)信號的中斷,不僅它們自己是不能夠控制根據(jù)該協(xié)議不起作用的可見單元的外表,他們也不能夠給可見單元的作者提供標準的工具來修改提供代碼以適應外部控件。
類似地,用于提供非客戶視窗部件例如窗口框架和最小化框的現(xiàn)有技術(shù)方法具有缺點?,F(xiàn)有技術(shù)方法要求用戶購買分離的軟件包以便支持這些部件的主題構(gòu)成?,F(xiàn)有技術(shù)方法是不完全的,因為它們僅僅允許固定子族的控件是可構(gòu)成主題的。而且,他們實現(xiàn)構(gòu)成僅僅依賴于標準視窗消息的中斷,不用任何控件或者主題畫圖的USER32知識。
在傳統(tǒng)操作系統(tǒng)中,非客戶視窗部件已經(jīng)被視窗核心模式中的缺省視窗程序所提供,其響應復合族視窗消息和API調(diào)用。將所有主題變量放進單個缺省視窗過程中將是不實際的。將主題特性加到缺省視窗過程將要求更復雜的代碼、代碼的完全重新編譯和艱苦的測試以確定代碼是否適當?shù)馗倪M了功能并且不中斷任何現(xiàn)行的應用程序。
而且,在提供過程中,中斷由操作系統(tǒng)傳輸給控件的所有相關(guān)信號是不可能的。另外,無論在傳統(tǒng)操作系統(tǒng)或者在分離軟件包的主題構(gòu)成方法中,都不可能再現(xiàn)由諸如激活順序的控件實現(xiàn)的復雜可見行為。因此,現(xiàn)有技術(shù)方法,其包括操作系統(tǒng)方法和由分離軟件包實現(xiàn)的方法是容易產(chǎn)生功能性不兼容,視覺缺陷和性能問題。
而且,現(xiàn)有技術(shù)是受這種方式限制的,其中軟件開發(fā)者能夠在可見的外表上設計滿足通用性的控件。使用傳統(tǒng)的“所有者畫”和“用戶畫”方法,應用程序開發(fā)者已經(jīng)能夠用僅僅有限組項提供控件?,F(xiàn)有技術(shù)方法不含有這種結(jié)構(gòu),其允許控件的作者有能設計是“主題識覺”的控件的靈活性。因此,控件的作者不被允許具有自由度,該自由度在創(chuàng)建能夠被容易和清楚可見地改變之控件的創(chuàng)建控件中是需要的。
而且,提供主題識覺控件的系統(tǒng)應當含有傳統(tǒng)應用程序和新的應用程序,它們能夠與主題識覺控件一起工作。已經(jīng)開發(fā)和測試了與不是主題識覺的傳統(tǒng)控件一起工作的傳統(tǒng)應用程序。已經(jīng)開發(fā)和測試了與主題識覺控件一起工作的新的應用程序。主題識覺結(jié)構(gòu)一定允許兩種類型的應用程序工作在相同的計算機系統(tǒng)上。
例如,如果提供了主題的系統(tǒng)要求所有的應用程序使用主題構(gòu)成控件,即使它們沒有用新控件測試,在應用程序開發(fā)者期望時,應用程序控件將不被提供。因此,這些控件可以出現(xiàn)為與應用程序的外觀不一致,或者相對于該應用程序為錯誤的地點,或者可以一起停止作用。應用程序的寫作者應當能夠控制它們的應用程序是否使用新構(gòu)成主題或者繼續(xù)使用傳統(tǒng)的控件。
另一個問題是新應用程序不能夠在不是主題識覺的傳統(tǒng)系統(tǒng)上工作。新應用程序?qū)⒈婚_發(fā)和測試用于提供了主題的新系統(tǒng)。當這些新應用程序被裝載到不是主題識覺的舊系統(tǒng)上時,不僅應用程序的控件將不被主題化,而且在許多情況下,應用程序?qū)⑹鞘〉?。因此,對于主題識覺應用程序工作在非主題識覺系統(tǒng)上是沒有辦法的。
根據(jù)本發(fā)明,上述問題是這樣解決的創(chuàng)建控件的主題識覺版本和應用稱為“匯合點(fusion)”的軟件部件選擇技術(shù)以選擇用于主題能力(capable)應用程序的主題識覺版本。本發(fā)明包括中繼功能,其將視窗提供和尺寸請求從缺省視窗提供功能轉(zhuǎn)移到主題識覺視窗提供功能。
在已經(jīng)確定應用程序是否支持主題構(gòu)成能力之后,本發(fā)明的一個方面是用于將兩組控件函數(shù)的一個連接到應用程序存儲映射中的系統(tǒng)和方法。該系統(tǒng)確定應用程序是否具有表明使用控件函數(shù)之主題構(gòu)成組的清單文件。控件主題構(gòu)成組能夠與主題管理者的函數(shù)交互,以用主題方式提供圖形部件。
該系統(tǒng)和方法還包括將提供消息截取到視窗的截取分支。截取分支從缺省視窗提供例行程序(routine)中選定提供消息,并將該消息送到以主題方式提供視窗圖形部件的主題管理者函數(shù)中。應用程序接口調(diào)用也被路由選定到主題管理者,以便響應該應用程序接口,視窗非客戶圖形部件能夠使用主題被測量或者被提供。通過使用一組與以主題方式提供控件的主題管理者的函數(shù)相交互的主題控件函數(shù),該系統(tǒng)和方法還包括提供用戶控件和外殼公用控件的方法。
本發(fā)明可以以計算機處理、計算系統(tǒng)或者以諸如計算機編程產(chǎn)品或者計算機可讀媒體的制造商產(chǎn)品來實現(xiàn)。計算機編程產(chǎn)品可以是由計算機系統(tǒng)可讀的計算機存儲媒體以及編碼用于執(zhí)行計算機處理的計算機指令程序。計算機編程產(chǎn)品還可以是由計算系統(tǒng)可讀的載體上的傳播信號以及編碼用于執(zhí)行計算機處理的計算機指令程序。
本發(fā)明減小了應用程序兼容性危險和比原先的方法快。除了將控件與提供技術(shù)隔開之外,本發(fā)明還提供了將控件與單個主題隔開。本發(fā)明允許用戶從各種不同主題中選取用戶喜歡的主題,并且增強了用戶的計算經(jīng)驗。
本發(fā)明的其它優(yōu)點和新特征將在下面的說明中提出,并且對審查該領(lǐng)域的本領(lǐng)域技術(shù)人員其將在一定程度上變得清楚,或者通過從本發(fā)明的實際中得知。
圖1是表示用在本發(fā)明中的結(jié)構(gòu)的示意圖;圖2表示用于實現(xiàn)本發(fā)明的合適的計算系統(tǒng)環(huán)境;圖3是表示具有不同主題外表的圖形部件的例子;圖4是表示匯合點處理的操作流程圖;圖5是表示主題構(gòu)成視窗部件之示例性處理的操作流程圖;圖6是表示主題文件之結(jié)構(gòu)的示意圖;圖7是表示通過請求圖形部件之應用程序的本發(fā)明應用的流程圖。
在圖1所示的本發(fā)明的一個實施例中,操作系統(tǒng)134是具有圖形顯示控件和與此相關(guān)的部件的圖形操作系統(tǒng)。這些控件包括但是不局限于諸如滾動條、按鈕和滑動條。其它的控件是在本發(fā)明的范圍內(nèi),其對本領(lǐng)域技術(shù)人員來說是已知的。其它的圖形顯示部件也是在本發(fā)明的范圍內(nèi)。這些部件包括但決不局限于顯示器中視窗的非客戶部分,例如為在用戶界面上應用程序顯示周圍的窗框,最小化框和關(guān)閉框。
圖1中,示出了用在本發(fā)明實施例中的基本結(jié)構(gòu)。如果由于對上述相關(guān)專利申請的熟悉導致讀者已經(jīng)熟悉了主題構(gòu)成系統(tǒng)的操作,則建議讀者前進到圖4和圖5的說明以理解本發(fā)明的與用于主題構(gòu)成系統(tǒng)部件之主題識覺結(jié)構(gòu)相關(guān)的實施例。該結(jié)構(gòu)用例子應用程序138和139來說明,其是開放的和在計算機110上運行。由于諸如APPI138的應用程序正在運行,其常常要求在計算機110的監(jiān)視器191上要被提供或者被顯示的控件或者圖形部件。
圖1中,庫208,210和212通過匯合點模塊214被連接到應用程序138和139上。匯合點模塊214在不需要改變應用程序本身的情況下使應用程序中控件的主題能夠請求控件的可主題的版本。通過使用顯示清單215,匯合點模塊214使應用程序138和139在運行時間能夠裝載DLL208,210或212的專用版本。匯合點顯示清單215規(guī)定其中應用程序要運行的環(huán)境,其允許多個DLL版本存在在一個機器上。因此,匯合點顯示清單214將映射對部件的請求,使得其作為DLL212中的可主題單元提供,代替來自DLL208的非可主題單元。在不改變應用程序的代碼的情況下,這允許現(xiàn)存應用程序?qū)⒖杀恢黝}化。匯合點顯示清單214還允許新的可主題控件被放置在來自現(xiàn)有DLL的不同的DLL中,其簡化了實現(xiàn)方案和將兼容危險最小化。
圖2表示了合適的計算系統(tǒng)環(huán)境100的例子,本發(fā)明可以在其上實現(xiàn)。計算系統(tǒng)環(huán)境100僅僅是合適的計算系統(tǒng)環(huán)境的一個例子,并不打算用于對使用范圍或者本發(fā)明功能的任何限制。計算環(huán)境100既非應當被解釋為具有任何依賴性又非被解釋為與在示例性操作環(huán)境100中說明的部件的任何一個或者組合相關(guān)的要求。
本發(fā)明用許多其它通用目的或者專用目的之計算系統(tǒng)環(huán)境或者結(jié)構(gòu)是可操作的??梢赃m用于本發(fā)明的公知計算系統(tǒng),環(huán)境,和/或結(jié)構(gòu)的例子包括但不局限于個人計算機,服務器計算機,手持式或者膝上型裝置,多處理器系統(tǒng),基于微處理器系統(tǒng),頂置盒,可編程用戶電子裝置,網(wǎng)絡PC,小型計算機,大型計算機,包括任何上述系統(tǒng)或者裝置等的分布式計算環(huán)境。
本發(fā)明可以在通過計算機執(zhí)行的諸如程序模塊的計算機可執(zhí)行指令的普通文本來說明。通常,程序模塊包括例行程序,程序,對象,部件,數(shù)據(jù)結(jié)構(gòu)等,它們完成特定的任務或者實現(xiàn)特定的抽象數(shù)據(jù)類型。本發(fā)明還實用于分布式計算環(huán)境中,在這里任務是通過遠程處理裝置完成的,這些遠程處理裝置通過通信網(wǎng)絡被連接。在分布式計算環(huán)境中,程序模塊可以定位在包含有存儲器存儲器件的本地和遠程計算機存儲媒體中。
參考圖2,用于實現(xiàn)本發(fā)明的示例性系統(tǒng)包括呈計算機110形式的通用目的計算裝置。計算機110的部件可以包括但不局限于處理單元120,系統(tǒng)存儲器130,以及將包括系統(tǒng)存儲器的各種系統(tǒng)部件耦合到處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是任何幾種類型的總線結(jié)構(gòu),其包括存儲器總線,或者存儲器控制器,外圍總線,以及使用各種總線結(jié)構(gòu)之任何一個的局部總線。通過例子但不限制,這種結(jié)構(gòu)包括工業(yè)標準結(jié)構(gòu)(ISA)總線,微通道結(jié)構(gòu)(MCA)總線,增強ISA(EISA)總線,視頻電子裝置標準協(xié)會(VESA)局部總線,和也公知為Mezzanine總線的外圍部件互連(PCI)總線。
計算機110典型地包括各種計算機可讀媒體。計算機可讀媒體能夠是任何可獲得的媒體,其能夠通過計算機110訪問,包括易失性和非易失性媒體,可移動和非可移動媒體。通過例子但不限制,計算機可讀媒體可以包括計算機存儲媒體和通信媒體。計算機存儲媒體包括易失性和非易失性媒體,可移動和非可移動媒體,它們通過用于信息存儲的任何方法或者技術(shù)實現(xiàn),該信息包括例如計算機可讀指令,數(shù)據(jù)結(jié)構(gòu),程序模塊或者其它數(shù)據(jù)。計算機存儲媒體包括但不局限于RAM,ROM,EEPROM,閃爍存儲器或者其它存儲技術(shù),CD-ROM,數(shù)字通用盤(DVD)或者其它光盤存儲,磁帶盒,磁帶,磁盤存儲或其它磁存儲器件,或者能夠用來存儲期望的信息和能夠用計算機110訪問的任何其它媒體。通信媒體典型地包括計算機可讀指令,數(shù)據(jù)結(jié)構(gòu),程序模塊或者在諸如載波或其它傳輸機理的調(diào)制數(shù)據(jù)信號中的其它數(shù)據(jù),以及包括任何信息傳遞媒體。術(shù)語“調(diào)制數(shù)據(jù)信號”意思是具有一個或多個特征組的或者以這種方式改變以編碼信號中的信息的信號。通過例子但不是限制,通信媒體包括諸如有線網(wǎng)絡或者直達線連接的有線媒體,以及諸如聲音,RF,紅外線和其它無線媒體的無線媒體。上述的任何組合也應當包括在計算機可讀媒體的范圍內(nèi)。
系統(tǒng)存儲器130包括計算機存儲媒體,其是諸如只讀存儲器(ROM)131和隨機存取存儲器(RAM)132的易失性和/或非易失性存儲器形式?;据斎?輸出系統(tǒng)133(BIOS),其包含例如在啟動時幫助在計算機110內(nèi)的單元之間傳輸信息的基本例行程序,典型地被存儲在ROM131中。RAM132一般包含數(shù)據(jù)和/或程序模塊,其可以由處理單元120立即訪問和/或即時被處理單元120操作。通過例子但不是限制性的,圖2表示了操作系統(tǒng)134,應用程序138和139,其它程序模塊136和程序數(shù)據(jù)137。
計算機110也可以包括其它的可移動/非可移動的,易失性/非易失性計算機存儲媒體。僅僅作為例子,圖2表示了硬盤驅(qū)動140,其從可移動的非易失性磁性媒體中讀或?qū)?;磁盤驅(qū)動151,其從可移動的非易失性磁盤152中讀或?qū)?;和光盤驅(qū)動155,其從諸如CD ROM或其它光學媒體的可移動的非易失性光盤156中讀或?qū)?。能夠被用于示例性操作環(huán)境中的其它可移動/非可移動的易失性/非易失性計算機存儲媒體包括但不限制于磁帶盒,快速存儲卡,數(shù)字通用盤,數(shù)字視頻帶,固態(tài)RAM,固態(tài)ROM,等。硬盤驅(qū)動141通過諸如接口140的非可移動存儲接口一般被連接到系統(tǒng)總線121,磁盤驅(qū)動151和光盤驅(qū)動155通過諸如接口150的可移動存儲接口一般被連接到系統(tǒng)總線121。
上面所述和圖2所示的驅(qū)動及它們相關(guān)的計算機存儲媒體提供存儲計算機可讀指令,數(shù)據(jù)結(jié)構(gòu),程序模塊和用于計算機110的其它數(shù)據(jù)。例如圖2中,硬盤驅(qū)動141被表示為存儲操作系統(tǒng)144,應用程序145,其它程序模塊146和程序數(shù)據(jù)147。注意,這些部件不是與操作系統(tǒng)134,應用程序138和139,其它程序模塊136和程序數(shù)據(jù)137相同或是不同。操作系統(tǒng)144,應用程序145,其它程序模塊146和程序數(shù)據(jù)147這里以不同的數(shù)字給出,以說明至少它們是不同的拷貝。用戶可以將命令和信息通過諸如鍵盤162和通常稱為鼠標、跟蹤球或觸摸板的點擊裝置161的輸入裝置輸入到計算機110中。其它的輸入裝置(未示出)可以包括話筒,遙控桿,游戲盤,衛(wèi)星天線,掃描器等。這些輸入裝置通過被耦合到系統(tǒng)總線的用戶輸入接口160常常被連接到處理單元120,但也可以通過諸如并行端口,游戲端口或通用串行總線(USB)的其他接口和總線結(jié)構(gòu)來連接。經(jīng)過諸如視頻接口190的接口,監(jiān)視器191或其它類型的顯示裝置也可以被連接到系統(tǒng)總線121。除監(jiān)視器之外,計算機還可以包括其它的外設輸出裝置,例如揚聲器197和打印機196,它們可以通過輸出外設接口195被連接。
計算機110可以工作在使用邏輯連接到一個或多個遠程計算機例如遠程計算機180的網(wǎng)絡化環(huán)境中。遠程計算機180可以是個人計算機,服務器,路由器,網(wǎng)絡PC,同等實體或其它公共網(wǎng)絡節(jié)點,并且一般包括相對于計算機110的許多或所有上述的單元,盡管僅僅存儲器存儲裝置181已經(jīng)表示在圖2中。圖2描述的邏輯連接包括局域網(wǎng)絡(LAN)171和廣域網(wǎng)絡(WAN)173,但是也可以包括其它網(wǎng)絡。這種網(wǎng)絡化環(huán)境在辦公室、企業(yè)計算機網(wǎng)絡、內(nèi)部網(wǎng)絡和因特網(wǎng)中是平常的。
當被用在LAN網(wǎng)絡化環(huán)境中時,計算機110通過網(wǎng)絡接口或者適配器170被連接到LAN171。當被用在WAN網(wǎng)絡化環(huán)境中時,計算機110一般包括調(diào)制解調(diào)器172或其它用于在WAN173上建立通信的裝置,例如因特網(wǎng)??梢允莾?nèi)部或者外部的調(diào)制解調(diào)器172經(jīng)過用戶輸入接口160或者其它合適的機構(gòu)被連接到系統(tǒng)總線121。在網(wǎng)絡化環(huán)境中,相對計算機110或者其部分所描述的程序模塊可以被存儲在遠程存儲器存儲裝置中。作為例子但不是限制性的,圖2表示了作為駐留在存儲器裝置181上的遠程應用程序185??梢岳斫?,所示的網(wǎng)絡連接是示例性的,可以使用在計算機之間建立通信連接的其它裝置。
盡管沒有示出計算機110的許多其它內(nèi)部部件,本領(lǐng)域普通技術(shù)人員將理解這些部件和相互連接是公知的。因此,涉及計算機110內(nèi)部結(jié)構(gòu)的附加細節(jié)有關(guān)本發(fā)明將不公開說明。
本領(lǐng)域技術(shù)人員將理解諸如操作系統(tǒng)134,應用程序138和139,以及數(shù)據(jù)137的程序模塊經(jīng)過一個存儲器存儲裝置被提供給計算機110,存儲器存儲裝置可以包括ROM131,RAM132,硬盤驅(qū)動器141,磁盤驅(qū)動器151或者光盤驅(qū)動器155。優(yōu)選地,硬盤驅(qū)動器141用來存儲數(shù)據(jù)137和程序,該程序包括操作系統(tǒng)134和應用程序138和139。
當計算機110打開或復置時,存儲在ROM131中的BIOS133指示處理單元120將操作系統(tǒng)從硬盤驅(qū)動141裝入至RAM132。一旦操作系統(tǒng)144被裝入至RAM132中,處理單元120執(zhí)行操作系統(tǒng)代碼和引起與操作系統(tǒng)134之用戶界面相關(guān)的視頻元素被顯示在監(jiān)視器191上。當諸如應用程序138的應用程序被用戶打開時,程序代碼和相關(guān)數(shù)據(jù)從硬盤驅(qū)動器141中讀出和存儲在RAM192中。
圖3示出了具有各種外表的圖形部件的顯示例子。如圖3所示,控件可以采用OK按鈕200、Cancel按鈕202和Apply按鈕204的形式。本發(fā)明允許可視地改變控件和其它部件的外表以便更好地適合于計算機用戶的要求。除顏色和字形選擇之外,本發(fā)明允許改變控件的外表。例如,控件部件的配置能夠按要求定義。例如,滾動條能夠被賦予上和下箭頭,其在滾動條的底部相互靠近,代替向上的箭頭和在底部的向上和向下的箭頭。而且,可以定義控件和其部件的形狀。如圖3所示,對于每一個按鈕200,202和204,示出了4個不同的整體外表。每個不同外表的設定是協(xié)調(diào)的并且被稱為“主題”。每個主題是由圖3中的一個按鈕行表示。盡管僅僅在圖3中示出了4個主題,計算機用戶可以選擇創(chuàng)建無限多的主題。主題是相對特殊對象或者希望視覺環(huán)境的外表特征的集合或組。正如下述,本發(fā)明允許計算機的用戶指定多個預定義主題的哪一個將被應用到視頻顯示的控件和其它部件。而且,在不需要改變控件和其他圖形部件的軟件代碼的情況下,本發(fā)明允許新的視頻主題被加到系統(tǒng)。另外,在不改變控件和其他圖形部件的軟件代碼的情況下,本發(fā)明允許附加新的提供技術(shù)或者改進現(xiàn)有的提供技術(shù)。
作為應用程序,例如圖1中的APP2139,運行它常常要求在計算機110的監(jiān)視器191上賦予或者顯示控件或圖形部件。例如,參考圖3,OK按鈕200的顯示可以被監(jiān)視器上的應用程序所需要。應用程序139請求創(chuàng)建按鈕200的實例。根據(jù)這,操作系統(tǒng)將類消息傳遞到指令其畫出自己的控件。這個請求將被選定到包含特殊控件的動態(tài)連接庫(DLL)上。作為例子,視窗操作環(huán)境中的DLL被稱為User32.dll或者ComCtl32.dll(V5),其分別在圖1中表示為208和210。庫208和210存在于圖形操作系統(tǒng)134內(nèi)。庫208和210一般通過缺省用應用程序139來連接。正如后面要說明的,庫208和210的連接能夠通過匯合點214(fusion)的使用來優(yōu)先。庫208和210內(nèi)定義的控件包含提供在監(jiān)視器上的控件所需要的畫圖代碼。因此,為改變庫208和210中控件的外表對于庫208和210中的每個控件,一定要改變軟件的畫圖代碼。
附加庫DLL,圖1中所示的212,類似于庫210,在于其包含若干預先定義的可以由應用程序138使用的控件和圖形部件185。廣義地說,DLL212包含若干將被圖形顯示的部件。但是,在庫212中,這些控件被不同地定義,使得它們是“主題識覺”的。除了包含提供多視頻類型控件所需要的所有軟件代碼之外,這些控件被定義成具有有關(guān)控件的某些基本的信息或者值,例如,控件的地點,部件和狀態(tài)。
地點是在用戶界面上用戶所希望的位置。部件是構(gòu)成控件的不同項目。作為例子,滾動條控件具有加長的矩形桿狀零件,在桿狀零件中滑動的較小的拇指零件,和在桿狀零件的每端上的箭頭零件??丶臓顟B(tài)說明當前的外表,其反映了那個零件的功能狀態(tài)。例如,按鈕能夠是激活的,可按壓的,熱的(hot)(當鼠標在控件上時),阻塞的或者不激活的。
DLL212中的控件也包含如果沒有選擇主題的話提供控件所需要的畫圖代碼,以及通過代碼的主題識覺通路。DLL212從主題管器DLL216中請求提供或者畫圖服務。主題管理器216提供請求提供服務和在顯示器的說明地點上畫出控件,在說明狀態(tài)中具有說明零件。
主題管理器216包含一系列的API,其允許庫212與主題管理器交互和通信。API允許控件的作者在DLL212內(nèi)定義控件,作為一系列的零件和狀態(tài),而不需要軟件提供代碼。這些API通常被分成三種類型畫圖API218,信息API220和利用API222。畫圖API218通常用在提供和在所需控件零件和其它部件之布置中的幫助中。信息API220通常用于獲得有關(guān)控件之當前定義外表的信息,以允許控件被單獨地定型。利用API222是被不同于這些控件的操作系統(tǒng)所使用的那些API,來控制主題選擇。利用API222包括能夠用于列舉所安裝主題和裝載它們之一個的功能。
畫圖API218是主題識覺畫圖服務的集合。在畫圖API218組中的每個單獨的API被用來實現(xiàn)不同的畫圖服務。通常,每個API要求附近之圖形部件的專用零件和狀態(tài)。提供了稱為“DrawThemeBackground”的API,其畫出專用主題的邊框,并且在希望的地點填上專用零件和狀態(tài)。類似地,提供了稱為“DrawThemeText”的API,其畫出使用用于專用零件和狀態(tài)的專用主題的顏色和字形的專用文本。
作為例子,如果由應用程序138請求OK按鈕200(圖3),DLL212中的控件將通過諸如DrawThemeBackground或者DrawThemeText的函數(shù)調(diào)用將零件,狀態(tài)和地點信息傳遞給畫圖API218。正如下面更詳細說明的,該零件和狀態(tài)信息是與外表特征匹配的,并且主題管理器216在監(jiān)視器上畫出控件。畫圖API218還包括被稱為“GetThemeBackgroundContentRect”的API。該API使控件獲得被定義主題背景之內(nèi)容的大小。通常,這是在邊框或者邊界內(nèi)的區(qū)域。通過使用該API,控件能夠確定該背景內(nèi)的可得到區(qū)域,其中放置了項目。當使用該API時,DLL212中的控件用專用零件和狀態(tài)請求有關(guān)圖形部件的信息。這個信息是通過主題管理器216獲得的并且被返回到該控件。提供了被稱為“GetThemeBackgroundExtent”的類似API,計算專用主題背景的大小和地點,其用于被給出內(nèi)容矩形范圍的專用零件和狀態(tài)。當知道內(nèi)容時可以使用該API,并且基于該內(nèi)容,需要確定用于主題背景的外部邊界。提供了被稱為“GetThemePartSize”的另一個API,用來檢索主題作者,其被規(guī)定為控件零件的最小和常規(guī)大小。
畫圖API218還包括稱為“GetThemeTextExtent”的API。當在主題字體中提供時,該API用來計算規(guī)定文本的大小。因此該API能夠用來確定給定文本串的寬度和高度。因此控件的作者能夠規(guī)定具有與此相關(guān)之文本的零件和狀態(tài),并且使用該API從主題管理器216中獲得與文本串的大小相關(guān)的信息。類似地,稱為“GetThemeTextMetrics”的另一個API是可獲得的,其能夠用來獲得有關(guān)所用字形的大小信息。因此,該API可以用來獲得諸如平均字體字符之寬度的信息。換言之,該API用來從主題管理器216中獲得該控件需要的有關(guān)專用主題字形之大小的信息。
在畫圖API218中還提供了稱為“GetThemeBackgroundRegion”的API。在一些操作系統(tǒng)中,區(qū)(region)是一種描述非矩形形狀的的方法。區(qū)還能夠被認為是一種具有透明零件的圖象。該API用來計算規(guī)則或者部分透明之專用主題背景的區(qū)。換言之,在專用零件和狀態(tài)的窗框背景中,該API可以用來確定什么是透明的,什么是不透明的。因此,該API支持控件和零件非矩形形狀的定義。類似地,提供了稱為“HitTestThemeBackground”的API。該API用來確定在被點擊的規(guī)定零件的背景中的點是否是在透明的或者在不透明的區(qū)域中。通過DLL212中的控件該API用來從主題管理器216中獲得信息。如果該點擊是在透明區(qū)域中,可以不需要激活。相反,如果該點擊是在不透明區(qū)域中,可以需要激活。
包含在畫圖API218中的另一個API被稱為“DrawThemeLine”。該API使得主題定義一個線的類類型。該類類型可以通過調(diào)用“DrawThemeLine”API被訪問和用于專用零件。類似地,提供了稱為“DrawThemeBorder”的API,其允許所定義主題邊界被專用。該主題邊界可以畫為利用該API的專用零件。
提供了稱為“DrawThemelcon”的API,其允許所定義主題圖標被提供,可以包括專用主題的特殊結(jié)果。例如,當鼠標直接在圖標上時,主題圖標可以具有不同的外表,例如發(fā)光外表。
畫圖API218還包含稱為“IsThemePartDefined”的API,其可以用于確定主題是否已經(jīng)定義了用于專用零件和狀態(tài)的參數(shù)。如果零件在主題內(nèi)沒有定義,則控件能夠畫出該零件本身。如果零件已經(jīng)被主題定義,則主題管理器216將根據(jù)主題定義信息提供該零件。提供了稱為“IsThemeBackgroundPartiallyTransparent”的另一個API。該API用來確定背景是否是矩形的或者是具有透明零件的區(qū)。該API可以用來簡單化該控件代碼。如果在背景中沒有透明,則沒有必要通過使用“HitTestThemeBackground”API來進行任何點擊測試。
重要的是,畫圖API218還包括稱為“OpenThemeData”的API。該API用來獲得用于類名列表的句柄。類名列表識別一組圖形部件,并且以被分成母類名和一個或多個子類名。例如,母類名可以是按鈕。用于那個母類的子類名可以是“開始按鈕”。句柄是對內(nèi)部結(jié)構(gòu)的參考,其詳敘了對象的各種信息和特性。主題管理器216將在列表中檢索每個類名,并且使用所找到的第一個匹配主題信息。例如,如果類名包括開始按鈕和按鈕兩者,則如果存在就使用開始按鈕主題信息。如果開始按鈕主題信息不存在,則就使用用于按鈕的主題信息。如果沒有找到值,將使用舊代碼來提供該控件。如果返回了任何非0值,就建立有效的主題句柄。該主題句柄將被返回到DLL212并且用于所有的主題畫圖。
類似地,所提供的另一個API被稱為“CloseThemeData”。當控件被關(guān)閉例如不再需要按鈕時或者當主題被改變時,使用該API,正如后面更詳細地說明。
所提供的另一個API被稱為“IsThemeActive”。在當前主題是有效時,該API允許DLL212中的控件獲得真或假的回答。該API因此能夠用來確定是調(diào)用“OpenThemeData”API或者僅僅使用現(xiàn)存的控件將自己提供的畫圖代碼。
正如上述,主題管理器216還包含一組信息API220。這些信息API220允許控件被單獨地定制。換言之,這些API被用在僅僅一些實例中并且可以用來獲得有關(guān)專用控件的信息。這些信息API用來詢問主題管理器216,該主題管理器216是用于有關(guān)主題之專用特性的被定義主題信息。因此,每個API220請求信息,其是由主題管理器216提供的。
信息API220內(nèi)是稱為“GetThemeColor”的API。該API利用具有特有顏色特性識別符的專用零件和專用狀態(tài)以獲得有關(guān)主題顏色的信息。該特性識別符是希望的顏色特性數(shù)。換言之,顏色API用來要求對應于所希望特性的顏色值,例如背景顏色。提供了另一稱為“GetThemeMetric”的API,其請求和接收用于專用特性識別符的大小值。該大小值將是整數(shù)。稱為“GetThemeString”的API也在信息API220內(nèi)提供。該API用來獲得用于專用特性識別符的串。該串將包括有關(guān)串中字符數(shù)和該串終止處的信息。
另一個API在稱為“GetThemeBool”信息API220中提供,其對于給定零件、狀態(tài)和特性將返回一個不是0就是1的整數(shù)。0和1對應于對于那個零件、狀態(tài)和特性的真或假狀態(tài)。所提供的另一個API稱為“GetThemeInt”。在具有專用特性識別符的專用狀態(tài)中,其將返回用于專用零件的整數(shù)值。類似地,提供稱為“GetThemeEnumValue”的API,其將返回用于專用零件、狀態(tài)和特性識別符的主題列舉。主題列舉僅僅是支持數(shù)字值的變量,其對應于符號信息。例如,用于校準的列舉可以是對應于數(shù)字0,1,2的左,中,右。
提供稱為“GetThemePosition”的另一個API,對于具有專用特性識別符的專用狀態(tài)中的專用零件,對應于x位置和y位置,其將返回兩個整數(shù)值。在信息API220中提供的另一個API被稱為“GetThemeFont”。該API用來獲得所用的給定專用零件、狀態(tài)和特性識別符號的字形主題的邏輯說明。
在信息API220中提供的又一個API被稱為“GetThemeRect”。該API將返回四個整數(shù),代表專用零件、狀態(tài)和特性識別符的左、右、頂和底。類似地,提供稱為“GetThemeMargins”的API,其將返回四個整數(shù),代表給定的專用零件、狀態(tài)和特性識別符的左空間、右空間、頂空間和底空間。還有一個稱為“GetThemeIntList”的API,其將返回專用特性的值,它的類型是整數(shù)值的列表。最后,提供稱為“GetPropertyOrigin”的信息API,其返回在此產(chǎn)生該特性的位置。該API允許控件的作者獲得該特性起源的信息。換言之,該API允許控件的作者確定該特性是否是專用于狀態(tài)、零件、類、全局的或者是沒有找到的特性。這是需要的,因為主題特性是由主題作者以分級結(jié)構(gòu)方式規(guī)定的。例如,如果特性不是專用在“狀態(tài)”級別,則主題管理器將為該特性搜索“零件”級別,“類”級別以及最后的“全局”級別。有時控件知道是否特性對其正在處理的零件/狀態(tài)是清楚定義的是重要的。還有一個稱為“GetThemeFilename”的API,其返回專用文件名特性的串值。
在信息API220中提供的又一個API被稱為“SetWindowTheme”。該API允許控件的作者更改控件窗口,以除其類將正常使用外使用不同組的主題信息。換言之,在給控件以專用觀看而不是由那個類的主題所定義的標準觀看的同時,該API允許使用該控件。該API可以使用附加的參數(shù)以識別特殊應用程序和類名。這允許主題作者使用專用類但是改變該類的外表。例如,可以定義按鈕,其具有給定的按鈕外表。利用該API,該按鈕能夠被更改為不同的類名。例如,可以規(guī)定“OKButton”。然后主題作者將能夠使用稱為“OKButton”的類,并且“OKButton”將具有與標準按鈕外表不同的外表。
在類似于視窗系統(tǒng)標準的信息API組中還具有子組的主題標準API,但是其專用于主題。不同于正常的基于控件的特性,這些特性是對所有控件可獲得的和分享的?!癎etThemeSysColor”返回專用系統(tǒng)顏色索引的主題專用顏色值?!癎etThemeSysColorBrush”返回一個是專用系統(tǒng)顏色索引顏色的畫圖刷的句柄?!癎etThemeSysSize”返回專用主題大小索引的整數(shù)大小?!癎etThemeSysBool”返回用于專用主題布爾索引的布爾值(0或1)?!癎etThemeSysFont”返回用于專用主題字體索引的邏輯字形結(jié)構(gòu)。“GetThemeSysString”返回專用主題串索引的串值。
在信息API組220中還有一些面向應用的API?!癐sAppThemed”返回表示該應用是否是由操作系統(tǒng)形成主題的布爾值(0或者1)?!癎etWindowTheme”返回最近的主題句柄,如果需要,其為專用視窗打開?!癎etThemeAppProperties”返回控制其窗口零件和類型是在該應用中可成主題的標志?!癝etThemeAppProperties”允許該應用設置這些相同的標志。
最后,具有用于錯誤處理的信息API220?!癎etThemeLastErrorCobtext”返回與當前執(zhí)行表上的最后報告主題錯誤相關(guān)的錯誤上下文本(包括錯誤代碼,錯誤代碼參數(shù),文件名和源線)?!癋ormatThemeMessage”返回用于專用語言中專用錯誤上下文本的錯誤串。
主題管理器216不僅包括畫圖API218和信息API220,而且包括一組利用API222。這些API用于實現(xiàn)各種結(jié)果。
畫圖API218和信息API220允許作者或DLL212中控件的創(chuàng)建者定義控件作為一系列的零件和狀態(tài)。因此,所定義的控件是從主題管理器216的提供過程中提取的,并且也是從主題定義外表信息或者特性中提取的,正如下面的詳細說明。使用API218和220,控件的作者能夠創(chuàng)建控件,其是“主題識覺”和安裝用于與主題管理器216的通信。該通信包含給主題管理器216傳遞基本的信息或值,其允許主題管理器提供希望的控件,具有在希望狀態(tài)中的需要零件。
主題管理器216還包含執(zhí)行畫圖指令所需要的提供器。例如,能夠使用邊界填充提供器221,允許將不同的顏色主題應用到控件上。作為另一個例子,能夠使用位映射提供器223,其定義控件零件作為圖象。其它的提供器例子包括使用矢量定義語言,便攜式網(wǎng)絡圖形(PNG)文件,或者便攜式文件格式文件(PDF)。應當理解,本發(fā)明并不局限于特殊的提供技術(shù)。如果希望或需要不同的提供器,則主題管理器216的畫圖代碼被修改為將該提供器加到主題管理器216。因此,DLL212中的控件是從主題管理器216中的提供技術(shù)分離或提取出的。這允許不同的提供器被附加到主題管理器216,而不需要修改DLL212中的控件,正如下面的詳細說明。
主題管理器216中的提供器提供所請求的控件,其根據(jù)已經(jīng)由計算機用戶所選擇的外表主題。例如,圖1中所示的外表主題224和226。正如所示,主題224可以是用戶主題,主題226可以是商務主題。但是,應當理解,能夠使用其它的主題,本發(fā)明決不局限于特定的主題。例如,其它的主題可以包括卡通主題,孩子的主題或者高爾夫主題。正如圖1中所示,商務主題226已經(jīng)由用戶選擇,如實線228所示。用戶主題224是選擇獲得的,如虛線230所示。
每個主題224和226具有類似的結(jié)構(gòu)。正如圖6所示,商務主題226包括一系列的圖象文件232。圖象文件232是由特殊主題使用的圖象文件。在這種情況下,圖象文件232是由商務主題226使用的圖象文件。商務主題226還包括themes.ini文件234。文件234是文本文件,并且能夠在ANSI或者UNICODE字符集中創(chuàng)建。文件234規(guī)定獲得的顏色方案和該主題可獲得的大小。在主題226的情況下,文件234規(guī)定獲得的顏色方案和商務主題226可獲得的大小。因此,文件234代表了所有其應用的主題的變化。
主題文件234由一個或多個段構(gòu)成。主題文件234內(nèi)的段包括文獻段236,大小段238,顏色方案段240和文件段242。文獻段236是選擇性的,可以包含任何特性名。大小段238規(guī)定大小名,例如“缺省大小”,“很小”或“很大”。顏色方案段240用來規(guī)定簡單的顏色方案名和與該顏色方案名相關(guān)的選擇顏色方案傳遞。文件段242用來規(guī)定類數(shù)據(jù)文件的唯一名稱。文件段242將包括文牛名,用于該文件名的顏色方案(來自顏色方案段240),以及該文件將支持的大小(來自大小段238)。
主題226包括在圖6中標記的第二個.ini文件244。文件244是類數(shù)據(jù)文件,其包含用于特定大小和顏色方案的主題數(shù)據(jù)。文件244還可以包含定義段。例如,文件244可以包含定義特殊類控件之特性的全局段。文件244還可以包含允許獲得和使用系統(tǒng)標準的段。最后,文件244可以包含一組類段。每個類段名包含類名,選擇零件名,和選擇狀態(tài)名。在該段內(nèi)是特性/值對,其定義專用零件或控件的外表。例如,類名可以是用于滑動控件的“滑動器”。為該滑動器規(guī)定的零件是“軌道”。為該軌道零件定義的狀態(tài)是“正?!?,“不能”和“激活”。該類段名還能夠包括應用程序(或者“組”)名,其規(guī)定該段僅僅應用到專門的應用程序中(或者“組”名,正如SetWindowTheme API所規(guī)定的)。
圖象文件232,主題文件234,包括文件244被廣泛地分組在一起以構(gòu)成主題目錄246。主題目錄246和位于主題管理器216內(nèi)的系統(tǒng)方案文件被用于裝載商務主題226。該系統(tǒng)方案文件是定義用于包含在特殊主題中的所有特性的特性數(shù)的文件和基本上是母定義文件,其允許主題特性將被指定一個對應于所定義外表的數(shù)。
因此,主題目錄246包含主題.ini文件234,類數(shù)據(jù)文件244和由主題使用的所有圖象文件232。主題目錄246的內(nèi)容能夠通過主題包裝工具250包裝成DLL文件。主題包裝工具250通過分析防止方案文件句法錯誤和將該.ini文件加到正被建立的包裝上來處理主題.ini文件。從文獻段所識別的特性被寫到包裝串表中。來自顏色方案段240的顏色方案信息和來自大小段238的大小信息也被寫到包裝串表中。也處理每個類數(shù)據(jù)文件244。在類數(shù)據(jù)文件被處理時,該文件被分析防止該方案文件的句法錯誤。該類數(shù)據(jù)文件還被加到正被建立的包裝上。
由主題包裝工具250產(chǎn)生的DLL文件是商務主題文件226。文件226包含主題數(shù)據(jù),并且該主題數(shù)據(jù)從控件庫212中分開。這允許在不改變庫212中定義的控件的情況下創(chuàng)建和選擇不同的主題。因此,控件的作者能夠創(chuàng)建和定義與外表或者主題數(shù)據(jù)無關(guān)的控件。文件226是二進制格式并且當計算機用戶選擇商務主題226時被傳遞到共享的主題數(shù)據(jù)文件252,正如圖1中所示。文件252是共享存儲映射文件,其能夠通過所有的處理被訪問。因此,當主題由計算機用戶選擇時,主題管理器216將讀用于所定義主題文件例如文件226的信息,并且將那個二進制格式的信息放在文件252中,在此所有運行處理都可訪問該二進制信息。
正如圖1所示,提供了主題轉(zhuǎn)換控件板254,其與主題管理器216通信。板254與用戶界面結(jié)合,顯示用戶能夠從中選擇的可獲得主題。正如圖1所示,控件板254將允許用戶選擇商務主題226或者用戶主題224。正如上面已經(jīng)討論的,如果選擇了商務主題226,并且計算機的用戶轉(zhuǎn)換選擇了用戶主題224,則主題224將以二進制數(shù)據(jù)被裝載到共享的存儲器映射文件252中。主題管理器216還給DLL文件212中的每個主題識覺控件發(fā)送主題已經(jīng)改變的消息。每個主題識覺控件知道如何響應該消息。
當主題識覺控件接收了主題已經(jīng)改變的消息時,該控件將關(guān)閉經(jīng)過OpenThemeData API接收的當前主題句柄。然后該控件將企圖打開新的主題句柄,再次使用OpenThemeData API。如果不能夠打開新的主題句柄,該控件知道該主題已經(jīng)為那個控件關(guān)閉,并且舊的畫圖代碼將被該控件使用以畫出自己。如果打開了新的主題句柄,則主題管理器216將查看該主題二進制數(shù)據(jù)和開始新的畫圖例行程序,使得利用新選擇的主題例如用戶主題224重新畫出所有的主題識覺控件。任何關(guān)于在先選擇的主題被緩存的信息是無效的,并且那個信息一定要被重新計算。
操作中,正如圖7所示,應用程序138或者139將請求在用戶界面上提供的諸如控件的圖形,如256的表示。該圖形請求是通過匯合點214路由的。正如258所示,匯合點處理將確定所請求的控件是否是主題識覺控件。如果所請求的控件不是主題識覺的,則使用舊的代碼并且控件將使用來自DLL208或者210的控件畫出自己,如圖7中的260所示。如果所請求的控件是主題識覺的,則圖形請求在DLL212中被處理,如262所示。在請求提供服務中,使用API218,220和222,DLL212中的控件將用于圖形請求的例如用于該請求控件的零件,狀態(tài)和地點的基本信息傳遞給主題管理器216。因此,在沒有由主題管理器216找到的外表特性的應用程序的情況下,圖形請求在DLL212中處理。然后,主題管理器216將確定或者應用用于該給定控件零件和狀態(tài)的主題專用外表特性,如264所示。該外表數(shù)據(jù)是從共享存儲器映射數(shù)據(jù)文件252中檢索的。使用該檢索的外表數(shù)據(jù),對于所請求的控件零件和狀態(tài),沿著該地點,主題管理器將在計算機顯示上提供該控件,如266所示。
參考圖4,說明以匯合點214(圖1)實現(xiàn)的邏輯操作的另一個實施例。在該實施例中,當裝載應用程序而不是例行應用程序如圖7中通過匯合點請求時執(zhí)行匯合點操作。通過將較老的非主題控件連接到較老的應用程序,匯合點允許較老的非主題應用程序工作于主題環(huán)境中。較老的非主題控件以User32.dll和ComCtl32.dll版本5(V5)提供。User32.dll提供諸如按鈕,滾動條和列表框的用戶控件。ComCtl32.dll提供諸如工具條,列表視圖和樹視圖的外殼公共控件。匯合點214將主題控件文件ComCtl32.dll版本6(V6)連接到已經(jīng)在主題環(huán)境中開發(fā)和測試的新的應用程序上。
圖4中操作流程開始于裝載操作402,其中應用程序在系統(tǒng)上開始運行。啟動處理的部分是控件庫的動態(tài)連接。連接是在程序模塊和子例行程序的庫之間聯(lián)合引用的過程,以創(chuàng)建已準備在計算機上運行的裝載模塊。在裝載操作402之后,控件轉(zhuǎn)換到顯示清單檢測操作404,其中其被確定應用程序是否具有與此相關(guān)的顯示清單。如果沒有顯示清單,控制轉(zhuǎn)換到連接操作406,其中傳統(tǒng)的控件User32.dll和ComCtl32.dll V5被連接到應用程序的存儲映射中。正如前述,傳統(tǒng)的控件不是主題識覺的。
另一方面,如果在顯示清單檢測操作404中有諸如顯示清單215的顯示清單,則控制轉(zhuǎn)換到主題模塊搜索操作408,其中其被確定ComCtl32.dll V6是否是在該顯示清單中被列表。如果該顯示清單沒有列表ComCtl32.dll V6,則控制轉(zhuǎn)換到連接操作406,其中傳統(tǒng)的控件被連接到應用程序的存儲映射中。另一方面,如果ComCtl32.dll V6被列表在該顯示清單中,則轉(zhuǎn)換控制到連接操作410,其中ComCtl32.dll V6的主題識覺控件被連接到應用程序的存儲映射中。
圖5是一種操作流程圖,其表示在主題識覺應用程序環(huán)境中將非客戶窗口部件構(gòu)成主題的示例性過程。圖5描繪了非客戶窗口部件如何可以用兩種通用情況的主題特性被提供。第一種情況是其中諸如非客戶窗口消息502的非客戶窗口消息被直接到窗口的情況。第二種情況是當應用程序構(gòu)成可以影響窗口的非客戶窗口區(qū)域的API調(diào)用的時候,其要求提供非客戶窗口區(qū)域。
在第一種情況下,當產(chǎn)生非客戶窗口消息502時,目標窗口的非客戶區(qū)域可以需要被提供。窗口的非客戶區(qū)域一般具有一個或多個非客戶圖形部件,例如最小化框,窗口框架,和關(guān)閉框。非客戶窗口消息502能夠是被送到窗口的任何消息,包括但不局限于測量或者提供消息。例如,當計算機用戶重新確定目標窗口的大小時,非客戶窗口消息502被送到該窗口,請求該窗口應當以新的大小被重新提供。非客戶窗口消息502通常是由應用程序接收的,其使用諸如APP2139的目標窗口。以非客戶窗口消息502為基礎(chǔ),諸如APP2139的應用程序可以進行激活,例如調(diào)節(jié)其GUI的外表。然后非客戶窗口消息502被UserAPIHook506截取,其將該消息路由到主題管理器216。UserAPIHook506可以是一部分主題管理器216。主題管理器216解釋非客戶窗口消息502。根據(jù)該非客戶窗口消息502,主題管理器216可以做有關(guān)非客戶窗口部件之尺寸的測量,并且可以使用在共享主題數(shù)據(jù)252中的主題特性以提供窗口的非客戶區(qū)域。
繼續(xù)圖5的例子,當諸如APP2139的應用程序或者應用程序的控件做API調(diào)用時,該結(jié)果可以影響窗口的非客戶區(qū)域。在這種情況下,非客戶窗口區(qū)域可以是使用主題特性被重新提供的。對于主題識覺應用程序,例如應用程序139,諸如API調(diào)用503的API調(diào)用可以構(gòu)成USER32208。API調(diào)用503可以是任何API調(diào)用,包括但不局限于先前討論的任何API函數(shù)。例如,“MoveWindow()”API調(diào)用能夠改變窗口的大小,地點和z排序(ordering),其要求重新畫出窗口框架。當主題是活動時,USER32208在接收API調(diào)用503時將API調(diào)用503路由至UserAPIHook506。然后UserAPIHook506將API調(diào)用503路由到主題管理器216。主題管理器216解釋API調(diào)用503和進亍有關(guān)窗口框架之尺寸的測量計算。然后,如果需要的話,主題管理器216使用共享的主題數(shù)據(jù)252以用主題特性提供具有非客戶窗口區(qū)域。
在圖5的實施例中,USER32208操作用于諸如圖1之APPI138的主題應用和諸如APP2 139的非主題應用兩者的非客戶API和消息,如圖5所示。圖5所示的消息流對于非主題應用和主題應用是相同的。因此,窗口的非客戶圖形部件是與該應用程序是否是主題識覺無關(guān)而構(gòu)成主題的。
重要地是,UserAPIHook操作506修改提供請求到主題管理器216,其能夠使用共享主題數(shù)據(jù)252以用主題特性提供窗口的非客戶區(qū)域。正如前面討論的,對于窗口部件,主題特性數(shù)據(jù)能夠通過將特性加到“.msstyles”文件上被很容易地附加上。這允許大量的用于非客戶窗口部件的不用改變控件軟件的主題。
本發(fā)明的各種實施例的邏輯操作實現(xiàn)為(1)一系列的計算機實現(xiàn)活動或者在計算系統(tǒng)上運行的程序模塊和/或(2)在計算系統(tǒng)中互連的機器邏輯電路或者電路模塊。該實現(xiàn)是選擇的問題,其依賴于實現(xiàn)本發(fā)明的計算系統(tǒng)的性能要求。因此,這里要說明的構(gòu)成本發(fā)明實施例的邏輯操作被變化地稱為操作,結(jié)構(gòu)裝置,活動或者模塊。本領(lǐng)域技術(shù)人員可以認識到,這些操作,結(jié)構(gòu)裝置,活動和模塊可以以軟件,硬件,專用目的數(shù)字邏輯和其任何組合來實現(xiàn),而不脫離在所附權(quán)利要求限定的本發(fā)明的精神和范圍。
根據(jù)包括
書的綜述,對本領(lǐng)域的技術(shù)人員來說本發(fā)明的替換實施例將變得清楚。因此,本發(fā)明的范圍是通過所附權(quán)利要求而不是前面的說明來限定。
盡管本發(fā)明已經(jīng)用專用于計算機結(jié)構(gòu)特征的語言,方法作用和通過計算機可讀媒體進行了說明,應當理解,在所附權(quán)利要求限定的本發(fā)明并不必要局限于所說明的專用結(jié)構(gòu),作用或者媒體。作為例子,其它決定方法可以被包括在與控件提供模塊結(jié)合的匯合點處理中。因此,專用結(jié)構(gòu)特征,作用和媒體作為實現(xiàn)所要求權(quán)利之本發(fā)明的示例性實施例。
上述的各種實施例是方便說明而提供的,其不應當被解釋為限制本發(fā)明。本領(lǐng)域的技術(shù)人員將容易認識到構(gòu)成本發(fā)明的各種改進和變化,而不用按照在此所說明和描述的例子實施例和應用,并且不脫離下面權(quán)利要求中提出的本發(fā)明的真正精神和范圍。
權(quán)利要求
1.一種主題管理系統(tǒng),構(gòu)成為在計算機系統(tǒng)上提供圖形部件,該計算機系統(tǒng)具有運行一個或多個應用程序的圖形操作系統(tǒng),緩存的應用程序能夠做被連接到控件模塊的請求,主題管理系統(tǒng)包括第一控件模塊,具有一個或多個響應應用程序界面調(diào)用的第一函數(shù),該調(diào)用能夠提供具有主題的圖形部件;第二控件模塊,具有一個或多個響應應用程序界面調(diào)用的第二函數(shù),該調(diào)用能夠提供沒有主題的圖形部件;和匯合點模塊,其響應確定是將該應用程序連接到第一控件模塊或者是第二控件模塊之一個上以提供圖形部件的請求。
2.權(quán)利要求1的主題管理系統(tǒng),還包括主題管理模塊,其具有響應從第一控件模塊的一個或多個第一函數(shù)中提供調(diào)用的一個或多個第三函數(shù),該第三函數(shù)能夠提供使用主題的圖形部件。
3.權(quán)利要求2的主題管理系統(tǒng),還包括截取異常分支模塊,其截取被送到目標窗口的非客戶窗口消息,該目標窗口具有在非客戶窗口區(qū)域中的一個或多個非客戶圖形部件,非客戶窗口消息請求目標窗口完成在一個或多個非客戶圖形部件上的作用;和第一路由模塊,其從截取異常分支模塊中接收非客戶窗口消息并且將非客戶窗口消息路由到主題管理器的一個或多個第三個函數(shù)上,以便完成該作用。
4.權(quán)利要求3的主題管理系統(tǒng),其中第一控件模塊還包括第二個選路模塊,其將應用程序界面調(diào)用路由到截取異常分支模塊,以便響應應用程序界面調(diào)用在非客戶窗口區(qū)域上的一個或多個非客戶圖象部件上能夠完成作用。
5.權(quán)利要求3的主題管理系統(tǒng),其中第二控件模塊還包括第三個選路模塊,其將應用程序界面調(diào)用路由到截取異常分支模塊,以便響應應用程序界面調(diào)用在非客戶窗口區(qū)域上的一個或多個非客戶圖象部件上能夠完成作用。
6.權(quán)利要求3的主題管理系統(tǒng),其中非客戶窗口消息是一種提供消息,其請求應當提供在非客戶窗口區(qū)域上的一個或多個非客戶圖象部件,主題管理模塊響應通過提供一個或多個非客戶圖象部件的提供消息。
7.權(quán)利要求3的主題管理系統(tǒng),其中一個或多個非客戶圖象部件的每一個是與尺寸相關(guān)的,非客戶窗口消息是一種測量消息,其請求應當測量在非客戶窗口區(qū)域上的一個或多個非客戶圖象部件的尺寸,主題管理模塊響應通過測量一個或多個非客戶圖象部件之尺寸的測量消息。
8.權(quán)利要求1的主題管理系統(tǒng),其中第一和第二控件模塊的第一和第二函數(shù)能夠提供用戶控件和外殼公共控件。
9.權(quán)利要求1的主題管理系統(tǒng),其中匯合點模塊包括第一檢測模塊,其檢測應用程序是否具有表示一組控件模塊的哪一個應當被連接到該應用程序的相關(guān)顯示清單文件;第二檢測模塊,其檢測顯示清單是否表示第一控件模塊應當被連接;和連接模塊,如果顯示清單表示第一控件模塊應當被連接,其將第一控件模塊連接到應用程序。
10.一種主題管理系統(tǒng),構(gòu)成為在計算機系統(tǒng)上提供圖形部件,該計算機系統(tǒng)具有運行一個或多個應用程序的圖形操作系統(tǒng),主題管理系統(tǒng)包括截取異常分支模塊,其截取到目標窗口的提供消息,該目標窗口具有非客戶圖形部件,該提供消息請求目標窗口提供目標窗口的非客戶圖形部件;主題管理模塊,其具有能夠提供使用主題的任何窗口的非客戶圖形部件一個或多個第一函數(shù);和路由模塊,其將提供消息路由到主題管理模塊的一個或多個第一函數(shù)上,以便使用具有一組主題特性的主題來提供目標窗口的非客戶圖形部件。
11.權(quán)利要求10的主題管理系統(tǒng),還包括第一控件模塊,具有能夠與主題管理模塊的一個或多個第一函數(shù)交互的一個或多個第二函數(shù),以提供具有主題特性的用戶控件或者外殼公共控件;第二控件模塊,具有能夠提供沒有主題特性的用戶控件和外殼公共控件的一個或多個第三函數(shù);和匯合點模塊,其響應來自應用程序的請求以便該應用程序連接到第一控件模塊或者是第二控件模塊之一個上。
12.一種在具有圖形操作系統(tǒng)的計算機的計算機顯示器上提供圖形控件的方法,第一組應用程序?qū)崿F(xiàn)主題能力,第二組應用程序不實現(xiàn)主題能力,該方法包括提供第一控件模塊,其具有能夠提供用于不實現(xiàn)主題能力之應用程序的圖形控件的一個或多個第一函數(shù);提供第二控件模塊,其具有能夠提供用于實現(xiàn)主題能力之應用程序的圖形控件的一個或多個第二函數(shù);接收來自應用程序的請求,請求應用程序應被連接到第一控件模塊和第二控件模塊之一上;確定應用程序是否實現(xiàn)主題能力;和如果應用程序?qū)崿F(xiàn)主題能力則將應用程序連接到第二控件模塊上,使得應用程序能夠使用第二控件模塊的函數(shù)來提供具有主題的圖形控件。
13.權(quán)利要求12的方法,還包括從應用程序中接收應用程序界面調(diào)用,應用程序界面調(diào)用請求提供圖形控件;確定圖形控件是否實現(xiàn)主題能力;和如果圖形控件實現(xiàn)主題能力,調(diào)用主題管理器,其使用具有圖形部件特性數(shù)據(jù)的主題文件以用主題方式提供所請求的圖形控件。
14.權(quán)利要求12的方法,其中確定作用包括檢測對于應用程序是否存在顯示清單;和搜索用于指示器的顯示清單,該指示器表示應用程序能夠與第二控件模塊交互以提供具有主題的圖形控件。
15.權(quán)利要求13的方法,還包括截取被送到具有一個或多個非客戶圖形部件之窗口的非客戶窗口消息,該非客戶窗口消息請求窗口完成在一個或多個非客戶圖形部件上的作用;將非客戶窗口消息路由到主題管理器,該主題管理器管理非客戶圖形部件的主題特性;和完成在一個或多個非客戶圖形部件上的作用。
16.權(quán)利要求15的方法,其中非客戶窗口消息是一種提供消息,并且作用是提供一個或多個非客戶圖形部件。
17.權(quán)利要求15的方法,其中非客戶窗口消息是一種測量消息,一個或多個非客戶圖形部件的每一個是與尺寸相關(guān)的,并且作用是測量一個或多個非客戶圖形部件的尺寸。
18.權(quán)利要求13的方法,還包括將應用程序界面調(diào)用路由到截取異常分支模塊;將應用程序界面調(diào)用路由到主題管理器,主題管理器以主題形式提供非客戶圖形部件;確定應用程序界面調(diào)用是否影響由應用程序使用的窗口的一個或多個非客戶圖形部件;和如果應用程序界面調(diào)用影響一個或多個非客戶圖形部件,則以主題形式提供一個或多個非客戶圖形部件。
19.一種計算機程序產(chǎn)品,可由計算系統(tǒng)讀出,并且編碼用于執(zhí)行計算機處理之指令的計算機程序,用來在具有圖形操作系統(tǒng)的計算機系統(tǒng)中提供窗口非客戶部件,該計算機程序包括截取被送到具有一個或多個非客戶圖形部件之窗口的非客戶窗口消息,該非客戶窗口消息請求窗口完成在一個或多個非客戶圖形部件上的作用;將非客戶窗口消息路由到主題管理器,該主題管理器管理非客戶圖形部件的主題特性;和完成在一個或多個非客戶圖形部件上的作用。
20.一種計算機程序產(chǎn)品,可由計算系統(tǒng)讀出,并且編碼用于執(zhí)行計算機處理之指令的計算機程序,用來在具有圖形操作系統(tǒng)的計算機顯示器上提供圖形控件,第一組應用程序?qū)崿F(xiàn)主題能力,第二組應用程序不實現(xiàn)主題能力,該計算機程序包括接收來自應用程序的請求,請求應用程序應被連接到第一控件模塊和第二控件模塊之一上;確定應用程序是否實現(xiàn)主題能力;和如果應用程序?qū)崿F(xiàn)主題能力則將應用程序連接到第二控件模塊上,使得應用程序能夠使用第二控件模塊的函數(shù)來提供具有主題的圖形控件。
21.權(quán)利要求20的計算機程序產(chǎn)品,其中計算機程序還包括從應用程序中接收應用程序界面調(diào)用,應用程序界面調(diào)用請求提供圖形控件;確定圖形控件是否實現(xiàn)主題能力;和如果圖形控件實現(xiàn)主題能力,調(diào)用主題管理器,其使用具有圖形部件特性數(shù)據(jù)的主題文件以用主題方式提供所請求的圖形控件。
22.權(quán)利要求21的計算機程序產(chǎn)品,其中確定作用包括檢測對于應用程序是否存在顯示清單;和搜索用于指示器的顯示清單,該指示器表示應用程序能夠與第二控件模塊交互以提供具有主題的圖形控件。
23.權(quán)利要求21的計算機程序產(chǎn)品,其中計算機程序還包括截取被送到具有一個或多個非客戶圖形部件之窗口的非客戶窗口消息,該非客戶窗口消息請求窗口完成在一個或多個非客戶圖形部件上的作用;將非客戶窗口消息路由到主題管理器,該主題管理器管理非客戶圖形部件的主題特性;和完成在一個或多個非客戶圖形部件上的作用。
24.權(quán)利要求23的計算機程序產(chǎn)品,其中非客戶窗口消息是一種提供消息,并且作用是提供一個或多個非客戶圖形部件。
25.權(quán)利要求的計算機程序產(chǎn)品,其中非客戶窗口消息是一種測量消息,一個或多個非客戶圖形部件的每一個是與尺寸相關(guān)的,并且作用是測量一個或多個非客戶圖形部件的尺寸。
全文摘要
說明了一種系統(tǒng)和方法,其使用主題管理器的主題函數(shù)來以主題方式提供圖形部件。主題管理器使用具有所有類型圖形部件之主題特性的主題文件。當開始應用程序時,提供的系統(tǒng)確定應用程序是否支持該主題構(gòu)成。如果應用程序支持該主題構(gòu)成,則支持該主題的動態(tài)連接控件庫被連接到該應用程序。如果應用程序不支持該主題構(gòu)成,則連接非主題控件庫。如果應用程序支持該主題,則通過使用與主題管理器之函數(shù)交互的主題控件庫函數(shù)來提供具有主題的應用程序的用戶控件和外殼公共控件。通過截取到窗口的提供消息和將消息送到主題管理器,提供使用主題的非客戶窗口部件。當適當響應某些應用程序界面調(diào)用時,還測量和提供使用主題特性的非客戶窗口部件。
文檔編號G06T11/80GK1322993SQ0112169
公開日2001年11月21日 申請日期2001年4月6日 優(yōu)先權(quán)日2000年4月6日
發(fā)明者C·A·埃文斯, R·L·費爾南迪, R·W·斯托克里, P·S·赫爾亞, L·埃莫迪歐, C·J·古扎克, M·A·施密特, S·S·海森, S·R·漢吉 申請人:微軟公司