基于透明窗体的按钮跟随鼠标波浪式浮动的实现方法

文档序号:6579428阅读:100来源:国知局
专利名称:基于透明窗体的按钮跟随鼠标波浪式浮动的实现方法
基于透明窗体的按钮跟随鼠标波浪式浮动的实现方法
技术领域
本发明涉及应用软件的窗体,特别涉及基于透明窗体的按钮跟随鼠标波浪式浮动的实现方法。
背景技术
随着计算机的迅速发展,相关的绘图软件也应运而生。为方便用户操作,大多数绘图软件都会向用户提供工具条,工具条上设有多个用于修改功能参数的按钮。这些工具条可在画布上随意拖动,但由于老式工具条都是不透明的,在操作过程中,且会遮挡用户查看工具条后方画布上的内容,用户只能通过频繁拖动工具条,才能看清画布,因此使用过程很不方便。现在市场上还出现了一些可以使软件的窗体以任意形状显示的技术,但是这些窗体都存在着窗体边缘毛刺,窗体中工具条上的各按钮无法以任意形状显示的问题,且存在CPU占用率高等缺点。所述软件的窗体是指任意一种软件打开使用后,除可编辑的界面或画布以及工具条之外的框体,例如:画图软件打开后,包括:中间部分的画布、工具条以及环绕四周的框体。

发明内容本发明要解决的技术问题,在于提供一种基于透明窗体的按钮跟随鼠标波浪式浮动的实现方法,其实现保留软件编辑区可见但窗体透明的友好界面,且使窗体内各工具条上的按钮跟随鼠标波浪式浮动,窗体边缘无毛刺,工具条上的按钮可以是任意形状,CPU占用率低。本发明是这样实现的:基于透明窗体的按钮跟随鼠标波浪式浮动的实现方法,包括如下步骤:步骤10、通过创建内存模型,构建透明窗体;步骤20、通过Draw方法画图,生成按钮位图,将该按钮位图刷新到窗体,该按钮位图显示在窗体中;该按钮位图上画有复数个按钮,各按钮大小为初始化状态下大小,即各按钮大小未发生改变;用户根据需要自定义各按钮的大小形状;通过Draw方法绘制的按钮位图显示到窗体中,不会被透明,且不会出现毛刺现象;步骤30、当鼠标移至按钮位图上,计算并获得各按钮渐变轨迹,并将当前状态下各按钮画至缓冲位图;所述当前状态是指鼠标移至按钮位图上的状态;步骤40、将缓冲位图刷新至窗体,窗体中显示当前状态下渐变后的按钮,实现透明窗体中按钮跟随鼠标波浪式浮动。进一步地,所述步骤10具体为:步骤11、设置窗体风格:重载CreateParams方法,设置窗口风格为无标题、置顶、带边框的弹出窗口;

