最近用到窗口變化的一些東西,遇到幾個相關(guān)的消息函數(shù),簡要分析,作為備忘。
3個消息分別是:WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分別對應(yīng)相應(yīng)的處理函數(shù):OnSize、OnSizing、OnGetMinMaxInfo。
當(dāng)窗口大小發(fā)生變化時,響應(yīng)的順序依次是:WM_GETMINMAXINFO-->WM_SIZING-->WM_SIZE。
OnGetMinMaxInfo
這個函數(shù)在窗口初始化的時候會被調(diào)用一次,當(dāng)窗口大小發(fā)生改變的時候也會被調(diào)用。利用這個函數(shù),可以比較方便的實現(xiàn)窗口最大最小尺寸的控制。
參數(shù)lpMMI是一個結(jié)構(gòu)體指針,其中包含了有關(guān)窗口的最大化大小和位置以及最小、最大跟蹤大小的信息。
使用這個函數(shù)控制窗口最小尺寸的示例的代碼如下:
以上代碼可以使得窗口大小變化時,最小寬度為500px,最小高度為100px。
OnSizing
這個函數(shù)在窗口大小發(fā)生變化時被調(diào)用。在這個函數(shù)里,也可以控制窗口的最大最小尺寸,但是沒有OnGetMinMaxInfo方便。
用上面的方法,如果是從右邊改變大小,可以達(dá)到想要的效果,但是從左邊改變大小,雖然大小可以控制在最小500,但是當(dāng)達(dá)到最小寬度后,再縮小,會發(fā)現(xiàn)整個窗口往右移動了,原因是代碼中的pRect->right = pRect->left + 500;這句是針對left來改變right的,所以left移動了,right也移動了,看上去就像是這個窗口右移了。所以針對這種情況又要另外做相應(yīng)的處理。
OnSize
這個函數(shù)會在窗口大小改變結(jié)束后被調(diào)用,通常會在這個函數(shù)里重新擺放各個控件的位置及大小。用這個函數(shù)暫時沒有找到什么辦法可以控制窗口的最大最小大小。
新聞熱點
疑難解答
圖片精選