第十一篇 -- 如何實現MFC窗口的最大化以及控件隨最大化


這一篇介紹的是怎么實現MFC窗口的最大最小化,以及里面控件大小也隨之改變

第一步:實現窗口最大最小化

首先右擊窗口空白處,打開properties,將里面的MaximizeBox和MinimizeBox都選擇為true,這時候窗口已經有最大最小化了,不過控件大小卻不變

 

第二步:實現控件大小位置變化

右擊窗口空白處,打開類視圖(Class Wizard)--> 點擊選項Messages --> 找到WM_SIZE選中 --> 添加處理程序(Add handler)--> 編輯代碼(Edit code)

在這個函數里面添加如下代碼

void CframestudyDlg::OnSize(UINT nType, int cx, int cy)
{
    CDialogEx::OnSize(nType, cx, cy);

    // TODO: Add your message handler code here
    if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED) {
        resize();
    }
}
View Code

 

其中resize()函數需要我們自己添加,這是一個自定義的函數,在上面函數下添加就可以了,當然沒有硬性要求

void CframestudyDlg::resize()
{
    float fsp[2];
    POINT Newp; //獲取現在對話框的大小
    CRect recta;
    GetClientRect(&recta);     //取客戶區大小  
    Newp.x = recta.right - recta.left;
    Newp.y = recta.bottom - recta.top;
    fsp[0] = (float)Newp.x / Old.x;
    fsp[1] = (float)Newp.y / Old.y;
    CRect Rect;
    int woc;
    CPoint OldTLPoint, TLPoint; //左上角
    CPoint OldBRPoint, BRPoint; //右下角
    HWND  hwndChild = ::GetWindow(m_hWnd, GW_CHILD);  //列出所有控件  
    while (hwndChild)
    {
        woc = ::GetDlgCtrlID(hwndChild);//取得ID
        GetDlgItem(woc)->GetWindowRect(Rect);
        ScreenToClient(Rect);
        OldTLPoint = Rect.TopLeft();
        TLPoint.x = long(OldTLPoint.x*fsp[0]);
        TLPoint.y = long(OldTLPoint.y*fsp[1]);
        OldBRPoint = Rect.BottomRight();
        BRPoint.x = long(OldBRPoint.x *fsp[0]);
        BRPoint.y = long(OldBRPoint.y *fsp[1]);
        Rect.SetRect(TLPoint, BRPoint);
        GetDlgItem(woc)->MoveWindow(Rect, TRUE);
        hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
    }
    Old = Newp;

}
View Code

 

resize()前面CframestudyDlg是自己的函數名,跟你創建時其他函數前綴保持一致就好。

寫完函數后,要在.h文件里面寫上函數原型。

打開frame_studyDlg.h

在public部分添加

POINT Old;
void resize();

 

最后一步就是要在onInitDialog()函數里面添加一段代碼,里面會有一句“TODO: Add extra initialization here”這一句,在下面添加即可。

    // TODO: Add extra initialization here
    CRect rect;
    GetClientRect(&rect);//取客戶區大小
    Old.x = rect.right - rect.left;
    Old.y = rect.bottom - rect.top;

 

現在,大功告成了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM