如题

解决方案 »

  1.   

    在mfc里,就是在OnSizing和OnMoving函数里来做这个工作。这两个函数的p
    Rect参数就是消息里的(RECT*)lParam。 void CMainFrame::OnSizing(UINT fwSide, LPRECT pRect)  

        CFrameWnd::OnSizing(fwSide, pRect);     //限制窗口只能改变右边的尺寸 
        RECT rect; 
        GetWindowRect(&rect); 
        pRect->left=rect.left; 
        pRect->bottom=rect.bottom; 
        pRect->top=rect.top; 
    } void CMainFrame::OnMoving(UINT fwSide, LPRECT pRect)  

        CFrameWnd::OnMoving(fwSide, pRect);     //限制窗口只能上下移动 
        RECT rect; 
        GetWindowRect(&rect); 
        pRect->left=rect.left; 
        pRect->right=rect.right; 

      

  2.   

    要控制一个框架的的最大最小尺寸,你需要做两件事情.在CFrameWnd的
    继承类中处理消息WM_GETMINMAXINFO,结构MINMAXINFO设置了整个窗口
    类的限制,因此记住要考虑工具条,卷动条等等的大小.// 最大最小尺寸的象素点 - 示例 
    #define MINX  200 
    #define MINY  300 
    #define MAXX  300 
    #define MAXY  400 
      
    void CMyFrameWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 

        CRect rectWindow; 
        GetWindowRect(&rectWindow); 
      
        CRect rectClient; 
        GetClientRect(&rectClient); 
      
          // get offset of toolbars, scrollbars, etc. 
        int nWidthOffset = rectWindow.Width() - rectClient.Width(); 
        int nHeightOffset = rectWindow.Height() - rectClient.Height(); 
      
        lpMMI->ptMinTrackSize.x = MINX + nWidthOffset; 
        lpMMI->ptMinTrackSize.y = MINY + nHeightOffset; 
        lpMMI->ptMaxTrackSize.x = MAXX + nWidthOffset; 
        lpMMI->ptMaxTrackSize.y = MAXY + nHeightOffset; 
    } 第二步,在CFrameWnd的派生类的PreCreateWindow函数中去掉WS_MAXIMIZEBOX消息,
    否则在最大化时你将得不到预料的结果.BOOL CMyFrameWnd::PreCreateWindow(CREATESTRUCT& cs) 

        cs.style &= ~WS_MAXIMIZEBOX; 
        return CFrameWnd::PreCreateWindow(cs);