实现可拉伸涂写的电子幕布的方法

文档序号:6610277阅读:185来源:国知局

专利名称::实现可拉伸涂写的电子幕布的方法
技术领域
:本发明属于电子信息
技术领域
,涉及计算机应用软件的界面设计,尤其涉及一种能够从屏幕窗口内任意位置拉伸出幕布的用户界面。
背景技术
:传统的办公会议和教学环境设备中,最具权威的莫过于办公室白板和教学黑板了,且一直被认为是办公和教学不可缺少的设备。随着信息技术的发展、市场的需要以及成本的降低,电子白板开始走入办公室和课堂,传统的黑板和白板开始被电子化设备逐步取代。电子白板不仅健康和卫生,而且使得办公人员和教师在会议和课堂中的活动更具启发和互动性。电子白板是一种汇集了尖端电子技术、软件技术等多种高科技手段研发的高新技术产品,它通过应用电磁感应原理,结合计算机和投影机,可以实现无纸化办公及教学。随着电子白板技术的推广,与之相配套的应用软件也发展起来。目前,市面上己有的电子白板软件均可以让用户通过手写板书笔等工具在计算机电子文档上进行书写和自由批注,同时借助投影仪等信息化设备进行演示及教学活动;使用者在批注与解说的同时,电子白板软件还提供一些辅助功能,比如插入图片、flash动画等资源加强解说效果;利用放大镜、聚光灯、幕布等功能来突出重点内容,从而改善师生相互交流的效果。这些辅助工具中,"幕布"功能主要用于遮挡屏幕的部分显示区域。目前市面上看到的"幕布"工具,通常是一开始就遮挡住整个屏幕中的显示内容,用户需要手动调节和改变"幕布"面积的大小,才能看到下一层窗口中的显示内容。例如,加拿大SMARTBoard互动电子白板软件在启用"幕布"功能时,就是直接弹出一个全屏"幕布"遮盖住整个演示内容,用户需要通过输入设备(鼠标、手写板等)手动调节"幕布"面积的大小,从而调整其遮盖区域面积的大小,而且使用者只能在未遮盖区域书写和涂抹,其界面及"幕布"的拉伸方式如图l所示。由此可见,这种"幕布"工具虽然起到了遮挡演示内容的效果,但功能单一,不容易操作。使用者往往一开始只需要遮挡部分演示内容,尤其需要对演示内容进行推演和详细阐述时,往往不希望在演示文档上勾画和书写过多的"笔迹"影响演示文件的放映效果,这就需要界面能够在不影响文件放映效果的同时,还能够随时提供额外的区域供用户书写推演并能够随时清除的窗口区域。因此,一种操作方便、既可根据用户需要遮挡演示内容,又可以作为书写涂抹区域的"幕布"工具的设计与开发成为急需解决的问题。
发明内容本发明的目的是提供一种实现可拉伸涂写的电子幕布的方法。为实现上述目的,采取以下方法(1)创建一个窗体对象;(2)在窗体内任意位置处,至少创建一个面积不为零的区域用于显示手柄,同时创建一个与手柄相对应的矩形幕布;(3)创建用于窗体显示的区域;(4)将窗体置入上述显示区域中并绘制窗口;(5)当鼠标在窗口中任一手柄内点击并拖动时,根据当前鼠标点的位移动态改变手柄的位置及其对应幕布矩形的面积大小,同时利用面积发生改变的幕布创建新的显示区域,并将窗体置入该区域中重新绘制窗□。本发明的有益效果是,利用本发明所提供方法开发出的电子幕布,使用者在开启幕布工具后,幕布并不马上遮盖演示内容,使用者只有在需要使用"幕布"遮盖部分或全部演示内容时,点击并拖拽窗口内任一手柄控件,即可从某一方向或某一角度拉伸出幕布用以遮盖所需内容;除此之外,拉伸出的幕布还可以随鼠标的移动轨迹绘制出用户笔迹。图1是加拿大SMARTBoard的幕布界面及拉伸过程;图2是利用CRgn类的成员函数创建各种形状的区域;图3是对两个已经存在的区域进行求交、裁剪、合并操作;图4是静态不规则窗体创建流程图;图5是本发明幕布拉伸情况列举图;图6是本发明从屏幕四侧控制幕布拉伸的流程图7是本发明的左侧幕布拉伸过程流程图8是本发明按照图6和图7所述流程开发的用户界面屏幕截图;图9是本发明在实际应用中幕布拉伸的屏幕截图IO是本发明在实际应用过程中,用户在已拉伸的幕布上绘制用户笔迹的屏幕截图。具体实施例方式在绝大多数的Windows应用程序中,其窗体都是使用的正规正矩的矩形窗体,例如常用的"记事本"、"扫雷"等等。矩形窗体的开发具有编程实现简单,风格简洁的优点,所以在普通文档应用程序和简单小游戏中使用足矣。但在某些程序中使用就略显呆板,如果采用不规则窗体替代矩形窗体,将会使程序开发更为多样化。典型的例子有windows自带的MediaPlayer9.0,新版本的MediaPlayer有个控制面板的选项,选中这些面板,播放器就以选中的面板形状出现,这时的播放器比以前版本的MediaPlayer的古老矩形界面要生动有趣。所有的Windows窗体都位于一个称为"region"的区域中,窗体的大小如果超出"region"的范围,windows会自动裁剪掉超出"region"范围的那部分窗体,使其不可见。所以,不规则窗体的创建主要分为以下两个步骤第一步创建不规则"region"。第二步将窗体放到创建的"region"中。在实际程序开发中第二步只需调用一条语句即可实现。例如在软件开发包SDK程序开发中可调用SDK的API函数SetWindowRgn,该函数原型如下intSetWindowRgn(H丽DhWnd,HRGNhRgn,BOOLbRedraw);注其中hWnd为待设置的窗体句柄,hRgn为已经创建的"region"句柄,bRedraw代表是否要重绘窗体。而在MFC程序开发中,可调用微软公司提供的类库软件开发包中的窗口类CWnd的成员函数SetWindowRgn(HRGNhRgn,BOOLbRedraw);该函数的功能及参数意义与SDK中同名的API函数相同。相对于第二步,第一步的实现要复杂许多,并且不规则窗体越复杂,创建其"region"的过程也越复杂。以下详细说明"region"区域的概念及其创建。在MFC中"region"的对象,由CRgn类实现。CRgn类提供了以下各种初始化成员函数用于创建各种形状的"region"区域,包括矩形、椭圆、多边形等,如图2所示。其函数原型如下BOOLCreateRectRgnlndirect(LPCRECTlpRect);〃创建矩形BOOLCreateEllipticRgnIndirect(LPCRECTlpRect);〃创建椭圆BOOLCreatePolyPolygonRgn(LPPOINTlpPoints,LPINTlpPolyCounts,intnCount,intnPolyFillMode);〃创建多边形在本发明的实际开发中,用到最多的是利用矩形结构或矩形对象创建区域。与此同时,MFC的CRgn类还提供相应的成员函数允许开发者对所创建的任意两个区域进行裁剪、合并运算,以便创建形状更为复杂的"region"—区域。该函数原型如下intCombineRgn(CRgn*pRgnl,CRgn*pRgn2,intnCombineMode);前两个参数表示要进行裁剪、合并的两个己经存在的区域。第三个参数nCombineMode表示要进行的操作类型,其具体取值及含义参见下表,即开发者可以对区域l和区域2进行不同的操作运算,如图3所示。<table>tableseeoriginaldocumentpage9</column></row><table>另外,CRgn类的几乎每个成员函数在SDK中都有同名的API函数与之相对应。如图4所示,静态不规则窗体的创建可归纳为如下具体步骤来实现步骤(1)创建一个窗体对象。步骤(2)创建若干个region对象。步骤(3)根据需要对已创建的区域对象进行裁剪、合并得到一个新的region对象。步骤(4)将创建的窗体放入新的region对象,得到不规则窗体。上述不规则窗体的创建是在给定条件下创建的,仍然属于静态创建,不能根据用户操作随时调整和改变窗体显示的形状,这也是本发明所要解决的问题所在之处。本发明在具体实施过程中所述幕布的拉伸过程,如图5所示,分为如下两种情况情况1:从屏幕窗口内上下左右任意一侧拉伸幕布,此时幕布的改变只是单一方向面积大小的改变。情况2:从屏幕窗口内某一点出发,以任意角度拉伸幕布,此时幕布可以从横向、纵向两个方向同时发生改变。现以情况1从屏幕窗口内上下左右任意一侧拉伸幕布的具体开发过程为例,就其技术实现细节进行具体说明,如图6所示,分为如下步骤步骤(1)首先创建一个窗体对象。步骤(2)在窗体内四周任意位置处,创建4个面积不为零的区域用于显示"手柄",本实施例是在屏幕窗口边框的上下、左右四处各创建一个面积不为零的矩形区域作为手柄的显示区域;相应地,为上述4个手柄各创建1个矩形用于显示其对应的"幕布"。步骤(3)创建用于显示窗体的区域,对上述4个"手柄"区域求并,得到1个新的区域,该区域=手柄区域1U手柄区域2U...U手柄区域4。步骤(4)将创建的窗体对象置入上述"显示"区域中并绘制窗口。步骤(5)利用窗口消息响应函数捕获用户鼠标点数据point,如果窗体上没有显示"幕布",即幕布面积为零时,直接进入步骤(6);否则,跳转至步骤(7)。步骤(6)当用户鼠标在步骤(2)所述的任意一个"手柄"区域中点击并拖动时,需要判定用户鼠标拖动的是哪一个"手柄",即判定其处于哪一个"手柄"矩形区域中,由于本实施例在窗口边框各设置了一个"手柄",根据用户拖动的"手柄"的情况采取以下四种措施处理第一种情况,如果鼠标点在上侧"手柄"矩形区域中点击并拖动,捕捉并记录用户鼠标点,根据鼠标点纵向位移Ay的数据,计算并改变后上侧"手柄"矩形的位置及幕布的面积,并用面积(扩大/缩小)发生改变的"幕布"矩形创建新的"显示"区域,同时将窗体置入新的"显示"区域中重绘窗体。第二种情况,如果鼠标点在下侧"手柄"矩形区域中点击并拖动,捕捉并记录用户鼠标点,根据鼠标纵向位移Ay的数据,计算并改变后下侧"手柄"矩形的位置及幕布的面积,并用面积(扩大/縮小)发生改变的"幕布"矩形创建新的"显示"区域,同时将窗体置入新的"显示"区域中重绘窗体。第三种情况,如果鼠标点在右侧"手柄"矩形区域中点击并拖动,捕捉并记录用户鼠标点,根据鼠标横向位移Ax的数据,计算并改变后右侧"手柄"矩形的位置及幕布的面积,并用面积(扩大/縮小)发生改变的"幕布"矩形创建新的"显示"区域,同时将窗体置入新的"显示"区域中重绘窗体。第四种情况,如果鼠标点在左侧"手柄"矩形区域中点击并拖动,捕捉并记录用户鼠标点,根据鼠标横向位移Ax的数据,计算并改变后左侧"手柄"矩形的位置及幕布的面积,并用面积(扩大/縮小)发生改变的"幕布"矩形创建新的"显示"区域,同时将窗体置入新的"显示"区域中重绘窗体。步骤(7)窗体上己经显示"幕布"的情况下,当用户鼠标在"幕布"对应的"手柄"矩形区域中拖动时,用户可继续拉伸"幕布";当用户鼠标在"幕布"中"手柄"以外的区域中拖动时,系统可根据鼠标移动轨迹绘制用户笔迹。除了前面提到的"区域"对象以外,本发明在实现过程中还用到了"点"和"矩形"的对象。现简略介绍如下在本实施例中,矩形类用CRect来表示,其拥有四个成员变量top、left、bottom以及right,分别代表左上角和右下角的坐标。点类用CPoint来表示,其成员变量分别是x和y,如图6中所示的CPoint类结构。由于本发明在具体实施过程中可以从窗体的上下、左右4个方向拉伸出"幕布",现就左侧"幕布"的拉伸过程进行具体介绍,如图7所示,具体步骤如下步骤(1)用户鼠标在左侧"手柄"区域中按下时,通过窗口消息响应函数OnLButtonDown(UINTnFlags,CPointpoint)捕捉鼠标点point的数据,并记录为Prejt。步骤(2)当用户鼠标继续向右拖动时,通过窗口消息响应函数OnMouseMove(UINTnFlags,CPointpoint)捕捉当前鼠标点point的数据,并记录为Cur_pt。步骤(3)计算鼠标移动后的横坐标之差Ax:Prejt.x-Curjt.x,如果Ax不为零,直接进入步骤(4);否则返回步骤(2)。步骤(4)由于左侧"幕布"在拉伸过程中,实际上是"幕布"矩形的右坐标发生横向改变,因此只需用左侧"幕布"的右坐标加上Ax,即可得到一个新的"幕布"矩形;另外,由于鼠标在向右拖动的过程中,左侧"手柄"也会随着鼠标发生横向位移,因此同样可以根据Ax计算出左侧"手柄"的新位置。步骤(5)根据新的左侧"幕布"矩形重新创建窗体的"显示"区域。步骤(6)将窗体置入上述"显示"区域中,重新绘制窗体。步骤(7)当用户鼠标停止移动并抬起时,停止拉伸"幕布";否则,跳转至步骤(2)。综上所述,步骤(3)中"Ax"的计算是横向拉伸"幕布"的关键所在。以此类推,纵向拉伸"幕布"的关键在于计算纵向坐标之差Ay=Pre_pt.y-Curjt.y,此处省略具体计算过程。采用上述步骤开发出来的用户界面如图8所示本发明的屏幕截图,该用户界面覆盖在Powerpoint应用程序窗口上。图中显示文字为Powerpoint幻灯片上的内容,窗口边框上的四个按钮是本发明为使用者提供的用于拖拽"幕布"的四个"手柄",该图显示了初始状态下,"幕布"未拉伸出状态的用户界面。如图9所示,使用者可通过拖拽"手柄",从上下、左右四个不同的方向拉伸出"幕布"。实际使用过程中,如图IO所示,使用者还可以在已经拉伸的"幕布"上书写"笔迹"以便对演示内容进行细化和分析。权利要求1.一种实现可拉伸涂写的电子幕布的方法,包括(1)创建一个窗体对象;(2)在窗体内任意位置处,至少创建一个面积不为零的区域用于显示手柄,同时至少创建一个与手柄相对应的矩形幕布;(3)创建用于窗体显示的区域;(4)将窗体置入上述显示区域中并绘制窗口;(5)当鼠标移至任一手柄区域内点击并拖动时,根据当前鼠标点的位移,动态改变手柄的位置及其对应幕布矩形的面积大小,同时用面积发生改变的幕布矩形创建新的显示区域,并将窗体置入新的显示区域中重新绘制窗口。2.根据权利要求1所述的方法,其特征在于,所述鼠标移至任一手柄区域内点击并拖动包括从屏幕窗口内某一点出发,横向单一方向的拖动。3.根据权利要求1所述的方法,其特征在于,所述鼠标移至任一手柄区域内点击并拖动包括从屏幕窗口内某一点出发,纵向单一方向的拖动。4.根据权利要求1所述的方法,其特征在于,所述鼠标移至任一手柄区域内点击并拖动包括从屏幕窗口内某一点出发,以任意角度拖动。5.根据权利要求1所述的方法,其特征在于,所述根据当前鼠标点的位移动态改变手柄的位置及其对应幕布矩形的面积大小包括捕捉鼠标点按下时的数据Pre_pt;捕捉鼠标点移动时的当前鼠标点的数据Cur_pt;计算鼠标移动后与鼠标按下时的坐标之差。6.根据权利要求1所述的方法,其特征在于,所述根据当前鼠标点的位移动态改变手柄的位置及其对应幕布矩形的面积大小包括捕捉鼠标点按下时的数据Pre_pt;捕捉鼠标点抬起时的当前鼠标点的数据Cur_pt;计算鼠标抬起后与鼠标按下时的坐标之差。7.根据权利要求2所述的方法,其特征在于,横向拖动手柄,所述坐标之差的计算为鼠标点移动后的横坐标之差Ax:△x——Pre_pt.x-Cur_pt.x。8.根据权利要求3所述的方法,其特征在于,纵向拖动手柄,所述坐标之差为鼠标点移动后的纵向坐标之差Ay:△y=Pre_pt.y-Cur_pt.y。9.根据权利要求4所述的方法,其特征在于,以任意角度拖动手柄,所述坐标之差包括鼠标点移动后的横向和纵向两个坐标之差△x=Pre_pt.x-Cur_pt.x;△y=Pre_pt.y-Cur_pt.y。10.根据权利要求1所述的方法,其特征在于,当用户鼠标在幕布中手柄以外的区域中拖动时,系统可根据鼠标移动轨迹绘制用户笔迹。11.根据权利要求l所述的方法,其特征在于,所述手柄为四个。全文摘要实现可拉伸涂写的电子幕布的方法属于电子信息
技术领域
。包括创建一个窗体对象;在窗体内任意位置处,至少创建一个面积不为零的区域用于显示手柄,同时至少创建一个与手柄相对应的矩形幕布;创建用于窗体显示的区域;将窗体置入上述显示区域中并绘制窗口;当鼠标移至任一手柄区域内点击并拖动时,根据当前鼠标点的位移,动态改变手柄的位置及其对应幕布矩形的面积大小,同时用面积发生改变的幕布矩形创建新的显示区域,并将窗体置入新的显示区域中重新绘制窗口。在本发明的功能开启后,使用者根据需要选择是否遮盖演示内容,在需要使用幕布遮盖部分或全部演示内容时,拖拽任意一个手柄,即可从某一方向或某一角度拉伸出幕布用以遮盖无需演示的内容。文档编号G06F9/44GK101387954SQ20071012153公开日2009年3月18日申请日期2007年9月10日优先权日2007年9月10日发明者郑士奇申请人:汉王科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1