步骤12、设置内存模型:
首先,创建第一设备上下文,该第一设备上下文与显示器关联,存储显示器的基本信息,所述基本信息包括:显示器的宽、高、分辨率;当Windows系统得到第一设备上下文时,将根据第一设备上下文存储的显示器基本信息刷新屏幕;其次,创建由窗体画布定义的第二设备上下文,该第二设备上下文保存绘制的工具条。然后,设置内存参数:创建一 BLENDFUNCTION类型变量,所述BLENDFUNCTION类型为结构体,该结构体包含有混合处理指令BlendOp、混合标志BlendFlags、混合方式AlphaFormat、源位图透明度SourceConstantAlpha四个子参数,该四个自参数的值分别设置为AC_SRC_0VER,0,I和255 ;通过所述结构体将第一设备上下文和第二设备上下文按照所述子参数进行色彩混合处理,从而得到具有透明效果的图片;步骤13、使用Windows API的函数UpdateLayeredWindow将所述图片刷新至屏幕,从而构建出透明窗体。进一步地,所述步骤30具体为:步骤31、创建一张与所述按钮位图大小一样的缓冲位图,并设置每次参与渐变的按钮的个数η,η < N,N为总的按钮数量;步骤32、设按钮初始化状态下的尺寸值w。,相邻两按钮间的间距Wd,鼠标与任意一按钮中心之间的距离为Xi, I彡i彡N ;设按钮的缩放系数为Hii,且按钮缩放系数与鼠标与按钮中心之间的距离为Xi成正t匕,即mekXi+b,贝U缩放后的按钮尺寸Yi=HiiWtj= (kx^b) W0,η为偶数时:当鼠标与第i个按钮中心的距离Xi= ( 。+%)/2,则所述第i个按钮尺寸达到最大尺寸值ymax,定义ymax=2w。;当鼠标与第i个按钮中心的距离Xi=Di wjOi+DwJ/^,则所述第i个按钮尺寸达到最小尺寸值ymin,定义ymin = w0 ;通过计算得到缩放系数mi=kXi+b中斜率k和常量b,从而获得η为偶数时,参与渐变的各按钮在渐变后的尺寸;当鼠标与其中任意一按钮中心的距离Xi > [n w0+(n+l)wd]/2时,该按钮不参与渐变;将不参与渐变的按钮从按钮位图上直接复制到缓冲位图上相对应的位置,对于参与渐变的按钮,将其缩放后的按钮画至缓冲位图上相对应的位置,完成缓冲位图的绘制;η为奇数时:当鼠标与第i个按钮中心的距离Xi为0,则所述第i个按钮尺寸达到最大尺寸值ymax,定乂 Ymax 2W。;当鼠标与第i个按钮中心的距离Xi=[n W()+(n+l)Wd]/2,则所述第i个按钮尺寸达到最小尺寸值ymin,定义ymin = w0 ;通过计算得到缩放系数mi=kXi+b中斜率k和常量b,从而获得η为奇数时,参与渐变的各按钮在渐变后的尺寸;
当鼠标与其中任意一按钮中心的距离Xi > [n w0+(n+l)wd]/2时,该按钮不参与渐变;将不参与渐变的按钮从按钮位图上直接复制到缓冲位图上相对应的位置,对于参与渐变的按钮,将其缩放后的按钮画至缓冲位图上相对应的位置,完成缓冲位图的绘制。本发明具有如下优点:通过重新创建内存模型,构建透明窗体,且窗体边缘无毛刺,工具条上各按钮可以是任意形状,然后通过缩放系数m=kXi+b,获得参与渐变的按钮在渐变后的尺寸大小,将渐变后的按钮画至缓冲位图,将未参与渐变的按钮直接从按钮位图中复制过来,然后将绘制好的缓冲位图直接刷新至窗体,实现按钮跟随鼠标波浪式浮动,同时降低了 CPU的占用率。
具体实施方式基于透明窗体的按钮跟随鼠标波浪式浮动的实现方法,包括如下步骤:步骤10、通过创建内存模型,构建透明窗体;具体为:步骤11、设置窗体风格:重载CreateParams方法,设置窗口风格为无标题、置顶、带边框的弹出窗口;步骤12、设置内存模型:首先,创建第一设备上下文,该第一设备上下文与显示器关联,存储显示器的基本信息,所述基本信息包括:显示器的宽、高、分辨率;当Windows系统得到第一设备上下文时,将根据第一设备上下文存储的显示器基本信息刷新屏幕;其次,创建由窗体画布定义的第二设备上下文,该第二设备上下文保存绘制的工具条;这里解释一下设备上下文:所述设备上下文是一种包含有关某个设备(如显示器或打印机)的绘制属性信息的Windows数据结构。所有绘制调用都通过设备上下文对象进行,这些对象封装了用于绘制线条、形状和文本的Windows API。设备上下文允许在Windows中进行与设备无关的绘制。设备上下文可用于绘制到屏幕、打印机或者图元文件。然后,设置内存参数:创建一 BLENDFUNCTION类型变量,所述BLENDFUNCTION类型为结构体,该结构体包含有混合处理指令BlendOp、混合标志BlendFlags、混合方式AlphaFormat、源位图透明度SourceConstantAlpha四个子参数,该四个自参数的值分别设置为AC_SRC_0VER,0,I和255 ;通过所述结构体将第一设备上下文和第二设备上下文按照所述子参数进行色彩混合处理,从而得到具有透明效果的图片;这里说明一下BLENDFUNCTION类型的结构体原理:通过设定控制色彩混合处理的指令为AC_SRC_0VER,使源位图可以根据自身各像素透明值置于目标位图(两张图叠加)。当设定控制源位图和目标位图混合方式的指令为AC_SRC_ALPHA时,将对源位图和目标位图进行色彩混合,混合后的新色彩将刷新到目标位图。方法如下:Dst.Red=Src.Red+ (1-Src.Alpha) *Dst.RedDst.Green=Src.Green+ (1-Src.Alpha) *Dst.GreenDst.Blue=Src.Blue+ (1-Src.Alpha) *Dst.Blue
Dst.alpha=Src.Alpha+ (1-Src.Alpha) *Dst.Alpha
其中:Dst为目标位图。等式左边的Dst.Alpha为混合后目标位图各像素新透明度。等式右边的Dst.Alpha为混合前的目标位图各像素原透明度。Src为源位图。Src.Alpha为源位图各像素透明度值。SCA为源位图透明度,值为255。在本发明中,源位图为上文提到的第二设备上下文,目标位图是第一设备上下文。该结构体包含有控制色彩混合处理的指令(目前只有唯一一个值AC_SRC_0VER,即混合命令)、混合标志(值为O)、源位图透明度(值为255)、控制源位图和目标位图混合方式的指令(值为AC_SRC_ALPHA,该AC_SRC_ALPHA为window系统提供的宏,该宏值为1,作用是为位图设置有Alpha通道(即每像素都有alpha值)以使混合操作时颜色可以抵消,颜色抵消即两个颜色的透明度相减,得到新的透明度;步骤13、使用Windows API的函数UpdateLayeredWindow将所述图片刷新至屏幕,从而构建出透明窗体;步骤20、通过Draw方法画图,生成按钮位图,将该按钮位图刷新到窗体,该按钮位图显示在窗体中;该按钮位图上画有复数个按钮,各按钮大小为初始化状态下大小,即各按钮大小未发生改变;用户根据需要自定义各按钮的大小形状;通过Draw方法绘制的按钮位图显示到窗体中,不会被透明,且不会出现毛刺现象;步骤30、当鼠标移至按钮位图上,计算并获得各按钮渐变轨迹,并将当前状态下各按钮画至缓冲位图;所述当前状态是指鼠标移至按钮位图上的状态;所述按钮渐变轨迹的原理是:当鼠标与按钮中心距离较小时,按钮相对于正常值较大,当鼠标到达某一位置时,按钮大小到达最大值;当鼠标与按钮中心距离较大时,按钮大小介于正常值与最大值之间,当鼠标与按钮中心距离到达某一值时,按钮大小为正常值;鼠标继续远离该按钮时,按钮不再变化,并一直保持正常大小。所述步骤30具体包括如下步骤:步骤31、创建一张 与所述按钮位图大小一样的缓冲位图,并设置每次参与渐变的按钮的个数η,η < N,N为总的按钮数量;步骤32、设按钮初始化状态下的尺寸值w。,相邻两按钮间的间距wd,鼠标与任意一按钮中心之间的距离为Xi,I彡i彡N ;设按钮的缩放系数为Hii,且按钮缩放系数与鼠标与按钮中心之间的距离为Xi成正t:匕,即mekXi+b,贝U缩放后的按钮尺寸Yi=HiiWtj= (kx^b) W0,η为偶数时:当鼠标与第i个按钮中心的距离Xi= ( 。+%)/2,则所述第i个按钮尺寸达到最大尺寸值ymax,定义ymax=2w。;当鼠标与第i个按钮中心的距离Xi=[n W()+(n+l)Wd]/2,则所述第i个按钮尺寸达到最小尺寸值ymin,定义ymin=w。;通过计算得到缩放系数mekxi+b中斜率k和常量b,从而获得η为偶数时,参与渐变的各按钮在渐变后的尺寸yi ;具体为:将(Xi=(wQ+wd)/2,ymax=2w。)和([n w。+(n+1) wd]/2, ymin=w。)这两组极值带入方程式y= (kXfb) W。,即求斜率k和常量b,b=w0* (2n W0- (2n+l) *wd) / ((η-1) w0+n*wd)k=- (w0*2) / ((n-1) *w0+n*wd);当鼠标与其中任意一按钮中心的距离Xi > [n W0+(n+1)wd]/2时,该按钮不参与渐变;
将不参与渐变的按钮从按钮位图上直接复制到缓冲位图上相对应的位置,对于参与渐变的按钮,将其缩放后的按钮画至缓冲位图上相对应的位置,完成缓冲位图的绘制;η为奇数时:当鼠标与第i个按钮中心的距离Xi为0,则所述第i个按钮尺寸达到最大尺寸值ymax,定乂 Ymax 2W。;当鼠标与第i个按钮中心的距离Xi=[n w。+(n+1) wd]/2,则所述第i个按钮尺寸达到最小尺寸值ymin,定义ymin=w。;通过计算得到缩放系数mekxi+b中斜率k和常量b,从而获得η为奇数时,参与渐变的各按钮在渐变后的尺寸yi ;具体为:将(O,ymax=2w。)和(Xi=Qi wQ+(n+l)wd]/2, ymin=w。)这两组极值带入方程式y= (kXfb) W。,即求斜率k和常量b,b=2w。,k=_w。/(n*w。+(n+1) *wd);当鼠标与其中任意一按钮中心的距离Xi > [n W0+(n+1)wd]/2时,该按钮不参与渐变;将不参与渐变的按钮从按钮位图上直接复制到缓冲位图上相对应的位置,对于参与渐变的按钮,将其缩放后的按钮画至缓冲位图上相对应的位置,完成缓冲位图的绘制。步骤40、将缓冲位图刷新至窗体,窗体中显示当前状态下渐变后的按钮,实现透明窗体中按钮跟随鼠标波浪式浮动。本发明通过重新创建内存模型,构建透明窗体,且窗体边缘无毛刺,工具条上各按钮可以是任意形状,然后通过缩放系数m=kxi+b,获得参与渐变的按钮在渐变后的尺寸大小,将渐变后的按钮画至缓冲位图,将未参与渐变的按钮直接从按钮位图中复制过来,然后将绘制好的缓冲位图直接刷新至窗体,实现按钮跟随鼠标波浪式浮动,同时降低了 CPU的占用率。虽然以上描述了本发明的具体实施方式
,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
权利要求
1.关于透明窗体的按钮跟随鼠标波浪式浮动的实现方法,其特征在于:包括如下步骤: 步骤10、通过创建内存模型,构建透明窗体; 步骤20、通过Draw方法画图,生成按钮位图,将该按钮位图刷新到窗体,该按钮位图显示在窗体中;该按钮位图上画有复数个按钮,各按钮大小为初始化状态下大小,即各按钮大小未发生改变;用户根据需要自定义各按钮的大小形状; 步骤30、当鼠标移至按钮位图上,计算并获得各按钮渐变轨迹,并将当前状态下各按钮画至缓冲位图;所述当前状态是指鼠标移至按钮位图上的状态; 步骤40、将缓冲位图刷新至窗体,窗体中显示当前状态下渐变后的按钮,实现透明窗体中按钮跟随鼠标波浪式浮动。
2.根据权利要求1所述的基于透明窗体的按钮跟随鼠标波浪式浮动的实现方法,其特征在于:所述步骤10具体为: 步骤U、设置窗体风格:重载CreateParams方法,设置窗口风格为无标题、置顶、带边框的弹出窗口; 步骤12、设置内存模型: 首先,创建第一设备上下文,该第一设备上下文与显示器关联,存储显示器的基本信息,所述基本信息包括:显示器的宽、高、分辨率;当Windows系统得到第一设备上下文时,将根据第一设备上下文存储的显示器基本信息刷新屏幕; 其次,创建由窗体画布定 义的第二设备上下文,该第二设备上下文保存绘制的工具条。
然后,设置内存参数: 创建一 BLENDFUNCTION类型变量,所述BLENDFUNCTION类型为结构体,该结构体包含有混合处理指令BlendOp、混合标志BlendFlags、混合方式AlphaFormat、源位图透明度SourceConstantAlpha四个子参数,该四个自参数的值分别设置为AC_SRC_0VER,0,I和255 ;通过所述结构体将第一设备上下文和第二设备上下文按照所述子参数进行色彩混合处理,从而得到具有透明效果的图片; 步骤13、使用Windows API的函数UpdateLayeredWindow将所述图片刷新至屏幕,从而构建出透明窗体。
3.根据权利要求1所述的基于透明窗体的按钮跟随鼠标波浪式浮动的实现方法,其特征在于:所述步骤30具体为: 步骤31、创建一张与所述按钮位图大小一样的缓冲位图,并设置每次参与渐变的按钮的个数η,η彡N,N为总的按钮数量; 步骤32、设按钮初始化状态下的尺寸值w。,相邻两按钮间的间距wd,鼠标与任意一按钮中心之间的距离为Xi, I彡i彡N ; 设按钮的缩放系数为IV且按钮缩放系数与鼠标与按钮中心之间的距离为Xi成正比,即mfkXi+b,贝U缩放后的按钮尺寸Y=HiiWtj= (kx^b) W0,η为偶数时: 当鼠标与第i个按钮中心的距离Xi= ( 。+^)/2,则所述第i个按钮尺寸达到最大尺寸值 y_,定义 y_=2w。; 当鼠标与第i个按钮中心的距离Χ =[η wjOi+DwJ/^,则所述第i个按钮尺寸达到最小尺寸值y—,定义y— = w0 ; 通过计算得到缩放系数mi=kXi+b中斜率k和常量b, 从而获得η为偶数时,参与渐变的各按钮在渐变后的尺寸Ii ; 当鼠标与其中任意一按钮中心的距离Xi > [n w0+ (n+l)wd]/2时,该按钮不参与渐变;将不参与渐变的按钮从按钮位图上直接复制到缓冲位图上相对应的位置,对于参与渐变的按钮,将其缩放后的按钮画至缓冲位图上相对应的位置,完成缓冲位图的绘制;η为奇数时: 当鼠标与第i个按钮中心的距离Xi为O,则所述第i个按钮尺寸达到最大尺寸值ymax,定义 ymax=2w。; 当鼠标与第i个按钮中心的距离Xi=Di wjOi+DwJ/^,则所述第i个按钮尺寸达到最小尺寸值y—,定义y— = w0 ; 通过计算得到缩放系数mi=kXi+b中斜率k和常量b, 从而获得η为奇数时,参与渐变的各按钮在渐变后的尺寸Ii ; 当鼠标与其中任意一按钮中心的距离Xi > [n w0+ (n+l)wd]/2时,该按钮不参与渐变;将不参与渐变的按钮从按钮位图上直接复制到缓冲位图上相对应的位置,对于参与渐变的按钮,将其缩放后的 按钮画至缓冲位图上相对应的位置,完成缓冲位图的绘制。
全文摘要
本发明提供一种基于透明窗体的按钮跟随鼠标波浪式浮动的实现方法,包括步骤10、通过创建内存模型,构建透明窗体;步骤20、通过Draw方法画图,生成按钮位图,将该按钮位图刷新到窗体,该按钮位图显示在窗体中;步骤30、当鼠标移至按钮位图上,计算并获得各按钮渐变轨迹,并将当前状态下各按钮画至缓冲位图;步骤40、将缓冲位图刷新至窗体,窗体中显示当前状态下渐变后的按钮,实现透明窗体中按钮跟随鼠标波浪式浮动。本发明通过重新创建内存模型,构建透明窗体,且窗体边缘无毛刺,工具条上各按钮可以是任意形状,然后通过缩放系数m=kxi+b,获得参与渐变的按钮在渐变后的尺寸大小,实现按钮渐变,且降低了CPU的占用率。
文档编号G06F3/0481GK103092463SQ201210578768
公开日2013年5月8日 申请日期2012年12月27日 优先权日2012年12月27日
发明者丁万年, 贺小阳, 陈日良 申请人:锐达互动科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1