態(tài)發(fā)生變化的對(duì)話框主體及對(duì)話框的任一子控件對(duì)應(yīng)的圖形元素重新進(jìn)行繪制,具體的繪制過(guò)程,可參見后續(xù)步驟。其中,對(duì)話框主體及對(duì)話框的各個(gè)子控件處于正常顯示狀態(tài)為對(duì)話框主體及對(duì)話框的各個(gè)子控件對(duì)應(yīng)的圖形元素所在的界面無(wú)遮擋、界面大小與第一界面的大小相同且界面上對(duì)話框的各個(gè)子控件對(duì)應(yīng)的圖形元素未處于選中狀態(tài)等,本實(shí)施例不對(duì)對(duì)話框主體及對(duì)話框的各個(gè)子控件處于正常顯示狀態(tài)作具體的限定。
[0097]203:確定第一界面中需要重新繪制的圖形元素。
[0098]由于第一界面上的圖形元素是在對(duì)話框主體及對(duì)話框的各個(gè)子控件為正常顯示狀態(tài)下繪制的,而實(shí)際操作過(guò)程中,對(duì)話框主體及對(duì)話框的任一子控件的顯示狀態(tài)都可能發(fā)生變化。當(dāng)對(duì)話框主體及對(duì)話框的任一子控件的顯示狀態(tài)發(fā)生變化時(shí),第一界面上已繪制的對(duì)話框主體及對(duì)話框的任一子控件對(duì)應(yīng)的圖形元素將不能反應(yīng)該對(duì)話框主體及對(duì)話框的任一子控件的當(dāng)前顯示狀態(tài)。因此,為了使顯示的對(duì)話框主體及對(duì)話框各個(gè)子控件能夠?qū)崟r(shí)地反應(yīng)對(duì)話框主體及對(duì)話框的各個(gè)子控件的當(dāng)前狀態(tài),需要先確定第一界面上顯示狀態(tài)變化的對(duì)話框主體及對(duì)話框的任一子控件,并將第一界面上顯示狀態(tài)變化的對(duì)話框主體及對(duì)話框的任一子控件作為需要重新繪制的對(duì)話框主體及對(duì)話框的任一子控件,進(jìn)而將需要重新繪制的對(duì)話框主體及對(duì)話框的任一子控件在第一界面上對(duì)應(yīng)的位置上重新繪制。
[0099]由于對(duì)話框主體及對(duì)話框的各個(gè)子控件在第一界面上是以不同的圖形元素的形式存在的,因此,確定第一界面上需要重新繪制的對(duì)話框主體及對(duì)話框的任一子控件,實(shí)際上是確定第一界面中需要重新繪制的圖形元素。具體地,確定第一界面中需要重新繪制的圖形元素,包括但不限于:
[0100]調(diào)用API函數(shù)中的接口函數(shù)獲取需要重新繪制的區(qū)域,并根據(jù)需要重新繪制的區(qū)域確定第一界面中需要重新繪制的圖形元素。
[0101]其中,API函數(shù)用于向操作系統(tǒng)中的應(yīng)用程序提供幫助,以使應(yīng)用程序可開啟視窗、描繪圖形、使用周邊設(shè)備等。API函數(shù)中的接口函數(shù)包括但不限于GetrandomRgn函數(shù)等,本實(shí)施例不對(duì)API函數(shù)中的接口函數(shù)作具體的限定。
[0102]具體地,根據(jù)需要重新繪制的區(qū)域確定第一界面中需要重新繪制的圖形元素,包括但不限于如下步驟:
[0103]第一步,循環(huán)獲取每個(gè)圖形元素的控件句柄,并通過(guò)每個(gè)圖形元素的控件句柄獲取每個(gè)圖形元素在第一界面上的位置區(qū)域;
[0104]針對(duì)第一步,關(guān)于獲取每個(gè)圖形元素的控件句柄的方式,本實(shí)施例不作具體的限定。具體實(shí)施時(shí),以米用 Microsoft Visual C++為例,可通過(guò) GetDlgItem、FindWindowEx、EnumChildffindows等獲取。為了避免遺漏第一界面上需要重新繪制的圖形元素,在獲取每個(gè)圖形元素的控件句柄時(shí),可采取循環(huán)的方式獲取。
[0105]第二步,判斷需要重新繪制的區(qū)域與每個(gè)圖形元素在第一界面上的位置區(qū)域是否有交集;
[0106]針對(duì)第二步,為了確定第一界面上需要重新繪制的圖形元素,在通過(guò)每個(gè)圖形元素的控件句柄獲取到每個(gè)圖形元素在第一界面上的位置區(qū)域之后,可將調(diào)用API函數(shù)中的接口函數(shù)獲取到需要重新繪制的區(qū)域與每個(gè)圖形元素在第一界面上的位置區(qū)域進(jìn)行比對(duì),進(jìn)而判斷需要重新繪制的區(qū)域與每個(gè)圖形元素在第一界面上的位置區(qū)域是否有交集。
[0107]第三步,若需要重新繪制的區(qū)域與任一圖形元素在第一界面上的位置區(qū)域有交集,則確定該任一圖形元素為第一界面中需要重新繪制的圖形元素。
[0108]針對(duì)第三步,當(dāng)需要重新繪制的區(qū)域與任一圖形元素在第一界面上的位置區(qū)域有交集,說(shuō)明該任一圖形元素中與需要重新繪制的區(qū)域有交集的區(qū)域?yàn)樾枰匦吕L制的區(qū)域,而圖形元素的繪制是以整個(gè)圖形元素為單位進(jìn)行繪制的,因此,可將該任一圖形元素作為第一界面上需要重新繪制的圖形元素。
[0109]需要說(shuō)明的是,本實(shí)施提供的界面顯示方法在確定第一界面上需要重新繪制的圖形元素時(shí),主要是針對(duì)于對(duì)話框的各個(gè)子控件,對(duì)于對(duì)話框主體,僅在對(duì)話框主體完全在需要重新繪制的區(qū)域內(nèi)時(shí),才將對(duì)話框主體作為需要重新繪制的圖形元素。
[0110]對(duì)于上述根據(jù)需要重新繪制的區(qū)域確定第一界面中需要重新繪制的圖形元素的過(guò)程,為了便于理解,下面將一個(gè)具體的例子進(jìn)行詳細(xì)地解釋說(shuō)明。
[0111]參見圖3,圖3為第一界面的示意圖。其中,第一界面上圖形元素為對(duì)話框主體對(duì)應(yīng)的圖形元素a、對(duì)話框的子控件A對(duì)應(yīng)的圖形元素b、對(duì)話框的子控件B對(duì)應(yīng)的圖形元素c及對(duì)話框的子控件C對(duì)應(yīng)的圖形元素d。若確定的需要重新繪制的區(qū)域?yàn)閰^(qū)域5,通過(guò)循環(huán)獲取的方式獲取到的圖形元素a在第一界面上的位置區(qū)域?yàn)槲恢脜^(qū)域1,圖形元素b在第一界面上的位置區(qū)域?yàn)槲恢脜^(qū)域2,圖形元素c在第一界面上的位置區(qū)域?yàn)槲恢脜^(qū)域3,圖形元素d在第一界面上的位置區(qū)域?yàn)槲恢脜^(qū)域4。由圖3可知,圖形元素b及圖形元素c在第一界面上的位置區(qū)域與需要重新繪制的區(qū)域5有交交集,則將第一界面上的圖形元素b和c確定為需要重新繪制的圖形元素;而圖形元素d在第一界面上的位置區(qū)域與需要重新繪制的區(qū)域5無(wú)交集,則圖形元素d不作為需要重新繪制的圖形元素,在后續(xù)步驟中無(wú)需對(duì)圖形元素d重新進(jìn)行繪制。
[0112]204:將需要重新繪制的圖形元素重新繪制在第一界面對(duì)應(yīng)的位置上,得到第二界面。
[0113]具體地,將需要重新繪制的圖形元素重新繪制在第一界面對(duì)應(yīng)的位置上,包括但不限于:
[0114]接收API函數(shù)中的消息處理函數(shù)發(fā)送的界面重繪消息,并根據(jù)界面重繪消息將需要重新繪制的圖形元素重新繪制在第一界面對(duì)應(yīng)的位置上。
[0115]其中,API函數(shù)中的消息處理函數(shù)包括但不限于DefWindowproc函數(shù)等,本實(shí)施例不對(duì)API函數(shù)中的消息處理函數(shù)作具體的限定。界面重繪消息包括但不限于WM_PRINTCLENT消息等,本實(shí)施例不對(duì)界面重繪消息作具體的限定。WM_PRINTCLENT消息是界面系統(tǒng)中的重要消息,界面系統(tǒng)通過(guò)處理該消息可實(shí)現(xiàn)界面的重繪工作。界面重繪消息的內(nèi)容包括但不限于需要重新繪制的圖形元素的標(biāo)識(shí)等,本實(shí)施例不對(duì)界面繪制消息的內(nèi)容作具體的限定。仍以圖3為例,在上述步驟203中第一界面上的圖形元素b和c確定為需要重新繪制的圖像元素,界面繪制裝置在接收到API函數(shù)中的消息處理函數(shù)發(fā)送的界面重繪消息之后,根據(jù)窗口重繪消息將圖像元素b在第一界面上的位置區(qū)域2上重新進(jìn)行繪制,將圖像元素c在第一界面上的位置區(qū)域3上重新進(jìn)行繪制,得到第二界面。
[0116]205:將第二界面映射到前臺(tái),并在顯示設(shè)備上將第二界面顯示出來(lái)。
[0117]其中,顯示設(shè)備可以是手機(jī)、電腦等具有顯示屏幕的設(shè)備,本實(shí)施例不對(duì)顯示設(shè)備作具體的限定。在得到第二界面之后,為了能將第二界面上繪制的圖形元素顯示出來(lái),本實(shí)施例提供的方法需要將第二界面映射到前臺(tái),進(jìn)而在顯示設(shè)備上將第二界面顯示出來(lái)。以圖4中第二界面的示意圖為例,第二界面上繪制的圖形元素為對(duì)話框主體對(duì)應(yīng)的圖形元素1、對(duì)話框的子控件A對(duì)應(yīng)的圖形元素2、對(duì)話框的子控件B對(duì)應(yīng)的圖形元素3、對(duì)話框的子控件C對(duì)應(yīng)的圖形元素4及對(duì)話框的子控件D對(duì)應(yīng)的圖形元素5。將包含對(duì)話框主體1、對(duì)話框的子控件A、對(duì)話框的子控件B、對(duì)話框的子控件C及對(duì)話框的子控件D的第二界面映射到前臺(tái)之后,顯示設(shè)備將第二界面顯示來(lái),具體顯示的第二界面可參見圖4。
[0118]本發(fā)明實(shí)施例提供的方法,根據(jù)界面繪制消息在后臺(tái)創(chuàng)建設(shè)備上下文緩沖區(qū),并在設(shè)備上下文緩沖區(qū)內(nèi)繪制界面繪制消息對(duì)應(yīng)的對(duì)話框主體及對(duì)話框的各個(gè)子控件對(duì)應(yīng)的圖形元素,得到第一界面,進(jìn)而在第一界面中確定需要重新繪制的圖形元素之后,將需要重新繪制的圖形元素重新繪制在第一界面對(duì)應(yīng)的位置上,得到第二界面,并將第二界面映射到前臺(tái),由顯示設(shè)備將第二界面顯示出來(lái)。由于對(duì)話框主體及對(duì)話框的各個(gè)子控件被繪制在同一界面上,因而將繪制的對(duì)話框主體及對(duì)話框的各個(gè)子控件映射到前臺(tái)顯示時(shí)不會(huì)出現(xiàn)閃爍的現(xiàn)象,提高了界面顯示效果。
[0119]參見圖5,本發(fā)明實(shí)施例提供了一種界面顯示裝置,該裝置用于執(zhí)行圖1和圖2所示的實(shí)施例中任一實(shí)施例所述的界面顯示方法,該裝置包括:
[0120]接收模塊501,用于接收界面繪制消息;
[0121]創(chuàng)建模塊502,用于根據(jù)界面繪制消息在后臺(tái)創(chuàng)建設(shè)備上下文緩沖區(qū);
[0122]第一繪制模塊503,用于在設(shè)備上下文緩沖區(qū)內(nèi)繪制界面繪制消息對(duì)應(yīng)的對(duì)話框主體及對(duì)話框的各個(gè)子控件對(duì)應(yīng)的圖形元素,得到第一界面;
[0123]確定模塊504,用于確定第一界面中需要重新繪制的圖形元素;
[0124]第二繪制模塊505,用于將需要重新繪制的圖形元素重新繪制在第一界面對(duì)應(yīng)的位置上,得到第二界面;