本发明专利技术提供一种实现窗口大小位置自动调整的方法,该方法通过子类化的方式设置子控件调整规则,相对调用者透明的调整窗口子控件的大小和位置,设置完成后不需要用户继续干预,自动的进行调整;本发明专利技术高效准确,所有的控件统一的进行处理调整,不在需要分别的进行处理;兼容性好,通过底层API实现,支持纯粹SDK开发的视图界面程序,支持MFC、WTL等框架开发的视图界面程序。
【技术实现步骤摘要】
一种实现窗口大小位置自动调整的方法
本专利技术涉及一种实现窗口大小位置自动调整的方法,属于计算机
技术介绍
Windows平台基于窗口界面的开发往往需要支持调整窗口的大小,主窗口大小改变后往往需要调整附着其上控件的位置或者是大小以适配主窗口的调整。不同的窗口进行不同的调整,比如按钮控件。通常只需要调整根据父窗口的改变调整按钮的位置,而编辑框控件通常的做法是在主窗口的WM_SIZE消息中和WM_SIZING消息中通过调整子控件的大小和位置来对主窗口的调整进行适配(调整位置或者大小),工作流程如附图1所示。上述方案虽然能够实现我们想要的在父窗口大小变化后调整附着其上控件的位置和大小,但是每次需要调整的时候都需要做这样的处理,非常繁琐并且容易出现问题。如附图2所示对话框,在主窗口调整大小后,编辑框1位置和高度不变,需要调整宽度;编辑框2位置不变,需要调整宽度和高度;编辑框3位置、宽度、高度都需要调整。然后三个下面三个按钮大小不变,需要调整位置。类似这样的窗口如果都是按照上述方法处理步骤会非常的繁琐,并且容易出错。
技术实现思路
本专利技术要解决的技术问题是提供一种实现窗口大小位置自动调整的方法,通过子类化的方式设置子控件调整规则,相对调用者透明的调整窗口子控件的大小和位置,自动调整窗口大小位置,高效准确,不需要分别的进行处理。为了解决所述技术问题,本专利技术采用的技术方案是:一种实现窗口大小位置自动调整的方法,包括以下步骤:S01)、设置窗口调整规则,然后获取当前父窗口的尺寸、调整规则中子控件的尺寸,缓存到内存中;S02)、通过SetWindowLogPtr子类化目标窗口,截获目标窗口的WM_SIZE消息;S03)、子类化父窗口成功之后读取用户设置的规则列表,并将该窗体控件的设置参数加入全局缓存中,通过哈希表和父窗口的窗口句柄形成映射备用;S04)、在设置的窗口消息回调函数中处理WM_SIZE消息,收到该消息后,根据全局缓存中的子控件调整规则设置子控件的大小或者位置,设置完成之后通过InvalidateRect重绘窗口让调整立即生效,处理完成后从缓存中查找出该窗口子类化之前的窗口过程,继续调用该窗口过程让原来的窗口过程能够继续处理该消息;S05)、处理WM_DESTROY消息,进行内存中缓存数据的清理工作,将该窗口的缓存数据删掉。本专利技术所述实现窗口大小位置自动调整的方法,设置窗口调整规则的过程为:通过id或者窗口句柄识别一个窗口,通过四个浮点型数据描述子控件的调整幅度,四个浮点型数据为子控件在左上横坐标的调整系数、左上纵坐标的调整系数、宽度调整系数和高度调整系数。本专利技术所述实现窗口大小位置自动调整的方法,设置子控件在左上横坐标的调整系数为0.8,左上纵坐标的调整系数是0.6,宽度调整系数为0.7,高度调整系数为0.5。本专利技术所述实现窗口大小位置自动调整的方法,获取调整规则中子控件尺寸的步骤为:首先通过GetWindowRect接口获取控件的矩形大小,然后通过ScreenToClient接口将坐标通过相对屏幕的坐标转换为相对父窗口的坐标。本专利技术所述实现窗口大小位置自动调整的方法,步骤2在窗体初始化的时候进行。本专利技术所述实现窗口大小位置自动调整的方法,所述步骤1中设置多个窗口的多个子控件的窗口调整规则,通过步骤3对其进行统一的管理。本专利技术所述实现窗口大小位置自动调整的方法,步骤5中,在窗口关闭的时候向该窗体发送WM_DESTROY消息。本专利技术的有益效果:本专利技术通过子类化的方式设置子控件调整规则,相对调用者透明的调整窗口子控件的大小和位置,设置完成后不需要用户继续干预,自动的进行调整;本专利技术高效准确,所有的控件统一的进行处理调整,不在需要分别的进行处理;兼容性好,通过底层API实现,支持纯粹SDK开发的视图界面程序,支持MFC、WTL等框架开发的视图界面程序。附图说明图1为现有调整窗口大小位置的方法流程图;图2为调整窗口大小位置过程中某一对话框的示意图;图3为本专利技术所述实现窗口大小位置自动调整的方法的流程图。具体实施方式下面结合附图和具体实施例对本专利技术作进一步的说明。首先对本专利技术中出现的缩略语和关键术语进行解释。窗口消息:Windows图形界面是基于消息实现的,界面方面的功能大部分是通过处理Windows消息实现的。窗口过程:在通过Windows提供的SDK创建窗口的过程中需要注册一个窗口回调函数,通常在这个函数里处理各种各样的窗口消息,处理的过程即为功能实现的关键。窗口子类化:通过设置一个自己的窗口回调来接管指定窗口默认的窗口过程并接管该窗口的消息来扩展窗口的功能。如图3所示,为本专利技术所述实现窗口大小位置自动调整方法的流程图,本方法定义调整子控件位置和大小的规则,然后子类化控件的父窗口,通过自定义的窗口过程回调处理WM_SIZE消息,然后根据接口设置的规则统一的调整子控件的位置或者大小参数。具体为:S01)首先在对话框初始化的时候设置窗口调整规则,具体步骤如下:a)、定义窗口调整规则参数,我们是这样描述一个窗口调整规则的:通过id或者窗口句柄识别一个窗口,通过四个浮点型数据描述子控件的调整幅度,比如子控件在左上横坐标的调整系数是0.8,左上纵坐标的调整系数是0.6,子控件的宽度调整系数是0.7,子控件的高度调整系数是0.5。如果父窗口的宽度增加了200个像素,高度增加了100个像素,那么子控件的位置横坐标移动0.8*200=160像素,子控件位置纵坐标移动0.6*100=60像素,子控件的宽度调整为200*0.7=140像素,子控件的高度调整为100*0.5=50像素;b)、然后获取当前父窗口的尺寸缓存到内存中,主要用于计算父窗口尺寸改变的大小;然后记录规则中控件大小,首先通过GetWindowRect接口获取控件的矩形大小,然后通过ScreenToClient接口将坐标通过相对屏幕的坐标转换为相对父窗口的坐标,获取完成之后将数据缓存起来备用;S02)、通过SetWindowLogPtr子类化目标窗口,截获目标窗口的WM_SIZE消息,这个过程通常是在窗体初始化的时候进行,比如在对话框的WM_INITDIALOG消息中或者是普通窗口的WM_CREATE消息中;S03)、子类化父窗口过程成功之后读取用户设置的规则列表,并将该窗体控件的设置参数加入全局缓存中,通过哈希表和父窗口的窗口句柄形成映射备用。当然,这里我们可能会设置多个窗口的多个多个子控件,通过这种方式对其进行统一的管理;S04)、在设置的窗口消息回调函数中处理WM_SIZE消息(窗口尺寸发生变化后,系统会自动给该窗口推送WM_SIZE消息,窗口大小改变的尺寸可以通过这个消息的两个参数获取到),收到该消息后,根据全局缓存中的我们缓存的子控件调整规则设置子控件的大小或者位置,设置完成之后通过InvalidateRect重绘窗口让调整立即生效,处理完成后从缓存中查找出该窗口子类化之前的窗口过程,继续调用该窗口过程让原来的窗口过程能够继续处理该消息;S05)、处理WM_DESTROY消息(通常在窗口关闭的时候系统会向该窗体发送这个消息),在这个消息中,进行内存中缓存数据的清理工作,将该窗口的缓存数据删掉。下面以一个具体实施例描述该方法,如图2所示的一个对本文档来自技高网...
【技术保护点】
一种实现窗口大小位置自动调整的方法,其特征在于:包括以下步骤:S01)、设置窗口调整规则,然后获取当前父窗口的尺寸、调整规则中子控件的尺寸,缓存到内存中;S02)、通过SetWindowLogPtr子类化目标窗口,截获目标窗口的WM_SIZE消息;S03)、子类化父窗口成功之后读取用户设置的规则列表,并将该窗体控件的设置参数加入全局缓存中,通过哈希表和父窗口的窗口句柄形成映射备用;S04)、在设置的窗口消息回调函数中处理WM_SIZE消息,收到该消息后,根据全局缓存中的子控件调整规则设置子控件的大小或者位置,设置完成之后通过InvalidateRect重绘窗口让调整立即生效,处理完成后从缓存中查找出该窗口子类化之前的窗口过程,继续调用该窗口过程让原来的窗口过程能够继续处理该消息;S05)、处理WM_DESTROY消息,进行内存中缓存数据的清理工作,将该窗口的缓存数据删掉。
【技术特征摘要】
1.一种实现窗口大小位置自动调整的方法,其特征在于:包括以下步骤:S01)、设置窗口调整规则,然后获取当前父窗口的尺寸、调整规则中子控件的尺寸,缓存到内存中;S02)、通过SetWindowLogPtr子类化目标窗口,截获目标窗口的WM_SIZE消息;S03)、子类化父窗口成功之后读取用户设置的规则列表,并将该窗体控件的设置参数加入全局缓存中,通过哈希表和父窗口的窗口句柄形成映射备用;S04)、在设置的窗口消息回调函数中处理WM_SIZE消息,收到该消息后,根据全局缓存中的子控件调整规则设置子控件的大小或者位置,设置完成之后通过InvalidateRect重绘窗口让调整立即生效,处理完成后从缓存中查找出该窗口子类化之前的窗口过程,继续调用该窗口过程让原来的窗口过程能够继续处理该消息;S05)、处理WM_DESTROY消息,进行内存中缓存数据的清理工作,将该窗口的缓存数据删掉。2.根据权利要求1所述的实现窗口大小位置自动调整的方法,其特征在于:设置窗口调整规则的过程为:通过id或者窗口句柄识别一个窗口,通过四个浮点型...
【专利技术属性】
技术研发人员:娄国栋,
申请(专利权)人:山东华软金盾软件股份有限公司,
类型:发明
国别省市:山东,37
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。