欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種實現(xiàn)窗口大小位置自動調整的方法與流程

文檔序號:12733040閱讀:2601來源:國知局
一種實現(xiàn)窗口大小位置自動調整的方法與流程

本發(fā)明涉及一種實現(xiàn)窗口大小位置自動調整的方法,屬于計算機技術領域。



背景技術:

Windows平臺基于窗口界面的開發(fā)往往需要支持調整窗口的大小,主窗口大小改變后往往需要調整附著其上控件的位置或者是大小以適配主窗口的調整。不同的窗口進行不同的調整,比如按鈕控件。通常只需要調整根據(jù)父窗口的改變調整按鈕的位置,而編輯框控件通常的做法是在主窗口的WM_SIZE消息中和WM_SIZING消息中通過調整子控件的大小和位置來對主窗口的調整進行適配(調整位置或者大小),工作流程如附圖1所示。上述方案雖然能夠實現(xiàn)我們想要的在父窗口大小變化后調整附著其上控件的位置和大小,但是每次需要調整的時候都需要做這樣的處理,非常繁瑣并且容易出現(xiàn)問題。如附圖2所示對話框,在主窗口調整大小后,編輯框1位置和高度不變,需要調整寬度;編輯框2位置不變,需要調整寬度和高度;編輯框3位置、寬度、高度都需要調整。然后三個下面三個按鈕大小不變,需要調整位置。類似這樣的窗口如果都是按照上述方法處理步驟會非常的繁瑣,并且容易出錯。



技術實現(xiàn)要素:

本發(fā)明要解決的技術問題是提供一種實現(xiàn)窗口大小位置自動調整的方法,通過子類化的方式設置子控件調整規(guī)則,相對調用者透明的調整窗口子控件的大小和位置,自動調整窗口大小位置,高效準確,不需要分別的進行處理。

為了解決所述技術問題,本發(fā)明采用的技術方案是:一種實現(xiàn)窗口大小位置自動調整的方法,包括以下步驟:S01)、設置窗口調整規(guī)則,然后獲取當前父窗口的尺寸、調整規(guī)則中子控件的尺寸,緩存到內存中;S02)、通過SetWindowLogPtr子類化目標窗口,截獲目標窗口的WM_SIZE消息;S03)、子類化父窗口成功之后讀取用戶設置的規(guī)則列表,并將該窗體控件的設置參數(shù)加入全局緩存中,通過哈希表和父窗口的窗口句柄形成映射備用;S04)、在設置的窗口消息回調函數(shù)中處理WM_SIZE消息,收到該消息后,根據(jù)全局緩存中的子控件調整規(guī)則設置子控件的大小或者位置,設置完成之后通過InvalidateRect重繪窗口讓調整立即生效,處理完成后從緩存中查找出該窗口子類化之前的窗口過程,繼續(xù)調用該窗口過程讓原來的窗口過程能夠繼續(xù)處理該消息;S05)、處理WM_DESTROY消息,進行內存中緩存數(shù)據(jù)的清理工作,將該窗口的緩存數(shù)據(jù)刪掉。

本發(fā)明所述實現(xiàn)窗口大小位置自動調整的方法,設置窗口調整規(guī)則的過程為:通過id或者窗口句柄識別一個窗口,通過四個浮點型數(shù)據(jù)描述子控件的調整幅度,四個浮點型數(shù)據(jù)為子控件在左上橫坐標的調整系數(shù)、左上縱坐標的調整系數(shù)、寬度調整系數(shù)和高度調整系數(shù)。

本發(fā)明所述實現(xiàn)窗口大小位置自動調整的方法,設置子控件在左上橫坐標的調整系數(shù)為0.8,左上縱坐標的調整系數(shù)是0.6,寬度調整系數(shù)為0.7,高度調整系數(shù)為0.5。

