如何让窗口最大化 并让控件跟随变化

2021年9月10日 6点热度 0条评论 来源: Andy20081251

让窗口最大化有2种方法

一,CWnd::ShowWindow(SW_SHOWMAXIMIZED);

二,先获取屏幕大小,然后更改窗口大小

      

要取得屏幕大小,可以用下面几个函数:

 

int cx = GetSystemMetrics(SM_CXFULLSCREEN);

int cy = GetSystemMetrics(SM_CYFULLSCREEN);

通过上边两个函数获取的是显示屏幕的大小,但不包括任务栏等区域。

  int   cx   =   GetSystemMetrics(   SM_CXSCREEN   );  
  int   cy   =   GetSystemMetrics(   SM_CYSCREEN   );

这两个函数获取的是真正屏幕的大小。

要设置对话框的大小,可以如下实现:

CRect temprect(0,0,640,480);
CWnd::SetWindowPos(NULL,0,0,temprect.Width(),temprect.Height(),SWP_NOZORDER|SWP_NOMOVE);

让控件随窗口变化有以下方法:

1 首先要知道对话框大小是否改变,改变了多少,我们应该记录当前对话框的大小。

在对话框类中添加成员变量 CRect m_rect 他是用来记录当前对话框的大小。我们在OnInitDialog()函数中获取对话框创建时的大小:GetClientRect(&m_rect);

2 增加消息WM_SIZE的消息响应函数 OnSize():只要对话框大小发生变化,就会调用该函数。

3 在OnSize()函数中增加如下代码:

void CMyDlg::OnSize(UINT nType, int cx, int cy)  //cx,cy就是当前对话框的长和宽
{
            CDialog::OnSize(nType, cx, cy);

            // TODO: Add your message handler code here
            if(nType!=SIZE_MINIMIZED )  //判断窗口是不是最小化了,因为窗口最小化之后 ,窗口的长和宽会变成0,当前一次变化的时就会出现除以0的错误操作
          {
                  ChangeSize(IDC_LIST1,cx,cy);  //对每一个控件依次做调整
                  ChangeSize(IDC_LIST2,cx,cy);
                  ChangeSize(IDC_BUTTON1,cx,cy);
                  ChangeSize(IDC_BUTTON2,cx,cy);
                  GetClientRect(&m_rect);   //最后要更新对话框的大小,当做下一次变化的旧坐标;
         }

}

然后再手动添加一个函数,用以实现具体的变化

void CMyDlg::ChangeSize(UINT nID, int x, int y)  //nID为控件ID,x,y分别为对话框的当前长和宽
{
       CWnd *pWnd;
       pWnd=GetDlgItem(nID);
       if(pWnd!=NULL)     //判断是否为空,因为在窗口创建的时候也会调用OnSize函数,但是此时各个控件还没有创建,Pwnd为空
       {
               CRect rec;
               pWnd->GetWindowRect(&rec);  //获取控件变化前的大小
               ScreenToClient(&rec);   //将控件大小装换位在对话框中的区域坐标
               rec.left=rec.left*x/m_rect.Width();  //按照比例调整空间的新位置
               rec.top=rec.top*y/m_rect.Height();
               rec.bottom=rec.bottom*y/m_rect.Height();
               rec.right=rec.right*x/m_rect.Width();
               pWnd->MoveWindow(rec);   //伸缩控件
      }
}

 

参考 http://blog.163.com/scuqifuguang@126/blog/static/171370086201232741358711/

http://blog.sina.com.cn/s/blog_4b5039210100dzkd.html

 

 

 

    原文作者:Andy20081251
    原文地址: https://blog.csdn.net/Andy20081251/article/details/32338041
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。