一種加載界面元素的系統(tǒng)及方法
【專利摘要】本發(fā)明公開了一種加載界面元素的系統(tǒng)及方法,本發(fā)明將主系統(tǒng)的實(shí)現(xiàn)和插件的實(shí)現(xiàn)完全分離,將界面元素的界面邏輯和功能邏輯分開,使得主系統(tǒng)提供界面元素的界面風(fēng)格,插件提供界面元素內(nèi)容及功能邏輯,實(shí)現(xiàn)了插件適應(yīng)不同的主系統(tǒng),擴(kuò)展提高了插件的可擴(kuò)展性。
【專利說明】一種加載界面元素的系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件架構(gòu)實(shí)現(xiàn)技術(shù),尤指一種加載界面元素的系統(tǒng)及方法。
【背景技術(shù)】
[0002]在軟件架構(gòu)設(shè)計(jì)中,插件是具有統(tǒng)一接口的一組組件,插件可以動(dòng)態(tài)的被主系統(tǒng)加載并實(shí)現(xiàn)獨(dú)立的功能。由于插件的高擴(kuò)展性,使其在現(xiàn)在軟件架構(gòu)設(shè)計(jì)中應(yīng)用越來越廣泛,相應(yīng)的越來越多的界面元素也被設(shè)計(jì)在插件中實(shí)現(xiàn),其中最常用的界面元素就是工具條。
[0003]以加載工具條為例,目前的實(shí)現(xiàn)方法主要有兩種,第一種是在插件中生成工具條即創(chuàng)建工具條窗體句柄,然后通過該句柄添加工具條按鈕,再傳遞給主系統(tǒng)顯示;另一種是在主系統(tǒng)中創(chuàng)建工具條窗體句柄,然后將創(chuàng)建好的句柄發(fā)送給插件,由插件通過該句柄添加工具條按鈕。
[0004]由于工具條的實(shí)現(xiàn)方式很多,比如API級(jí)別的Handle,或者M(jìn)FC級(jí)別的工具條實(shí)現(xiàn)類的指針CToolBar*,或者BCG類似的界面類庫(kù)中的某種特效工具條等等。為了保證主系統(tǒng)能夠識(shí)別插件創(chuàng)建出的工具條,主系統(tǒng)與插件之間約定一種實(shí)現(xiàn)方式,但是這樣卻限制了工具條實(shí)現(xiàn)效果的擴(kuò)展,而擴(kuò)展是插件系統(tǒng)最重要的一個(gè)指標(biāo)。
[0005]從現(xiàn)有實(shí)現(xiàn)方法可見,主系統(tǒng)和插件必須了解對(duì)方的實(shí)現(xiàn)細(xì)節(jié),當(dāng)一方變化都會(huì)引起另一方無法正確運(yùn)行,最終,結(jié)構(gòu)的高耦合性使得插件的擴(kuò)展性無法充分實(shí)現(xiàn)。此外,由于主系統(tǒng)與插件之間有了特殊約定,就意味著模塊耦合性增大,創(chuàng)建的工具條很可能成為一種封裝不完善的設(shè)計(jì)。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明的主要目的在于提供一種加載界面元素的系統(tǒng),能夠提高插件的可擴(kuò)展性。
[0007]本發(fā)明的另一目的在于提供一種加載界面元素的方法,能夠提高插件的可擴(kuò)展性。
[0008]為達(dá)到上述目的,本發(fā)明的技術(shù)方案具體是這樣實(shí)現(xiàn)的:
[0009]一種創(chuàng)建界面元素的系統(tǒng),該系統(tǒng)包括:主系統(tǒng)和插件,其中,
[0010]主系統(tǒng)用于實(shí)現(xiàn)界面元素的實(shí)際創(chuàng)建,并提供界面元素的顯示樣式;
[0011]插件用于實(shí)現(xiàn)界面元素具體的功能實(shí)現(xiàn);
[0012]主系統(tǒng)需要界面元素時(shí),從插件獲取界面元素信息,并根據(jù)獲得的界面元素信息,通知插件創(chuàng)建界面元素;插件在創(chuàng)建過程中調(diào)用主系統(tǒng)完成實(shí)際的界面元素創(chuàng)建。
[0013]所述主系統(tǒng)包括:界面窗體模塊和控件創(chuàng)建模塊,其中,
[0014]界面窗體模塊,用于向所述插件發(fā)送查詢請(qǐng)求;接收來自所述插件的查詢響應(yīng),根據(jù)獲得的查詢結(jié)果獲取需要?jiǎng)?chuàng)建的界面元素;向所述插件發(fā)送創(chuàng)建請(qǐng)求;
[0015]控件創(chuàng)建模塊,用于接收來自插件的創(chuàng)建通知,完成界面元素的實(shí)際創(chuàng)建,并為每一個(gè)創(chuàng)建的界面元素項(xiàng)分配用于標(biāo)識(shí)不同界面元素的命令標(biāo)識(shí)ID。
[0016]所述控件創(chuàng)建模塊為一組COM組件接口。
[0017]所述插件包括:控件查詢模塊和界面元素創(chuàng)建模塊,其中,
[0018]控件查詢模塊,接收來自所述主系統(tǒng)的查詢請(qǐng)求,獲取插件包含的界面元素的信息,并將該信息攜帶在查詢響應(yīng)中通知給所述主系統(tǒng);
[0019]界面元素創(chuàng)建模塊,接收來自所述主系統(tǒng)的創(chuàng)建請(qǐng)求,通知所述主系統(tǒng)的控件創(chuàng)建模塊創(chuàng)建界面元素。
[0020]所述界面窗體模塊還用于,向所述插件中的界面元素功能處理模塊廣播需要顯示的界面窗體對(duì)應(yīng)的命令I(lǐng)D ;顯示所述插件返回的界面元素;
[0021]所述插件還包括:界面元素功能處理模塊,根據(jù)接收到的命令I(lǐng)D,完成該命令I(lǐng)D對(duì)應(yīng)的界面元素的功能和狀態(tài)變化,并返回界面窗體模塊。
[0022]所述插件為一個(gè)或一個(gè)以上;所述界面元素為工具條。
[0023]所述控件創(chuàng)建模塊為一個(gè)或一個(gè)以上。
[0024]一種創(chuàng)建界面元素的方法,該方法包括以下步驟:
[0025]A.主系統(tǒng)需要界面元素時(shí),從插件獲取界面元素信息,并根據(jù)獲得的界面元素信息,通知插件創(chuàng)建界面元素;
[0026]B.插件調(diào)用主系統(tǒng)的控件創(chuàng)建模塊創(chuàng)建界面元素。
[0027]該方法還包括:所述主系統(tǒng)的控件創(chuàng)建模塊為每一個(gè)創(chuàng)建的界面元素項(xiàng)分配用于標(biāo)識(shí)不同界面元素的命令標(biāo)識(shí)ID。
[0028]該方法還包括:所述主系統(tǒng)通過廣播的方式向插件發(fā)送需要顯示的界面窗體對(duì)應(yīng)的ID,所述插件按照接收到的命令I(lǐng)D調(diào)用界面元素處理模塊完成該命令I(lǐng)D對(duì)應(yīng)的界面元素的功能和狀態(tài)變化,并返回給主系統(tǒng)顯示。
[0029]所述界面元素為工具條;所述界面元素信息為有/無界面元素,或界面元素的個(gè)數(shù)。
[0030]由上述技術(shù)方案可見,本發(fā)明主系統(tǒng)需要界面元素時(shí),從插件獲取界面元素信息,主系統(tǒng)根據(jù)獲得的界面元素信息,通知插件創(chuàng)建界面元素,插件調(diào)用主系統(tǒng)創(chuàng)建界面元素并在主系統(tǒng)顯示。本發(fā)明將主系統(tǒng)的實(shí)現(xiàn)和插件的實(shí)現(xiàn)完全分離,將界面元素的界面邏輯和功能邏輯分開,使得主系統(tǒng)提供界面元素的界面風(fēng)格,插件提供界面元素內(nèi)容及功能邏輯,實(shí)現(xiàn)了插件適應(yīng)不同的主系統(tǒng),擴(kuò)展提高了插件的可擴(kuò)展性。
【專利附圖】
【附圖說明】
[0031]圖1是本發(fā)明系統(tǒng)組成示意圖;
[0032]圖2是本發(fā)明方法的流程圖。
【具體實(shí)施方式】
[0033]本發(fā)明的核心思想是:主系統(tǒng)需要界面元素時(shí),從插件獲取界面元素信息,并根據(jù)獲得的界面元素信息,通知插件創(chuàng)建界面元素,插件在創(chuàng)建過程中調(diào)用主系統(tǒng)的控件創(chuàng)建模塊創(chuàng)建界面元素。
[0034]為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉較佳實(shí)施例,對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。
[0035]圖1是本發(fā)明創(chuàng)建界面元素的系統(tǒng)組成示意圖,如圖1所示,該系統(tǒng)包括主系統(tǒng)和插件兩部分,其中主系統(tǒng)用于實(shí)現(xiàn)界面元素的實(shí)際創(chuàng)建并提供界面元素的顯示樣式,插件用于實(shí)現(xiàn)界面元素具體的功能實(shí)現(xiàn)。
[0036]從上述主系統(tǒng)與插件的功能描述可見,主系統(tǒng)提供了界面邏輯,即界面元素的實(shí)現(xiàn)樣式或風(fēng)格,這樣,主系統(tǒng)只要提供不同的界面風(fēng)格實(shí)現(xiàn),就可以在不更改插件提供的界面元素代碼的情況下,靈活變換界面風(fēng)格;
[0037]而插件提供了功能邏輯,即界面元素具體的功能實(shí)現(xiàn)。插件通過提供界面元素信息,讓用戶可以通過點(diǎn)擊界面元素實(shí)現(xiàn)相應(yīng)的功能。由于界面元素的界面的實(shí)際創(chuàng)建是由主系統(tǒng)封裝實(shí)現(xiàn)的,所以插件本身并不關(guān)心界面到底會(huì)顯示成什么樣子,只需提供界面元素內(nèi)容及功能實(shí)現(xiàn)即可。
[0038]主系統(tǒng)中包括:界面窗體模塊和控建創(chuàng)建模塊。
[0039]其中,界面窗體模塊,用于向插件中的控件查詢模塊發(fā)送查詢請(qǐng)求;接收來自插件中控件查詢模塊的查詢響應(yīng),根據(jù)獲得的查詢結(jié)果獲取需要?jiǎng)?chuàng)建的界面元素,并向插件的界面元素創(chuàng)建模塊發(fā)送創(chuàng)建請(qǐng)求;
[0040]界面窗體模塊是需要加載界面元素的容器,例如應(yīng)用程序的主界面等等。
[0041]控件創(chuàng)建模塊,用于接收來自插件的界面元素創(chuàng)建模塊的創(chuàng)建通知,完成界面元素的實(shí)際創(chuàng)建,并為每一個(gè)創(chuàng)建的界面元素項(xiàng)分配用于標(biāo)識(shí)不同界面元素的命令標(biāo)識(shí)(ID)0控件創(chuàng)建模塊是一組COM組件接口,具體實(shí)現(xiàn)屬于本領(lǐng)域技術(shù)人員公知技術(shù),這里不再詳述。COM是Component Object Model的縮寫,是一種組件技術(shù)。所述控件創(chuàng)建模塊為一個(gè)或一個(gè)以上。
[0042]至少一個(gè)插件包括:控件查詢模塊和界面元素創(chuàng)建模塊。
[0043]其中,控件查詢模塊,接收來自主系統(tǒng)的查詢請(qǐng)求,獲取插件包含的界面元素信息,并將獲得的信息攜帶在查詢響應(yīng)中返回主系統(tǒng);
[0044]界面元素創(chuàng)建模塊,接收來自主系統(tǒng)的界面窗體模塊的創(chuàng)建請(qǐng)求,調(diào)用主系統(tǒng)的控件創(chuàng)建模塊完成界面元素的創(chuàng)建。
[0045]所述界面窗體模塊還用于,向所述插件中的界面元素功能處理模塊廣播需要顯示的界面窗體對(duì)應(yīng)的命令I(lǐng)D ;顯示所述插件返回的界面元素;
[0046]所述插件還包括:界面元素功能處理模塊,根據(jù)接收到的命令I(lǐng)D,完成該命令I(lǐng)D對(duì)應(yīng)的界面元素的功能和狀態(tài)變化,并返回界面窗體模塊。
[0047]本發(fā)明系統(tǒng)中,創(chuàng)建由插件中的界面元素創(chuàng)建模塊來調(diào)用,比如創(chuàng)建一工具條,添加一按鈕等等抽象的創(chuàng)建過程,即與界面無關(guān),只表達(dá)創(chuàng)建語(yǔ)義,之后界面元素創(chuàng)建模塊調(diào)用主系統(tǒng)中的控件創(chuàng)建模塊,而實(shí)現(xiàn)界面元素的創(chuàng)建,比如創(chuàng)建基于API的工具條窗體句柄并設(shè)置為3D樣式,或者添加一 BCG樣式按鈕等等具體的創(chuàng)建過程。這點(diǎn)也正體現(xiàn)了本發(fā)明將主系統(tǒng)的實(shí)現(xiàn)和插件的實(shí)現(xiàn)完全分離,將界面元素的界面邏輯和功能邏輯分開,使得主系統(tǒng)提供界面元素的界面風(fēng)格,插件提供界面元素功能邏輯,實(shí)現(xiàn)了插件適應(yīng)不同的主系統(tǒng),擴(kuò)展提高了插件的可擴(kuò)展性的優(yōu)點(diǎn)。
[0048]圖2是本發(fā)明實(shí)現(xiàn)加載界面元素的方法的流程圖,如圖2所示,包括以下步驟:
[0049]步驟200:主系統(tǒng)需要界面元素時(shí),從插件獲取界面元素信息。
[0050]本步驟中,主系統(tǒng)在接收到請(qǐng)求顯示界面元素的顯示請(qǐng)求時(shí),向插件發(fā)送查詢請(qǐng)求,要求插件查詢自身能提供的界面元素信息,并將查詢結(jié)果返回給主系統(tǒng)。
[0051]查詢結(jié)果可按照預(yù)先設(shè)定的要求給出,比如最簡(jiǎn)單的就是有/無界面元素,界面元素的個(gè)數(shù)等。
[0052]步驟201:主系統(tǒng)根據(jù)獲得的界面元素信息,通知(調(diào)用)插件創(chuàng)建界面元素。
[0053]本步驟中,倉(cāng)Il建由插件來調(diào)用,比如創(chuàng)建一工具條,添加一按鈕等等抽象的創(chuàng)建過程,即與界面無關(guān),只表達(dá)創(chuàng)建語(yǔ)義。
[0054]步驟202:插件調(diào)用主系統(tǒng)的控件創(chuàng)建模塊創(chuàng)建界面元素。
[0055]本步驟中,主系統(tǒng)實(shí)現(xiàn)界面元素的創(chuàng)建,比如創(chuàng)建基于API的工具條窗體句柄并設(shè)置為3D樣式,或者添加一 BCG樣式按鈕等等具體的創(chuàng)建過程。具體的創(chuàng)建方法很多,屬于本領(lǐng)域技術(shù)人員公知技術(shù),這里不再詳述。
[0056]主系統(tǒng)中的控件創(chuàng)建模塊統(tǒng)一管理界面元素或其它控件的用于標(biāo)識(shí)不同界面元素的命令標(biāo)識(shí)(ID)。控件創(chuàng)建模塊為每一個(gè)創(chuàng)建的界面元素項(xiàng)分配唯一命令I(lǐng)D。
[0057]該方法還包括:主系統(tǒng)通過廣播的方式向插件發(fā)送需要顯示的界面窗體對(duì)應(yīng)的ID,插件按照接收到的命令I(lǐng)D調(diào)用界面元素處理模塊完成該命令I(lǐng)D對(duì)應(yīng)的界面元素的功能和狀態(tài)變化,并返回給主系統(tǒng)顯示。
[0058]當(dāng)需要不同風(fēng)格的界面元素時(shí),只需要在主系統(tǒng)重新實(shí)現(xiàn)控件創(chuàng)建模塊,或者在系統(tǒng)中預(yù)先設(shè)置多個(gè)不同風(fēng)格的控件創(chuàng)建模塊,并根據(jù)當(dāng)前需求選擇其中的空間創(chuàng)建模塊實(shí)現(xiàn)界面元素的創(chuàng)建。
[0059]通過本發(fā)明的過程,既實(shí)現(xiàn)了界面元素本身應(yīng)有的功能即界面的顯示和觸發(fā)事件的實(shí)現(xiàn),還將界面元素的界面邏輯和功能邏輯分開,使得主系統(tǒng)提供界面元素的界面風(fēng)格,插件提供界面元素功能邏輯,實(shí)現(xiàn)了插件適應(yīng)不同的主系統(tǒng),擴(kuò)展提高了插件的可擴(kuò)展性。
[0060]以上所述,僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種創(chuàng)建界面元素的系統(tǒng),其特征在于,該系統(tǒng)包括:主系統(tǒng)和插件,其中, 主系統(tǒng)用于實(shí)現(xiàn)界面元素的實(shí)際創(chuàng)建,并提供界面元素的顯示樣式; 插件用于實(shí)現(xiàn)界面元素具體的功能實(shí)現(xiàn); 主系統(tǒng)需要界面元素時(shí),從插件獲取界面元素信息,并根據(jù)獲得的界面元素信息,通知插件創(chuàng)建界面元素;插件在創(chuàng)建過程中調(diào)用主系統(tǒng)完成實(shí)際的界面元素創(chuàng)建。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述主系統(tǒng)包括:界面窗體模塊和控件創(chuàng)建模塊,其中, 界面窗體模塊,用于向所述插件發(fā)送查詢請(qǐng)求;接收來自所述插件的查詢響應(yīng),根據(jù)獲得的查詢結(jié)果獲取需要?jiǎng)?chuàng)建的界面元素;向所述插件發(fā)送創(chuàng)建請(qǐng)求; 控件創(chuàng)建模塊,用于接收來自插件的創(chuàng)建通知,完成界面元素的實(shí)際創(chuàng)建,并為每一個(gè)創(chuàng)建的界面元素項(xiàng)分配用于標(biāo)識(shí)不同界面元素的命令標(biāo)識(shí)ID。
3.根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,所述控件創(chuàng)建模塊為一組COM組件接口。
4.根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,所述插件包括:控件查詢模塊和界面元素創(chuàng)建模塊,其中, 控件查詢模塊,接收來自所述主系統(tǒng)的查詢請(qǐng)求,獲取插件包含的界面元素的信息,并將該信息攜帶在查詢響應(yīng)中通知給所述主系統(tǒng); 界面元素創(chuàng)建模塊,接收來自所述主系統(tǒng)的創(chuàng)建請(qǐng)求,通知所述主系統(tǒng)的控件創(chuàng)建模塊創(chuàng)建界面元素。
5.根據(jù)權(quán)利要求4所述的系統(tǒng),其特征在于,所述界面窗體模塊還用于,向所述插件中的界面元素功能處理模塊廣播需要顯示的界面窗體對(duì)應(yīng)的命令I(lǐng)D ;顯示所述插件返回的界面元素; 所述插件還包括:界面元素功能處理模塊,根據(jù)接收到的命令I(lǐng)D,完成該命令I(lǐng)D對(duì)應(yīng)的界面元素的功能和狀態(tài)變化,并返回界面窗體模塊。
6.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述插件為一個(gè)或一個(gè)以上;所述界面元素為工具條。
7.根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,所述控件創(chuàng)建模塊為一個(gè)或一個(gè)以上。
8.一種創(chuàng)建界面元素的方法,其特征在于,該方法包括以下步驟: A.主系統(tǒng)需要界面元素時(shí),從插件獲取界面元素信息,并根據(jù)獲得的界面元素信息,通知插件創(chuàng)建界面元素; B.插件調(diào)用主系統(tǒng)的控件創(chuàng)建模塊創(chuàng)建界面元素。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,該方法還包括:所述主系統(tǒng)的控件創(chuàng)建模塊為每一個(gè)創(chuàng)建的界面元素項(xiàng)分配用于標(biāo)識(shí)不同界面元素的命令標(biāo)識(shí)ID。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,該方法還包括:所述主系統(tǒng)通過廣播的方式向插件發(fā)送需要顯示的界面窗體對(duì)應(yīng)的ID,所述插件按照接收到的命令I(lǐng)D調(diào)用界面元素處理模塊完成該命令I(lǐng)D對(duì)應(yīng)的界面元素的功能和狀態(tài)變化,并返回給主系統(tǒng)顯示。
【文檔編號(hào)】G06F9/445GK104461600SQ201310445468
【公開日】2015年3月25日 申請(qǐng)日期:2013年9月25日 優(yōu)先權(quán)日:2013年9月25日
【發(fā)明者】王東臨 申請(qǐng)人:天津書生軟件技術(shù)有限公司