本發(fā)明所述實現(xiàn)窗口大小位置自動調整的方法,獲取調整規(guī)則中子控件尺寸的步驟為: 首先通過GetWindowRect接口獲取控件的矩形大小,然后通過ScreenToClient接口將坐標通過相對屏幕的坐標轉換為相對父窗口的坐標。

本發(fā)明所述實現(xiàn)窗口大小位置自動調整的方法,步驟2在窗體初始化的時候進行。

本發(fā)明所述實現(xiàn)窗口大小位置自動調整的方法,所述步驟1中設置多個窗口的多個子控件的窗口調整規(guī)則,通過步驟3對其進行統(tǒng)一的管理。

本發(fā)明所述實現(xiàn)窗口大小位置自動調整的方法,步驟5中,在窗口關閉的時候向該窗體發(fā)送WM_DESTROY消息。

本發(fā)明的有益效果:本發(fā)明通過子類化的方式設置子控件調整規(guī)則,相對調用者透明的調整窗口子控件的大小和位置,設置完成后不需要用戶繼續(xù)干預,自動的進行調整;本發(fā)明高效準確,所有的控件統(tǒng)一的進行處理調整,不在需要分別的進行處理;兼容性好,通過底層API實現(xiàn),支持純粹SDK開發(fā)的視圖界面程序,支持MFC、WTL等框架開發(fā)的視圖界面程序。

附圖說明

圖1為現(xiàn)有調整窗口大小位置的方法流程圖;

圖2為調整窗口大小位置過程中某一對話框的示意圖;

圖3為本發(fā)明所述實現(xiàn)窗口大小位置自動調整的方法的流程圖。

具體實施方式

下面結合附圖和具體實施例對本發(fā)明作進一步的說明。

首先對本發(fā)明中出現(xiàn)的縮略語和關鍵術語進行解釋。

窗口消息:Windows圖形界面是基于消息實現(xiàn)的,界面方面的功能大部分是通過處理Windows消息實現(xiàn)的。

窗口過程:在通過Windows提供的SDK創(chuàng)建窗口的過程中需要注冊一個窗口回調函數(shù),通常在這個函數(shù)里處理各種各樣的窗口消息,處理的過程即為功能實現(xiàn)的關鍵。

窗口子類化:通過設置一個自己的窗口回調來接管指定窗口默認的窗口過程并接管該窗口的消息來擴展窗口的功能。

如圖3所示,為本發(fā)明所述實現(xiàn)窗口大小位置自動調整方法的流程圖,本方法定義調整子控件位置和大小的規(guī)則,然后子類化控件的父窗口,通過自定義的窗口過程回調處理WM_SIZE消息,然后根據(jù)接口設置的規(guī)則統(tǒng)一的調整子控件的位置或者大小參數(shù)。具體為:

S01)首先在對話框初始化的時候設置窗口調整規(guī)則,具體步驟如下:

a)、定義窗口調整規(guī)則參數(shù),我們是這樣描述一個窗口調整規(guī)則的:通過id或者窗口句柄識別一個窗口,通過四個浮點型數(shù)據(jù)描述子控件的調整幅度,比如子控件在左上橫坐標的調整系數(shù)是0.8,左上縱坐標的調整系數(shù)是0.6,子控件的寬度調整系數(shù)是0.7,子控件的高度調整系數(shù)是0.5。如果父窗口的寬度增加了200個像素,高度增加了100個像素,那么子控件的位置橫坐標移動0.8 * 200 = 160像素,子控件位置縱坐標移動0.6 * 100 = 60像素,子控件的寬度調整為200 * 0.7 = 140像素, 子控件的高度調整為100 * 0.5 = 50像素;

b)、然后獲取當前父窗口的尺寸緩存到內存中,主要用于計算父窗口尺寸改變的大??;然后記錄規(guī)則中控件大小,首先通過GetWindowRect接口獲取控件的矩形大小,然后通過ScreenToClient接口將坐標通過相對屏幕的坐標轉換為相對父窗口的坐標,獲取完成之后將數(shù)據(jù)緩存起來備用;

