1. 程式人生 > >三種隨著對話方塊的大小更新改變控制元件大小

三種隨著對話方塊的大小更新改變控制元件大小

.h檔案中新增程式碼 private:     POINT Old;
    CRect m_rect; public:     afx_msg void OnSize(UINT nType, int cx, int cy);
    //void ReSize();
}; BOOL CDeviceParameter::OnInitDialog()
{
    CDialog::OnInitDialog();     ClearDeviceView(&m_ListView);
    InitDeviceTree(&m_TreeView,&g_Manager.m_Conf,g_Manager.m_Index);     //CRect rect;
    //GetClientRect(&rect); //取客戶區大小 
    //Old.x=rect.right-rect.left;
    //Old.y=rect.bottom-rect.top;
    
    GetClientRect(&m_rect);     return TRUE;
} void
CDeviceParameter::OnSize(
    UINT nType,
    int cx,
    int cy
    )
{
    CWnd *pWnd;
    CRect rect;    
    
    CDialog::OnSize(nType, cx, cy);
   
    //窗體大小發生變動。處理函式ReSize
    /*if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED) 
    {
        ReSize();
    }*/     /*if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
    {
        pWnd = GetDlgItem(IDC_TREEVIEWSHOW);
        if (pWnd)
        {
               
            pWnd->GetWindowRect(&rect);
            ScreenToClient(&rect);
            rect.left = rect.left * cx / m_rect.Width();
            rect.right = rect.right * cx / m_rect.Width();
            rect.top = rect.top * cy / m_rect.Height();
            rect.bottom = rect.bottom * cy / m_rect.Height();
            pWnd->MoveWindow(rect);
        }         pWnd = GetDlgItem(IDC_STATIC_TREE);
        if (pWnd)
        {
               
            pWnd->GetWindowRect(&rect);
            ScreenToClient(&rect);
            rect.left = rect.left * cx / m_rect.Width();
            rect.right = rect.right * cx / m_rect.Width();
            rect.top = rect.top * cy / m_rect.Height();
            rect.bottom = rect.bottom * cy / m_rect.Height();
            pWnd->MoveWindow(rect);
        }         pWnd = GetDlgItem(IDC_LISTVIEW);
        if (pWnd)
        {
               
            pWnd->GetWindowRect(&rect);
            ScreenToClient(&rect);
            rect.left = rect.left * cx / m_rect.Width();
            rect.right = rect.right * cx / m_rect.Width();
            rect.top = rect.top * cy / m_rect.Height();
            rect.bottom = rect.bottom * cy / m_rect.Height();
            pWnd->MoveWindow(rect);
        }
           
        pWnd = GetDlgItem(IDC_CLOSE);
        if (pWnd)
        {             pWnd->GetWindowRect(&rect);
            ScreenToClient(&rect);
            rect.left = rect.left * cx / m_rect.Width();
            rect.right = rect.right * cx / m_rect.Width();
            rect.top = rect.top * cy / m_rect.Height();
            rect.bottom = rect.bottom * cy / m_rect.Height();
            pWnd->MoveWindow(rect);
        }         GetClientRect(&m_rect);
           
    }       
  
    if (nType == SIZE_MAXIMIZED) 
    {
        pWnd = GetDlgItem(IDC_TREEVIEWSHOW);
        if (pWnd)
        {
           
            pWnd->GetWindowRect(&rect);
            ScreenToClient(&rect);
            rect.right = 200;
            rect.top = 35;
            rect.bottom = 630;
            pWnd->MoveWindow(rect);
        }         pWnd = GetDlgItem(IDC_STATIC_TREE);
        if (pWnd)
        {
           
            pWnd->GetWindowRect(&rect);
            ScreenToClient(&rect);
            rect.right = 220;
            rect.top = 10;
            rect.bottom = 650;
            pWnd->MoveWindow(rect);
        }         pWnd = GetDlgItem(IDC_LISTVIEW);
        if (pWnd)
        {
           
            pWnd->GetWindowRect(&rect);
            ScreenToClient(&rect);
            rect.left = 250;
            rect.right = 1260;
            rect.top = 10;
            rect.bottom = 650;
            pWnd->MoveWindow(rect);
        }
       
        pWnd = GetDlgItem(IDC_CLOSE);
        if (pWnd)
        {
           
            pWnd->GetWindowRect(&rect);
            ScreenToClient(&rect);
            rect.left = 1100;
            rect.right = 1260;
            rect.top = 670;
            rect.bottom = 700;
            pWnd->MoveWindow(rect);
        }         GetClientRect(&m_rect);
 
    }*/
    pWnd = GetDlgItem(IDC_STATIC_TREE);     //獲取控制元件控制代碼
    if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
    {
            
         pWnd->GetWindowRect(&rect);
         ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
         //rect.left = cx - rect.Width() - cWidth;        
         //rect.right = cx - cWidth;
         rect.left = 10;
         rect.right = 210;
         //rect.top = cy - rect.Height() - cHeight;
         //rect.bottom = cy - cHeight;           rect.top = 10;
         rect.bottom = cy - 80;
               
         pWnd->MoveWindow(rect);//設定控制元件大小
    }     pWnd = GetDlgItem(IDC_TREEVIEWSHOW);     //獲取控制元件控制代碼
    if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
    {
            
         pWnd->GetWindowRect(&rect);
         ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
         rect.left = 15;
         rect.right = 205;
         rect.top = 35;
         rect.bottom = cy - 100;
               
         pWnd->MoveWindow(rect);//設定控制元件大小
    }     pWnd = GetDlgItem(IDC_LISTVIEW);     //獲取控制元件控制代碼
    if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
    {
            
         pWnd->GetWindowRect(&rect);
         ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
         rect.left = 250;
         rect.right = cx - 10;
         rect.top = 10;
         rect.bottom = cy - 70;
               
         pWnd->MoveWindow(rect);//設定控制元件大小
    }
   
    pWnd = GetDlgItem(IDC_CLOSE);     //獲取控制元件控制代碼
    if(pWnd)//判斷是否為空,因為對話方塊建立時會呼叫此函式,而當時控制元件還未建立
    {
            
         pWnd->GetWindowRect(&rect);
         ScreenToClient(&rect);//將控制元件大小轉換為在對話方塊中的區域座標
         rect.left = cx - 90;
         rect.right = cx - 10;
         rect.top = cy - 50;
         rect.bottom = cy - 20;
               
         pWnd->MoveWindow(rect);//設定控制元件大小
    }     GetClientRect(&m_rect);//將變化後的對話方塊大小設為舊大小    
}
 
   /*void
CDeviceParameter::ReSize()
{
   
    float fsp[2];
    POINT Newp; //獲取現在對話方塊的大小
    CRect recta;
    CRect Rect;
    int woc;
    CPoint OldTLPoint;
    CPoint TLPoint; //左上角
    CPoint OldBRPoint;
    CPoint BRPoint; //右下角
    HWND hwndChild;     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;
   
    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;
}*/