專利名稱::實現(xiàn)可拉伸涂寫的電子幕布的方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于電子信息
技術(shù)領(lǐng)域:
,涉及計算機(jī)應(yīng)用軟件的界面設(shè)計,尤其涉及一種能夠從屏幕窗口內(nèi)任意位置拉伸出幕布的用戶界面。
背景技術(shù):
:傳統(tǒng)的辦公會議和教學(xué)環(huán)境設(shè)備中,最具權(quán)威的莫過于辦公室白板和教學(xué)黑板了,且一直被認(rèn)為是辦公和教學(xué)不可缺少的設(shè)備。隨著信息技術(shù)的發(fā)展、市場的需要以及成本的降低,電子白板開始走入辦公室和課堂,傳統(tǒng)的黑板和白板開始被電子化設(shè)備逐步取代。電子白板不僅健康和衛(wèi)生,而且使得辦公人員和教師在會議和課堂中的活動更具啟發(fā)和互動性。電子白板是一種匯集了尖端電子技術(shù)、軟件技術(shù)等多種高科技手段研發(fā)的高新技術(shù)產(chǎn)品,它通過應(yīng)用電磁感應(yīng)原理,結(jié)合計算機(jī)和投影機(jī),可以實現(xiàn)無紙化辦公及教學(xué)。隨著電子白板技術(shù)的推廣,與之相配套的應(yīng)用軟件也發(fā)展起來。目前,市面上己有的電子白板軟件均可以讓用戶通過手寫板書筆等工具在計算機(jī)電子文檔上進(jìn)行書寫和自由批注,同時借助投影儀等信息化設(shè)備進(jìn)行演示及教學(xué)活動;使用者在批注與解說的同時,電子白板軟件還提供一些輔助功能,比如插入圖片、flash動畫等資源加強(qiáng)解說效果;利用放大鏡、聚光燈、幕布等功能來突出重點內(nèi)容,從而改善師生相互交流的效果。這些輔助工具中,"幕布"功能主要用于遮擋屏幕的部分顯示區(qū)域。目前市面上看到的"幕布"工具,通常是一開始就遮擋住整個屏幕中的顯示內(nèi)容,用戶需要手動調(diào)節(jié)和改變"幕布"面積的大小,才能看到下一層窗口中的顯示內(nèi)容。例如,加拿大SMARTBoard互動電子白板軟件在啟用"幕布"功能時,就是直接彈出一個全屏"幕布"遮蓋住整個演示內(nèi)容,用戶需要通過輸入設(shè)備(鼠標(biāo)、手寫板等)手動調(diào)節(jié)"幕布"面積的大小,從而調(diào)整其遮蓋區(qū)域面積的大小,而且使用者只能在未遮蓋區(qū)域書寫和涂抹,其界面及"幕布"的拉伸方式如圖l所示。由此可見,這種"幕布"工具雖然起到了遮擋演示內(nèi)容的效果,但功能單一,不容易操作。使用者往往一開始只需要遮擋部分演示內(nèi)容,尤其需要對演示內(nèi)容進(jìn)行推演和詳細(xì)闡述時,往往不希望在演示文檔上勾畫和書寫過多的"筆跡"影響演示文件的放映效果,這就需要界面能夠在不影響文件放映效果的同時,還能夠隨時提供額外的區(qū)域供用戶書寫推演并能夠隨時清除的窗口區(qū)域。因此,一種操作方便、既可根據(jù)用戶需要遮擋演示內(nèi)容,又可以作為書寫涂抹區(qū)域的"幕布"工具的設(shè)計與開發(fā)成為急需解決的問題。
發(fā)明內(nèi)容本發(fā)明的目的是提供一種實現(xiàn)可拉伸涂寫的電子幕布的方法。為實現(xiàn)上述目的,采取以下方法(1)創(chuàng)建一個窗體對象;(2)在窗體內(nèi)任意位置處,至少創(chuàng)建一個面積不為零的區(qū)域用于顯示手柄,同時創(chuàng)建一個與手柄相對應(yīng)的矩形幕布;(3)創(chuàng)建用于窗體顯示的區(qū)域;(4)將窗體置入上述顯示區(qū)域中并繪制窗口;(5)當(dāng)鼠標(biāo)在窗口中任一手柄內(nèi)點擊并拖動時,根據(jù)當(dāng)前鼠標(biāo)點的位移動態(tài)改變手柄的位置及其對應(yīng)幕布矩形的面積大小,同時利用面積發(fā)生改變的幕布創(chuàng)建新的顯示區(qū)域,并將窗體置入該區(qū)域中重新繪制窗□。本發(fā)明的有益效果是,利用本發(fā)明所提供方法開發(fā)出的電子幕布,使用者在開啟幕布工具后,幕布并不馬上遮蓋演示內(nèi)容,使用者只有在需要使用"幕布"遮蓋部分或全部演示內(nèi)容時,點擊并拖拽窗口內(nèi)任一手柄控件,即可從某一方向或某一角度拉伸出幕布用以遮蓋所需內(nèi)容;除此之外,拉伸出的幕布還可以隨鼠標(biāo)的移動軌跡繪制出用戶筆跡。圖1是加拿大SMARTBoard的幕布界面及拉伸過程;圖2是利用CRgn類的成員函數(shù)創(chuàng)建各種形狀的區(qū)域;圖3是對兩個已經(jīng)存在的區(qū)域進(jìn)行求交、裁剪、合并操作;圖4是靜態(tài)不規(guī)則窗體創(chuàng)建流程圖;圖5是本發(fā)明幕布拉伸情況列舉圖;圖6是本發(fā)明從屏幕四側(cè)控制幕布拉伸的流程圖7是本發(fā)明的左側(cè)幕布拉伸過程流程圖8是本發(fā)明按照圖6和圖7所述流程開發(fā)的用戶界面屏幕截圖;圖9是本發(fā)明在實際應(yīng)用中幕布拉伸的屏幕截圖IO是本發(fā)明在實際應(yīng)用過程中,用戶在已拉伸的幕布上繪制用戶筆跡的屏幕截圖。具體實施例方式在絕大多數(shù)的Windows應(yīng)用程序中,其窗體都是使用的正規(guī)正矩的矩形窗體,例如常用的"記事本"、"掃雷"等等。矩形窗體的開發(fā)具有編程實現(xiàn)簡單,風(fēng)格簡潔的優(yōu)點,所以在普通文檔應(yīng)用程序和簡單小游戲中使用足矣。但在某些程序中使用就略顯呆板,如果采用不規(guī)則窗體替代矩形窗體,將會使程序開發(fā)更為多樣化。典型的例子有windows自帶的MediaPlayer9.0,新版本的MediaPlayer有個控制面板的選項,選中這些面板,播放器就以選中的面板形狀出現(xiàn),這時的播放器比以前版本的MediaPlayer的古老矩形界面要生動有趣。所有的Windows窗體都位于一個稱為"region"的區(qū)域中,窗體的大小如果超出"region"的范圍,windows會自動裁剪掉超出"region"范圍的那部分窗體,使其不可見。所以,不規(guī)則窗體的創(chuàng)建主要分為以下兩個步驟第一步創(chuàng)建不規(guī)則"region"。第二步將窗體放到創(chuàng)建的"region"中。在實際程序開發(fā)中第二步只需調(diào)用一條語句即可實現(xiàn)。例如在軟件開發(fā)包SDK程序開發(fā)中可調(diào)用SDK的API函數(shù)SetWindowRgn,該函數(shù)原型如下intSetWindowRgn(H麗DhWnd,HRGNhRgn,BOOLbRedraw);注其中hWnd為待設(shè)置的窗體句柄,hRgn為已經(jīng)創(chuàng)建的"region"句柄,bRedraw代表是否要重繪窗體。而在MFC程序開發(fā)中,可調(diào)用微軟公司提供的類庫軟件開發(fā)包中的窗口類CWnd的成員函數(shù)SetWindowRgn(HRGNhRgn,BOOLbRedraw);該函數(shù)的功能及參數(shù)意義與SDK中同名的API函數(shù)相同。相對于第二步,第一步的實現(xiàn)要復(fù)雜許多,并且不規(guī)則窗體越復(fù)雜,創(chuàng)建其"region"的過程也越復(fù)雜。以下詳細(xì)說明"region"區(qū)域的概念及其創(chuàng)建。在MFC中"region"的對象,由CRgn類實現(xiàn)。CRgn類提供了以下各種初始化成員函數(shù)用于創(chuàng)建各種形狀的"region"區(qū)域,包括矩形、橢圓、多邊形等,如圖2所示。其函數(shù)原型如下BOOLCreateRectRgnlndirect(LPCRECTlpRect);〃創(chuàng)建矩形BOOLCreateEllipticRgnIndirect(LPCRECTlpRect);〃創(chuàng)建橢圓BOOLCreatePolyPolygonRgn(LPPOINTlpPoints,LPINTlpPolyCounts,intnCount,intnPolyFillMode);〃創(chuàng)建多邊形在本發(fā)明的實際開發(fā)中,用到最多的是利用矩形結(jié)構(gòu)或矩形對象創(chuàng)建區(qū)域。與此同時,MFC的CRgn類還提供相應(yīng)的成員函數(shù)允許開發(fā)者對所創(chuàng)建的任意兩個區(qū)域進(jìn)行裁剪、合并運算,以便創(chuàng)建形狀更為復(fù)雜的"region"—區(qū)域。該函數(shù)原型如下intCombineRgn(CRgn*pRgnl,CRgn*pRgn2,intnCombineMode);前兩個參數(shù)表示要進(jìn)行裁剪、合并的兩個己經(jīng)存在的區(qū)域。第三個參數(shù)nCombineMode表示要進(jìn)行的操作類型,其具體取值及含義參見下表,即開發(fā)者可以對區(qū)域l和區(qū)域2進(jìn)行不同的操作運算,如圖3所示。<table>tableseeoriginaldocumentpage9</column></row><table>另外,CRgn類的幾乎每個成員函數(shù)在SDK中都有同名的API函數(shù)與之相對應(yīng)。如圖4所示,靜態(tài)不規(guī)則窗體的創(chuàng)建可歸納為如下具體步驟來實現(xiàn)步驟(1)創(chuàng)建一個窗體對象。步驟(2)創(chuàng)建若干個region對象。步驟(3)根據(jù)需要對已創(chuàng)建的區(qū)域?qū)ο筮M(jìn)行裁剪、合并得到一個新的region對象。步驟(4)將創(chuàng)建的窗體放入新的region對象,得到不規(guī)則窗體。上述不規(guī)則窗體的創(chuàng)建是在給定條件下創(chuàng)建的,仍然屬于靜態(tài)創(chuàng)建,不能根據(jù)用戶操作隨時調(diào)整和改變窗體顯示的形狀,這也是本發(fā)明所要解決的問題所在之處。本發(fā)明在具體實施過程中所述幕布的拉伸過程,如圖5所示,分為如下兩種情況情況1:從屏幕窗口內(nèi)上下左右任意一側(cè)拉伸幕布,此時幕布的改變只是單一方向面積大小的改變。情況2:從屏幕窗口內(nèi)某一點出發(fā),以任意角度拉伸幕布,此時幕布可以從橫向、縱向兩個方向同時發(fā)生改變?,F(xiàn)以情況1從屏幕窗口內(nèi)上下左右任意一側(cè)拉伸幕布的具體開發(fā)過程為例,就其技術(shù)實現(xiàn)細(xì)節(jié)進(jìn)行具體說明,如圖6所示,分為如下步驟步驟(1)首先創(chuàng)建一個窗體對象。步驟(2)在窗體內(nèi)四周任意位置處,創(chuàng)建4個面積不為零的區(qū)域用于顯示"手柄",本實施例是在屏幕窗口邊框的上下、左右四處各創(chuàng)建一個面積不為零的矩形區(qū)域作為手柄的顯示區(qū)域;相應(yīng)地,為上述4個手柄各創(chuàng)建1個矩形用于顯示其對應(yīng)的"幕布"。步驟(3)創(chuàng)建用于顯示窗體的區(qū)域,對上述4個"手柄"區(qū)域求并,得到1個新的區(qū)域,該區(qū)域=手柄區(qū)域1U手柄區(qū)域2U...U手柄區(qū)域4。步驟(4)將創(chuàng)建的窗體對象置入上述"顯示"區(qū)域中并繪制窗口。步驟(5)利用窗口消息響應(yīng)函數(shù)捕獲用戶鼠標(biāo)點數(shù)據(jù)point,如果窗體上沒有顯示"幕布",即幕布面積為零時,直接進(jìn)入步驟(6);否則,跳轉(zhuǎn)至步驟(7)。步驟(6)當(dāng)用戶鼠標(biāo)在步驟(2)所述的任意一個"手柄"區(qū)域中點擊并拖動時,需要判定用戶鼠標(biāo)拖動的是哪一個"手柄",即判定其處于哪一個"手柄"矩形區(qū)域中,由于本實施例在窗口邊框各設(shè)置了一個"手柄",根據(jù)用戶拖動的"手柄"的情況采取以下四種措施處理第一種情況,如果鼠標(biāo)點在上側(cè)"手柄"矩形區(qū)域中點擊并拖動,捕捉并記錄用戶鼠標(biāo)點,根據(jù)鼠標(biāo)點縱向位移Ay的數(shù)據(jù),計算并改變后上側(cè)"手柄"矩形的位置及幕布的面積,并用面積(擴(kuò)大/縮小)發(fā)生改變的"幕布"矩形創(chuàng)建新的"顯示"區(qū)域,同時將窗體置入新的"顯示"區(qū)域中重繪窗體。第二種情況,如果鼠標(biāo)點在下側(cè)"手柄"矩形區(qū)域中點擊并拖動,捕捉并記錄用戶鼠標(biāo)點,根據(jù)鼠標(biāo)縱向位移Ay的數(shù)據(jù),計算并改變后下側(cè)"手柄"矩形的位置及幕布的面積,并用面積(擴(kuò)大/縮小)發(fā)生改變的"幕布"矩形創(chuàng)建新的"顯示"區(qū)域,同時將窗體置入新的"顯示"區(qū)域中重繪窗體。第三種情況,如果鼠標(biāo)點在右側(cè)"手柄"矩形區(qū)域中點擊并拖動,捕捉并記錄用戶鼠標(biāo)點,根據(jù)鼠標(biāo)橫向位移Ax的數(shù)據(jù),計算并改變后右側(cè)"手柄"矩形的位置及幕布的面積,并用面積(擴(kuò)大/縮小)發(fā)生改變的"幕布"矩形創(chuàng)建新的"顯示"區(qū)域,同時將窗體置入新的"顯示"區(qū)域中重繪窗體。第四種情況,如果鼠標(biāo)點在左側(cè)"手柄"矩形區(qū)域中點擊并拖動,捕捉并記錄用戶鼠標(biāo)點,根據(jù)鼠標(biāo)橫向位移Ax的數(shù)據(jù),計算并改變后左側(cè)"手柄"矩形的位置及幕布的面積,并用面積(擴(kuò)大/縮小)發(fā)生改變的"幕布"矩形創(chuàng)建新的"顯示"區(qū)域,同時將窗體置入新的"顯示"區(qū)域中重繪窗體。步驟(7)窗體上己經(jīng)顯示"幕布"的情況下,當(dāng)用戶鼠標(biāo)在"幕布"對應(yīng)的"手柄"矩形區(qū)域中拖動時,用戶可繼續(xù)拉伸"幕布";當(dāng)用戶鼠標(biāo)在"幕布"中"手柄"以外的區(qū)域中拖動時,系統(tǒng)可根據(jù)鼠標(biāo)移動軌跡繪制用戶筆跡。除了前面提到的"區(qū)域"對象以外,本發(fā)明在實現(xiàn)過程中還用到了"點"和"矩形"的對象。現(xiàn)簡略介紹如下在本實施例中,矩形類用CRect來表示,其擁有四個成員變量top、left、bottom以及right,分別代表左上角和右下角的坐標(biāo)。點類用CPoint來表示,其成員變量分別是x和y,如圖6中所示的CPoint類結(jié)構(gòu)。由于本發(fā)明在具體實施過程中可以從窗體的上下、左右4個方向拉伸出"幕布",現(xiàn)就左側(cè)"幕布"的拉伸過程進(jìn)行具體介紹,如圖7所示,具體步驟如下步驟(1)用戶鼠標(biāo)在左側(cè)"手柄"區(qū)域中按下時,通過窗口消息響應(yīng)函數(shù)OnLButtonDown(UINTnFlags,CPointpoint)捕捉鼠標(biāo)點point的數(shù)據(jù),并記錄為Prejt。步驟(2)當(dāng)用戶鼠標(biāo)繼續(xù)向右拖動時,通過窗口消息響應(yīng)函數(shù)OnMouseMove(UINTnFlags,CPointpoint)捕捉當(dāng)前鼠標(biāo)點point的數(shù)據(jù),并記錄為Cur_pt。步驟(3)計算鼠標(biāo)移動后的橫坐標(biāo)之差A(yù)x:Prejt.x-Curjt.x,如果Ax不為零,直接進(jìn)入步驟(4);否則返回步驟(2)。步驟(4)由于左側(cè)"幕布"在拉伸過程中,實際上是"幕布"矩形的右坐標(biāo)發(fā)生橫向改變,因此只需用左側(cè)"幕布"的右坐標(biāo)加上Ax,即可得到一個新的"幕布"矩形;另外,由于鼠標(biāo)在向右拖動的過程中,左側(cè)"手柄"也會隨著鼠標(biāo)發(fā)生橫向位移,因此同樣可以根據(jù)Ax計算出左側(cè)"手柄"的新位置。步驟(5)根據(jù)新的左側(cè)"幕布"矩形重新創(chuàng)建窗體的"顯示"區(qū)域。步驟(6)將窗體置入上述"顯示"區(qū)域中,重新繪制窗體。步驟(7)當(dāng)用戶鼠標(biāo)停止移動并抬起時,停止拉伸"幕布";否則,跳轉(zhuǎn)至步驟(2)。綜上所述,步驟(3)中"Ax"的計算是橫向拉伸"幕布"的關(guān)鍵所在。以此類推,縱向拉伸"幕布"的關(guān)鍵在于計算縱向坐標(biāo)之差A(yù)y=Pre_pt.y-Curjt.y,此處省略具體計算過程。采用上述步驟開發(fā)出來的用戶界面如圖8所示本發(fā)明的屏幕截圖,該用戶界面覆蓋在Powerpoint應(yīng)用程序窗口上。圖中顯示文字為Powerpoint幻燈片上的內(nèi)容,窗口邊框上的四個按鈕是本發(fā)明為使用者提供的用于拖拽"幕布"的四個"手柄",該圖顯示了初始狀態(tài)下,"幕布"未拉伸出狀態(tài)的用戶界面。如圖9所示,使用者可通過拖拽"手柄",從上下、左右四個不同的方向拉伸出"幕布"。實際使用過程中,如圖IO所示,使用者還可以在已經(jīng)拉伸的"幕布"上書寫"筆跡"以便對演示內(nèi)容進(jìn)行細(xì)化和分析。權(quán)利要求1.一種實現(xiàn)可拉伸涂寫的電子幕布的方法,包括(1)創(chuàng)建一個窗體對象;(2)在窗體內(nèi)任意位置處,至少創(chuàng)建一個面積不為零的區(qū)域用于顯示手柄,同時至少創(chuàng)建一個與手柄相對應(yīng)的矩形幕布;(3)創(chuàng)建用于窗體顯示的區(qū)域;(4)將窗體置入上述顯示區(qū)域中并繪制窗口;(5)當(dāng)鼠標(biāo)移至任一手柄區(qū)域內(nèi)點擊并拖動時,根據(jù)當(dāng)前鼠標(biāo)點的位移,動態(tài)改變手柄的位置及其對應(yīng)幕布矩形的面積大小,同時用面積發(fā)生改變的幕布矩形創(chuàng)建新的顯示區(qū)域,并將窗體置入新的顯示區(qū)域中重新繪制窗口。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述鼠標(biāo)移至任一手柄區(qū)域內(nèi)點擊并拖動包括從屏幕窗口內(nèi)某一點出發(fā),橫向單一方向的拖動。3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述鼠標(biāo)移至任一手柄區(qū)域內(nèi)點擊并拖動包括從屏幕窗口內(nèi)某一點出發(fā),縱向單一方向的拖動。4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述鼠標(biāo)移至任一手柄區(qū)域內(nèi)點擊并拖動包括從屏幕窗口內(nèi)某一點出發(fā),以任意角度拖動。5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)當(dāng)前鼠標(biāo)點的位移動態(tài)改變手柄的位置及其對應(yīng)幕布矩形的面積大小包括捕捉鼠標(biāo)點按下時的數(shù)據(jù)Pre_pt;捕捉鼠標(biāo)點移動時的當(dāng)前鼠標(biāo)點的數(shù)據(jù)Cur_pt;計算鼠標(biāo)移動后與鼠標(biāo)按下時的坐標(biāo)之差。6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)當(dāng)前鼠標(biāo)點的位移動態(tài)改變手柄的位置及其對應(yīng)幕布矩形的面積大小包括捕捉鼠標(biāo)點按下時的數(shù)據(jù)Pre_pt;捕捉鼠標(biāo)點抬起時的當(dāng)前鼠標(biāo)點的數(shù)據(jù)Cur_pt;計算鼠標(biāo)抬起后與鼠標(biāo)按下時的坐標(biāo)之差。7.根據(jù)權(quán)利要求2所述的方法,其特征在于,橫向拖動手柄,所述坐標(biāo)之差的計算為鼠標(biāo)點移動后的橫坐標(biāo)之差A(yù)x:△x——Pre_pt.x-Cur_pt.x。8.根據(jù)權(quán)利要求3所述的方法,其特征在于,縱向拖動手柄,所述坐標(biāo)之差為鼠標(biāo)點移動后的縱向坐標(biāo)之差A(yù)y:△y=Pre_pt.y-Cur_pt.y。9.根據(jù)權(quán)利要求4所述的方法,其特征在于,以任意角度拖動手柄,所述坐標(biāo)之差包括鼠標(biāo)點移動后的橫向和縱向兩個坐標(biāo)之差△x=Pre_pt.x-Cur_pt.x;△y=Pre_pt.y-Cur_pt.y。10.根據(jù)權(quán)利要求1所述的方法,其特征在于,當(dāng)用戶鼠標(biāo)在幕布中手柄以外的區(qū)域中拖動時,系統(tǒng)可根據(jù)鼠標(biāo)移動軌跡繪制用戶筆跡。11.根據(jù)權(quán)利要求l所述的方法,其特征在于,所述手柄為四個。全文摘要實現(xiàn)可拉伸涂寫的電子幕布的方法屬于電子信息
技術(shù)領(lǐng)域:
。包括創(chuàng)建一個窗體對象;在窗體內(nèi)任意位置處,至少創(chuàng)建一個面積不為零的區(qū)域用于顯示手柄,同時至少創(chuàng)建一個與手柄相對應(yīng)的矩形幕布;創(chuàng)建用于窗體顯示的區(qū)域;將窗體置入上述顯示區(qū)域中并繪制窗口;當(dāng)鼠標(biāo)移至任一手柄區(qū)域內(nèi)點擊并拖動時,根據(jù)當(dāng)前鼠標(biāo)點的位移,動態(tài)改變手柄的位置及其對應(yīng)幕布矩形的面積大小,同時用面積發(fā)生改變的幕布矩形創(chuàng)建新的顯示區(qū)域,并將窗體置入新的顯示區(qū)域中重新繪制窗口。在本發(fā)明的功能開啟后,使用者根據(jù)需要選擇是否遮蓋演示內(nèi)容,在需要使用幕布遮蓋部分或全部演示內(nèi)容時,拖拽任意一個手柄,即可從某一方向或某一角度拉伸出幕布用以遮蓋無需演示的內(nèi)容。文檔編號G06F9/44GK101387954SQ20071012153公開日2009年3月18日申請日期2007年9月10日優(yōu)先權(quán)日2007年9月10日發(fā)明者鄭士奇申請人:漢王科技股份有限公司