OnSize、OnSizing和OnGetMinMaxInfo區(qū)別分析
最近用到窗口變化的一些東西,遇到幾個(gè)相關(guān)的消息函數(shù),簡(jiǎn)要分析,作為備忘。
3個(gè)消息分別是:WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分別對(duì)應(yīng)相應(yīng)的處理函數(shù):OnSize、OnSizing、OnGetMinMaxInfo。
當(dāng)窗口大小發(fā)生變化時(shí),響應(yīng)的順序依次是:WM_GETMINMAXINFO-->WM_SIZING-->WM_SIZE。
OnGetMinMaxInfo
這個(gè)函數(shù)在窗口初始化的時(shí)候會(huì)被調(diào)用一次,當(dāng)窗口大小發(fā)生改變的時(shí)候也會(huì)被調(diào)用。利用這個(gè)函數(shù),可以比較方便的實(shí)現(xiàn)窗口最大最小尺寸的控制。
參數(shù)lpMMI是一個(gè)結(jié)構(gòu)體指針,其中包含了有關(guān)窗口的最大化大小和位置以及最小、最大跟蹤大小的信息。
使用這個(gè)函數(shù)控制窗口最小尺寸的示例的代碼如下:
void CXXXDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
lpMMI->ptMinTrackSize.x = 500; //x寬度
lpMMI->ptMinTrackSize.y = 100; //y高度
CDialog::OnGetMinMaxInfo(lpMMI);
}
以上代碼可以使得窗口大小變化時(shí),最小寬度為500px,最小高度為100px。
OnSizing
這個(gè)函數(shù)在窗口大小發(fā)生變化時(shí)被調(diào)用。在這個(gè)函數(shù)里,也可以控制窗口的最大最小尺寸,但是沒有OnGetMinMaxInfo方便。
void CXXXDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
if ((pRect->right - pRect->left) < 500)
{
//return ; //直接return是無效的,窗口大小還是會(huì)改變
pRect->right = pRect->left + 500;
}
CDialog::OnSizing(fwSide, pRect);
}
用上面的方法,如果是從右邊改變大小,可以達(dá)到想要的效果,但是從左邊改變大小,雖然大小可以控制在最小500,但是當(dāng)達(dá)到最小寬度后,再縮小,會(huì)發(fā)現(xiàn)整個(gè)窗口往右移動(dòng)了,原因是代碼中的pRect->right = pRect->left + 500;這句是針對(duì)left來改變r(jià)ight的,所以left移動(dòng)了,right也移動(dòng)了,看上去就像是這個(gè)窗口右移了。所以針對(duì)這種情況又要另外做相應(yīng)的處理。
OnSize
這個(gè)函數(shù)會(huì)在窗口大小改變結(jié)束后被調(diào)用,通常會(huì)在這個(gè)函數(shù)里重新擺放各個(gè)控件的位置及大小。用這個(gè)函數(shù)暫時(shí)沒有找到什么辦法可以控制窗口的最大最小大小。
相關(guān)文章
關(guān)于PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題及解決方法
這篇文章主要介紹了PCL出現(xiàn)"無法找到?pcl_commond.dll?文件程序無法執(zhí)行"的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07C語言實(shí)現(xiàn)九大排序算法的實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于C語言實(shí)現(xiàn)九大排序算法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10C語言雙指針多方法旋轉(zhuǎn)數(shù)組解題LeetCode
這篇文章主要為大家介紹了C語言雙指針使用多方法旋轉(zhuǎn)數(shù)組題解LeetCode,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼
在當(dāng)今計(jì)算機(jī)應(yīng)用廣泛的領(lǐng)域中,了解系統(tǒng)的內(nèi)存、CPU和GPU使用情況是非常重要的,本文將介紹如何使用Qt和Windows API來讀取系統(tǒng)的內(nèi)存、CPU和GPU使用詳細(xì)信息,將提供一個(gè)完整的示例代碼,需要的朋友可以參考下2024-01-01