亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于LayeredWindow的異形窗體局部刷新

        2014-03-06 23:49:14魏振鋼張恩偉
        中文信息 2014年2期
        關(guān)鍵詞:界面方法

        魏振鋼 張恩偉

        摘 要:通過對現(xiàn)存界面庫的分析,解釋當(dāng)前異形窗體的創(chuàng)建與刷新的難點,及刷新時CPU占用率高的問題,通過對updateLayeredwindow接口的深度剖析,闡述了利用雙界面合成的方法來模擬局部刷新。采用先對局部窗體重繪,然后與原界面合成的方法,大量減小了刷新時的重繪量,從而大幅度減輕了CPU的占用率。

        關(guān)鍵詞:界面 異形窗體updateLayeredwindow 局部刷新

        中圖分類號:TP3011.11 文獻(xiàn)標(biāo)識碼:A 文章編號:1003-9082(2014)02-0001-02

        一、引言

        隨著計算機的發(fā)展,當(dāng)今用戶對應(yīng)用軟件不再僅僅滿足于功能的完善,而且對用戶界面友好性、美觀性要求越來越高。所以,以往的桌面應(yīng)用程序開發(fā)并不能滿足這些界面開發(fā)要求,這就致使越來越多的界面庫的涌現(xiàn),而現(xiàn)今的界面庫大都基于DirectUI的設(shè)計思想[1],但由于原有窗體是規(guī)則的,所以根本無法實現(xiàn)異形窗體。隨著微軟分層窗體的設(shè)計思想及UpdateLayeredWindow函數(shù)的出現(xiàn),異形窗體的實現(xiàn)才真正成為可能。但由于UpdateLayeredWindow本身的特性導(dǎo)致每次都必須全部重繪整個程序界面,所以即便是一個像素的改變,都將導(dǎo)致整個窗體的刷新,這對于CPU的占用是非常巨大的,尤其在大型軟件中,這將是災(zāi)難性的。

        本文在解析分層窗體和UpdateLayeredWindow的基礎(chǔ)上,利用雙界面合成的方法模擬實現(xiàn)異形界面的局部刷新,徹底解決了異形窗體的刷新問題,為DirectUI實現(xiàn)異形窗體掃除了一大障礙,為界面庫的研究提供了新方法,新思路。

        二、異形窗體與局部刷新技術(shù)

        1.異形窗體簡介

        1.1分層窗體簡介

        在創(chuàng)建窗體時,擁有擴展屬性WS_EX_LAYERED的窗體就是分層窗體了。通過分層窗體,我們可以實現(xiàn)異形、具有alpha值的窗體,另外還能為窗體實現(xiàn)動作,解決了以往的純靜態(tài)窗體的現(xiàn)實。對于分層窗體的繪圖機制,可以有兩種選擇,其一是采用以往的WM_PAINT消息響應(yīng)機制及局部刷新技術(shù),但這種方法無法實現(xiàn)異形窗體。其二就是使用UpdateLayeredWindow函數(shù),將繪圖工作由系統(tǒng)托管,用戶只需告訴系統(tǒng)需要繪制哪些圖像;

        1.2 UpdateLayeredWindow函數(shù)簡介及現(xiàn)存問題

        UpdateLayeredWindow函數(shù)是WIN32 API里功能非常強大的一個函數(shù)。通過在內(nèi)存DC上作畫,然后把該DC傳遞給UpdateLayeredWindow,系統(tǒng)就會托管后面的圖像儲存、壓縮、渲染等工作,并且所有的繪圖工作都由UpdateLayeredWindow來執(zhí)行,也就是說你在內(nèi)存DC上畫了什么,就會顯示出來什么[2]。

        UpdateLayeredWindow改變了以往窗體繪制方式,由于每次繪圖都要由UpdateLayeredWindow來操作,所以每次我們都要畫出當(dāng)前的整個應(yīng)用程序界面,這就導(dǎo)致每次都要重新繪制整個窗體。這樣就引起了我們引言中講到的CPU占用高的問題。正是由于這個問題,當(dāng)今的所有開源界面庫全部都沒有基于UpdateLayeredWindow來實現(xiàn)界面,當(dāng)然也就無法實現(xiàn)異形,所以對于異形窗體,如何實現(xiàn)局部刷新是必須要解決的。

        2.雙界面合成方法模擬實現(xiàn)局部刷新

        通過上節(jié)的講解,全部刷新是由于UpdateLayeredWindow自身實現(xiàn)的問題,所以我們無法更改,所以我們只有采用模擬的方法來實現(xiàn)局部刷新。

        如圖一所示,原界面上有三個按鈕控件,均為橢圓狀,虛線框表示每個控件的大小,實際并不存在,這里要實現(xiàn)的效果是,當(dāng)用戶點擊第一個控件時,將其改變成另一樣式(菱形),雙界面合成方法實現(xiàn)局部刷新的過程如下:

        2.1首先,保存原界面;(步驟一)

        眾所周知,在WINDOWS程序中,繪圖DC是與畫布相關(guān)聯(lián)的,只要我們的畫布不銷毀,界面就不會改變。所以,我們先保存上次的畫布,為合成最新的畫布做準(zhǔn)備。

        2.2創(chuàng)建一個臨時畫布,并在其上畫出當(dāng)前最新的控件樣式及其背景;(步驟二)

        2.4將最新繪制的控件及其背景根據(jù)更新區(qū)域大小進行裁剪;(步驟四)

        2.5將裁剪后的圖像與原圖像摳圖進行合成,形成最終的軟件界面;(步驟五)

        2.6將最終的軟件界面?zhèn)鬟f給UpdateLayeredWindow顯示出來即可;

        三、結(jié)論

        通過研究分層窗體,實現(xiàn)了局部刷新技術(shù),解決了當(dāng)前所有的界面庫都無法創(chuàng)建異形的問題,另外在此基礎(chǔ)上,在繪圖時,可以使用GDI+繪畫技術(shù),而不會出現(xiàn)穿透性問題,同時解決了GDI+與異形窗體的融合性問題。當(dāng)然對于界面庫而言,興起時間也不長,對于異形窗體的實現(xiàn)更是具有難度的,我相信對于異形窗體的研究會出現(xiàn)更多的成果,就要靠大家在實踐中慢慢摸索了。

        參考文獻(xiàn)

        [1]BjarkeViksoe.UI: Become windowless.[20011-9-16] .http://www.viksoe.dk/code/windowless1.htm

        [2] VadimGorokhovsky, Lou Amadio .MSDN—LayeredWindow.[2010-7] http://msdn.microsoft.com/en-us/library/ms997507.aspx

        摘 要:通過對現(xiàn)存界面庫的分析,解釋當(dāng)前異形窗體的創(chuàng)建與刷新的難點,及刷新時CPU占用率高的問題,通過對updateLayeredwindow接口的深度剖析,闡述了利用雙界面合成的方法來模擬局部刷新。采用先對局部窗體重繪,然后與原界面合成的方法,大量減小了刷新時的重繪量,從而大幅度減輕了CPU的占用率。

        關(guān)鍵詞:界面 異形窗體updateLayeredwindow 局部刷新

        中圖分類號:TP3011.11 文獻(xiàn)標(biāo)識碼:A 文章編號:1003-9082(2014)02-0001-02

        一、引言

        隨著計算機的發(fā)展,當(dāng)今用戶對應(yīng)用軟件不再僅僅滿足于功能的完善,而且對用戶界面友好性、美觀性要求越來越高。所以,以往的桌面應(yīng)用程序開發(fā)并不能滿足這些界面開發(fā)要求,這就致使越來越多的界面庫的涌現(xiàn),而現(xiàn)今的界面庫大都基于DirectUI的設(shè)計思想[1],但由于原有窗體是規(guī)則的,所以根本無法實現(xiàn)異形窗體。隨著微軟分層窗體的設(shè)計思想及UpdateLayeredWindow函數(shù)的出現(xiàn),異形窗體的實現(xiàn)才真正成為可能。但由于UpdateLayeredWindow本身的特性導(dǎo)致每次都必須全部重繪整個程序界面,所以即便是一個像素的改變,都將導(dǎo)致整個窗體的刷新,這對于CPU的占用是非常巨大的,尤其在大型軟件中,這將是災(zāi)難性的。

        本文在解析分層窗體和UpdateLayeredWindow的基礎(chǔ)上,利用雙界面合成的方法模擬實現(xiàn)異形界面的局部刷新,徹底解決了異形窗體的刷新問題,為DirectUI實現(xiàn)異形窗體掃除了一大障礙,為界面庫的研究提供了新方法,新思路。

        二、異形窗體與局部刷新技術(shù)

        1.異形窗體簡介

        1.1分層窗體簡介

        在創(chuàng)建窗體時,擁有擴展屬性WS_EX_LAYERED的窗體就是分層窗體了。通過分層窗體,我們可以實現(xiàn)異形、具有alpha值的窗體,另外還能為窗體實現(xiàn)動作,解決了以往的純靜態(tài)窗體的現(xiàn)實。對于分層窗體的繪圖機制,可以有兩種選擇,其一是采用以往的WM_PAINT消息響應(yīng)機制及局部刷新技術(shù),但這種方法無法實現(xiàn)異形窗體。其二就是使用UpdateLayeredWindow函數(shù),將繪圖工作由系統(tǒng)托管,用戶只需告訴系統(tǒng)需要繪制哪些圖像;

        1.2 UpdateLayeredWindow函數(shù)簡介及現(xiàn)存問題

        UpdateLayeredWindow函數(shù)是WIN32 API里功能非常強大的一個函數(shù)。通過在內(nèi)存DC上作畫,然后把該DC傳遞給UpdateLayeredWindow,系統(tǒng)就會托管后面的圖像儲存、壓縮、渲染等工作,并且所有的繪圖工作都由UpdateLayeredWindow來執(zhí)行,也就是說你在內(nèi)存DC上畫了什么,就會顯示出來什么[2]。

        UpdateLayeredWindow改變了以往窗體繪制方式,由于每次繪圖都要由UpdateLayeredWindow來操作,所以每次我們都要畫出當(dāng)前的整個應(yīng)用程序界面,這就導(dǎo)致每次都要重新繪制整個窗體。這樣就引起了我們引言中講到的CPU占用高的問題。正是由于這個問題,當(dāng)今的所有開源界面庫全部都沒有基于UpdateLayeredWindow來實現(xiàn)界面,當(dāng)然也就無法實現(xiàn)異形,所以對于異形窗體,如何實現(xiàn)局部刷新是必須要解決的。

        2.雙界面合成方法模擬實現(xiàn)局部刷新

        通過上節(jié)的講解,全部刷新是由于UpdateLayeredWindow自身實現(xiàn)的問題,所以我們無法更改,所以我們只有采用模擬的方法來實現(xiàn)局部刷新。

        如圖一所示,原界面上有三個按鈕控件,均為橢圓狀,虛線框表示每個控件的大小,實際并不存在,這里要實現(xiàn)的效果是,當(dāng)用戶點擊第一個控件時,將其改變成另一樣式(菱形),雙界面合成方法實現(xiàn)局部刷新的過程如下:

        2.1首先,保存原界面;(步驟一)

        眾所周知,在WINDOWS程序中,繪圖DC是與畫布相關(guān)聯(lián)的,只要我們的畫布不銷毀,界面就不會改變。所以,我們先保存上次的畫布,為合成最新的畫布做準(zhǔn)備。

        2.2創(chuàng)建一個臨時畫布,并在其上畫出當(dāng)前最新的控件樣式及其背景;(步驟二)

        2.4將最新繪制的控件及其背景根據(jù)更新區(qū)域大小進行裁剪;(步驟四)

        2.5將裁剪后的圖像與原圖像摳圖進行合成,形成最終的軟件界面;(步驟五)

        2.6將最終的軟件界面?zhèn)鬟f給UpdateLayeredWindow顯示出來即可;

        三、結(jié)論

        通過研究分層窗體,實現(xiàn)了局部刷新技術(shù),解決了當(dāng)前所有的界面庫都無法創(chuàng)建異形的問題,另外在此基礎(chǔ)上,在繪圖時,可以使用GDI+繪畫技術(shù),而不會出現(xiàn)穿透性問題,同時解決了GDI+與異形窗體的融合性問題。當(dāng)然對于界面庫而言,興起時間也不長,對于異形窗體的實現(xiàn)更是具有難度的,我相信對于異形窗體的研究會出現(xiàn)更多的成果,就要靠大家在實踐中慢慢摸索了。

        參考文獻(xiàn)

        [1]BjarkeViksoe.UI: Become windowless.[20011-9-16] .http://www.viksoe.dk/code/windowless1.htm

        [2] VadimGorokhovsky, Lou Amadio .MSDN—LayeredWindow.[2010-7] http://msdn.microsoft.com/en-us/library/ms997507.aspx

        摘 要:通過對現(xiàn)存界面庫的分析,解釋當(dāng)前異形窗體的創(chuàng)建與刷新的難點,及刷新時CPU占用率高的問題,通過對updateLayeredwindow接口的深度剖析,闡述了利用雙界面合成的方法來模擬局部刷新。采用先對局部窗體重繪,然后與原界面合成的方法,大量減小了刷新時的重繪量,從而大幅度減輕了CPU的占用率。

        關(guān)鍵詞:界面 異形窗體updateLayeredwindow 局部刷新

        中圖分類號:TP3011.11 文獻(xiàn)標(biāo)識碼:A 文章編號:1003-9082(2014)02-0001-02

        一、引言

        隨著計算機的發(fā)展,當(dāng)今用戶對應(yīng)用軟件不再僅僅滿足于功能的完善,而且對用戶界面友好性、美觀性要求越來越高。所以,以往的桌面應(yīng)用程序開發(fā)并不能滿足這些界面開發(fā)要求,這就致使越來越多的界面庫的涌現(xiàn),而現(xiàn)今的界面庫大都基于DirectUI的設(shè)計思想[1],但由于原有窗體是規(guī)則的,所以根本無法實現(xiàn)異形窗體。隨著微軟分層窗體的設(shè)計思想及UpdateLayeredWindow函數(shù)的出現(xiàn),異形窗體的實現(xiàn)才真正成為可能。但由于UpdateLayeredWindow本身的特性導(dǎo)致每次都必須全部重繪整個程序界面,所以即便是一個像素的改變,都將導(dǎo)致整個窗體的刷新,這對于CPU的占用是非常巨大的,尤其在大型軟件中,這將是災(zāi)難性的。

        本文在解析分層窗體和UpdateLayeredWindow的基礎(chǔ)上,利用雙界面合成的方法模擬實現(xiàn)異形界面的局部刷新,徹底解決了異形窗體的刷新問題,為DirectUI實現(xiàn)異形窗體掃除了一大障礙,為界面庫的研究提供了新方法,新思路。

        二、異形窗體與局部刷新技術(shù)

        1.異形窗體簡介

        1.1分層窗體簡介

        在創(chuàng)建窗體時,擁有擴展屬性WS_EX_LAYERED的窗體就是分層窗體了。通過分層窗體,我們可以實現(xiàn)異形、具有alpha值的窗體,另外還能為窗體實現(xiàn)動作,解決了以往的純靜態(tài)窗體的現(xiàn)實。對于分層窗體的繪圖機制,可以有兩種選擇,其一是采用以往的WM_PAINT消息響應(yīng)機制及局部刷新技術(shù),但這種方法無法實現(xiàn)異形窗體。其二就是使用UpdateLayeredWindow函數(shù),將繪圖工作由系統(tǒng)托管,用戶只需告訴系統(tǒng)需要繪制哪些圖像;

        1.2 UpdateLayeredWindow函數(shù)簡介及現(xiàn)存問題

        UpdateLayeredWindow函數(shù)是WIN32 API里功能非常強大的一個函數(shù)。通過在內(nèi)存DC上作畫,然后把該DC傳遞給UpdateLayeredWindow,系統(tǒng)就會托管后面的圖像儲存、壓縮、渲染等工作,并且所有的繪圖工作都由UpdateLayeredWindow來執(zhí)行,也就是說你在內(nèi)存DC上畫了什么,就會顯示出來什么[2]。

        UpdateLayeredWindow改變了以往窗體繪制方式,由于每次繪圖都要由UpdateLayeredWindow來操作,所以每次我們都要畫出當(dāng)前的整個應(yīng)用程序界面,這就導(dǎo)致每次都要重新繪制整個窗體。這樣就引起了我們引言中講到的CPU占用高的問題。正是由于這個問題,當(dāng)今的所有開源界面庫全部都沒有基于UpdateLayeredWindow來實現(xiàn)界面,當(dāng)然也就無法實現(xiàn)異形,所以對于異形窗體,如何實現(xiàn)局部刷新是必須要解決的。

        2.雙界面合成方法模擬實現(xiàn)局部刷新

        通過上節(jié)的講解,全部刷新是由于UpdateLayeredWindow自身實現(xiàn)的問題,所以我們無法更改,所以我們只有采用模擬的方法來實現(xiàn)局部刷新。

        如圖一所示,原界面上有三個按鈕控件,均為橢圓狀,虛線框表示每個控件的大小,實際并不存在,這里要實現(xiàn)的效果是,當(dāng)用戶點擊第一個控件時,將其改變成另一樣式(菱形),雙界面合成方法實現(xiàn)局部刷新的過程如下:

        2.1首先,保存原界面;(步驟一)

        眾所周知,在WINDOWS程序中,繪圖DC是與畫布相關(guān)聯(lián)的,只要我們的畫布不銷毀,界面就不會改變。所以,我們先保存上次的畫布,為合成最新的畫布做準(zhǔn)備。

        2.2創(chuàng)建一個臨時畫布,并在其上畫出當(dāng)前最新的控件樣式及其背景;(步驟二)

        2.4將最新繪制的控件及其背景根據(jù)更新區(qū)域大小進行裁剪;(步驟四)

        2.5將裁剪后的圖像與原圖像摳圖進行合成,形成最終的軟件界面;(步驟五)

        2.6將最終的軟件界面?zhèn)鬟f給UpdateLayeredWindow顯示出來即可;

        三、結(jié)論

        通過研究分層窗體,實現(xiàn)了局部刷新技術(shù),解決了當(dāng)前所有的界面庫都無法創(chuàng)建異形的問題,另外在此基礎(chǔ)上,在繪圖時,可以使用GDI+繪畫技術(shù),而不會出現(xiàn)穿透性問題,同時解決了GDI+與異形窗體的融合性問題。當(dāng)然對于界面庫而言,興起時間也不長,對于異形窗體的實現(xiàn)更是具有難度的,我相信對于異形窗體的研究會出現(xiàn)更多的成果,就要靠大家在實踐中慢慢摸索了。

        參考文獻(xiàn)

        [1]BjarkeViksoe.UI: Become windowless.[20011-9-16] .http://www.viksoe.dk/code/windowless1.htm

        [2] VadimGorokhovsky, Lou Amadio .MSDN—LayeredWindow.[2010-7] http://msdn.microsoft.com/en-us/library/ms997507.aspx

        猜你喜歡
        界面方法
        國企黨委前置研究的“四個界面”
        學(xué)習(xí)方法
        基于FANUC PICTURE的虛擬軸坐標(biāo)顯示界面開發(fā)方法研究
        空間界面
        金秋(2017年4期)2017-06-07 08:22:16
        電子顯微打開材料界面世界之門
        人機交互界面發(fā)展趨勢研究
        可能是方法不對
        用對方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        賺錢方法
        亚洲色图偷拍自拍在线| 热久久国产欧美一区二区精品| 俄罗斯老熟妇色xxxx| 国产99久久无码精品| 亚洲av偷拍一区二区三区| 亚洲美女毛多水多免费视频| 久久久久亚洲精品无码网址蜜桃 | 曰本极品少妇videossexhd| 亚洲电影一区二区| 久久老熟女一区二区三区| 精品综合久久久久久888蜜芽| 精品国内自产拍在线观看| 国产亚洲日韩欧美一区二区三区| 两个人免费视频大全毛片| 久久精品国产亚洲综合av| 精品人妻少妇嫩草av无码专区| 亚洲av无码一区二区乱子伦| 中文字幕亚洲精品人妻| 日韩午夜免费视频精品一区| 国产精品中文久久久久久久 | 午夜国产小视频在线观看黄| 文字幕精品一区二区三区老狼| 亚洲av无码xxx麻豆艾秋| 亚洲电影一区二区三区 | 欧美日韩视频无码一区二区三| 九一成人AV无码一区二区三区| 伊人精品成人久久综合97| 午夜爽爽爽男女污污污网站| 久久人与动人物a级毛片| 国产精品福利小视频| 麻豆视频黄片在线免费观看| 中国美女a级毛片| 风流少妇又紧又爽又丰满| 日韩丝袜人妻中文字幕| 好大好爽我要高潮在线观看| 精品一区二区三区免费播放| 欧美日韩一区二区三区视频在线观看 | 99久久精品国产91| 国产av无码专区亚洲av毛网站| 色综合久久综合欧美综合图片| 久久久精品久久久国产|