<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    窗口變化相關消息 OnSize、OnSizing和OnGetMinMaxInfo

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    最近用到窗口變化的一些東西,遇到幾個相關的消息函數,簡要分析,作為備忘。

    3個消息分別是:WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分別對應相應的處理函數:OnSize、OnSizing、OnGetMinMaxInfo。

    當窗口大小發生變化時,響應的順序依次是:WM_GETMINMAXINFO-->WM_SIZING-->WM_SIZE。

     

    OnGetMinMaxInfo

    這個函數在窗口初始化的時候會被調用一次,當窗口大小發生改變的時候也會被調用。利用這個函數,可以比較方便的實現窗口最大最小尺寸的控制。

    參數lpMMI是一個結構體指針,其中包含了有關窗口的最大化大小和位置以及最小、最大跟蹤大小的信息。

    使用這個函數控制窗口最小尺寸的示例的代碼如下:

    [cpp] view plaincopy
    1. void CXXXDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)   
    2.  
    3.     lpMMI->ptMinTrackSize.x 500;   //x寬度  
    4.     lpMMI->ptMinTrackSize.y 100;   //y高度  
    5.   
    6.     CDialog::OnGetMinMaxInfo(lpMMI);  
    7.  


    以上代碼可以使得窗口大小變化時,最小寬度為500px,最小高度為100px。

     

    OnSizing

    這個函數在窗口大小發生變化時被調用。在這個函數里,也可以控制窗口的最大最小尺寸,但是沒有OnGetMinMaxInfo方便。

    [cpp] view plaincopy
    1. void CXXXDlg::OnSizing(UINT fwSide, LPRECT pRect)   
    2.  
    3.     if ((pRect->right pRect->left) 500)  
    4.      
    5.         //return  //直接return是無效的,窗口大小還是會改變  
    6.         pRect->right pRect->left 500;  
    7.      
    8.   
    9.     CDialog::OnSizing(fwSide, pRect);  
    10.  

    用上面的方法,如果是從右邊改變大小,可以達到想要的效果,但是從左邊改變大小,雖然大小可以控制在最小500,但是當達到最小寬度后,再縮小,會發現整個窗口往右移動了,原因是代碼中的pRect->right = pRect->left + 500;這句是針對left來改變right的,所以left移動了,right也移動了,看上去就像是這個窗口右移了。所以針對這種情況又要另外做相應的處理。

     

    OnSize

    這個函數會在窗口大小改變結束后被調用,通常會在這個函數里重新擺放各個控件的位置及大小。用這個函數暫時沒有找到什么辦法可以控制窗口的最大最小大小。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全