三种随着对话框的大小更新改变控件大小

          
.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;
}*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值