• 对话框的伸缩功能


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

    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参数;

  • 相关阅读:
    软件工程——理论、方法与实践 第十章
    软件工程——理论、方法与实践 第九章
    软件工程——理论、方法与实践 第八章
    软件工程——理论、方法与实践 第七章
    idea中运行ssm 或springboot项目时,project Structure的配置
    在springboot项目中引入quartz任务调度器。
    短链接的生成之工具类的编写--三种方式(亲测可用)
    IDEA中进行远程调试springboot项目
    linux服务器上部署springboot项目,并让他持续运行到后台
    使用maven 打包springboot项目步骤以及所遇到的问题
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6918807.html
Copyright © 2020-2023  润新知