zoukankan      html  css  js  c++  java
  • 对话框的伸缩功能

    当用户单击“收缩<<”按钮后,将对话框的下半部分切除,并将按钮的文本改为“扩展>>”;当用户再次单击该“扩展>>”按钮后,还原为完整的对话框;

    1、先给这个按钮添加命令响应函数,首先实现单击按钮后按钮文本改变的功能

        

    void CTestDlg::OnButton1() 
    {
        // TODO: Add your control notification handler code here
        CString str;
        GetDlgItemText(IDC_BUTTON1,str);
        if(str=="收缩<<"){
            SetDlgItemText(IDC_BUTTON1,"扩展>>");
        }else{
            SetDlgItemText(IDC_BUTTON1,"收缩<<");
        }
    }
    

    2、在资源窗口中利用图像控件为对话框添加一条分割线,将其ID改为IDC_SEPARATOR,将其样式选中“凹陷”;

      

    3、利用GetWindowRect函数获取对话框的原始位置;当切除分割线以下部分时,对话框的左上角坐标位置和宽度并未改变,变化的只是对话框的右下角的纵坐标;利用GetWindowRect函数获取分割线的大小和坐标位置,而分割线的右下角纵坐标即为收缩后的对话框的右下角坐标; 

    void CTestDlg::OnButton1() 
    {
        // TODO: Add your control notification handler code here
        CString str;
        GetDlgItemText(IDC_BUTTON1,str);
        if(str=="收缩<<"){
            SetDlgItemText(IDC_BUTTON1,"扩展>>");
        }else{
            SetDlgItemText(IDC_BUTTON1,"收缩<<");
        }
    
        static CRect rectLarge;  //用于保存对话框的原始尺寸
        static CRect rectSmall;  //用于保存对话框收缩后的尺寸
        if(rectLarge.IsRectEmpty()){  //判断对话框的原始尺寸是否已被赋值
            CRect rectSeparator;
            GetWindowRect(&rectLarge);  //获取对话框的原始尺寸
            GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);  //获取分割线的位置坐标
            rectSmall.left=rectLarge.left;
            rectSmall.top=rectLarge.top;
            rectSmall.right=rectLarge.right;
            rectSmall.bottom=rectSeparator.bottom;  //对话框收缩后的右下角纵坐标即为分割线的右下角坐标
        }
        if(str=="收缩<<"){
            SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE|SWP_NOZORDER);
        }else{
            SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),SWP_NOMOVE|SWP_NOZORDER);
        }
        
    }
    

      SetWindowPos:设置窗口的位置和大小;

      BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);

      pWndInsertAfter:设置当前窗口在Z轴上的位置

      x,y:窗口左上角的x,y坐标

      cx,cy:窗口的宽度和高度

      nFlags:设定窗口的尺寸和Z轴位置;SWP_NOMOVE:维持窗口当前位置,忽略x,y参数;SWP_NOZORDER:维持窗口当前的Z轴位置,忽略pWndInsertAfter参数;

  • 相关阅读:
    二分和牛顿法实现开根号
    leetcode 44. 通配符匹配
    leetcode 91. 解码方法
    leetcode 236. 二叉树的最近公共祖先
    leetcode 39. 组合总数
    leetcode:146. LRU缓存机制
    leetcode:124. 二叉树中的最大路径和
    二叉树前序遍历,中序遍历,后序遍历以及层次遍历实现
    leetcode: 4. 寻找两个有序数组的中位数
    Leetcode: 43. 接雨水
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6918807.html
Copyright © 2011-2022 走看看