S02)、通過SetWindowLogPtr子類化目標窗口,截獲目標窗口的WM_SIZE消息,這個過程通常是在窗體初始化的時候進行,比如在對話框的WM_INITDIALOG消息中或者是普通窗口的WM_CREATE消息中;

S03)、子類化父窗口過程成功之后讀取用戶設置的規(guī)則列表,并將該窗體控件的設置參數(shù)加入全局緩存中,通過哈希表和父窗口的窗口句柄形成映射備用。當然,這里我們可能會設置多個窗口的多個多個子控件,通過這種方式對其進行統(tǒng)一的管理;

S04)、在設置的窗口消息回調函數(shù)中處理WM_SIZE消息(窗口尺寸發(fā)生變化后,系統(tǒng)會自動給該窗口推送WM_SIZE消息,窗口大小改變的尺寸可以通過這個消息的兩個參數(shù)獲取到),收到該消息后,根據(jù)全局緩存中的我們緩存的子控件調整規(guī)則設置子控件的大小或者位置,設置完成之后通過InvalidateRect重繪窗口讓調整立即生效,處理完成后從緩存中查找出該窗口子類化之前的窗口過程,繼續(xù)調用該窗口過程讓原來的窗口過程能夠繼續(xù)處理該消息;

S05)、處理WM_DESTROY消息(通常在窗口關閉的時候系統(tǒng)會向該窗體發(fā)送這個消息),在這個消息中,進行內存中緩存數(shù)據(jù)的清理工作,將該窗口的緩存數(shù)據(jù)刪掉。

下面以一個具體實施例描述該方法,如圖2所示的一個對話框,我們要達到的效果是,編輯框1隨主窗口的大小改變調整寬度,編輯框2和編輯框3調整高度,并且在保證當前寬度比例的情況下調整寬度,按鈕1、按鈕2和按鈕3隨對話框的改變調整位置,保證始終位于父窗口的右下方。

調整的具體過程為:1、獲取編輯框2的窗口句柄;2、取編輯框3的窗口句柄;3、獲取編輯框1的窗口句柄;4、獲取主對話框的窗體矩形大小;5、獲取編輯框2的窗體矩形大??;6、獲取編輯框3的窗體矩形大小;7、計算編輯框2的寬度;8、計算編輯框3的寬度;9、編輯框2所占的比值大??;10、編輯框3所占的比值大?。?1、形成子控件調整系數(shù)列表;12、主窗口大小位置改動后調整寬度;13、調整寬度和高度;14、調整位置寬度和高度;15、調整位置和寬度;16、按鈕1調整位置;17、按鈕2調整位置;18、按鈕3調整位置;19、通過接口設置系數(shù)生效。

本發(fā)明通過子類化的方式設置子控件調整規(guī)則,相對調用者透明的調整窗口子控件的大小和位置,設置完成后不需要用戶繼續(xù)干預,自動的進行調整;本發(fā)明高效準確,所有的控件統(tǒng)一的進行處理調整,不在需要分別的進行處理;兼容性好,通過底層API實現(xiàn),支持純粹SDK開發(fā)的視圖界面程序,支持MFC、WTL等框架開發(fā)的視圖界面程序。

以上描述的僅是本發(fā)明的基本原理和優(yōu)選實施例,本領域技術人員根據(jù)本發(fā)明作出的改進和替換,屬于本發(fā)明的保護范圍。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
光泽县| 林甸县| 瓦房店市| 正定县| 临夏市| 彰化市| 巩留县| 措勤县| 江都市| 喀喇| 四平市| 灵宝市| 临颍县| 盐源县| 文登市| 东台市| 兴化市| 遵义市| 南丹县| 永修县| 连南| 多伦县| 陆川县| 武安市| 睢宁县| 丹巴县| 岑溪市| 吉首市| 台山市| 延吉市| 灵川县| 聊城市| 桐庐县| 老河口市| 赤水市| 桂阳县| 福清市| 蛟河市| 塔城市| 贵溪市| 平谷区|