对话框重载 OnSize 对话框尺寸修改

1、头文件

  afx_msg void OnSize(UINT nType, int cx, int cy);

2、CPP

(1)消息响应

BEGIN_MESSAGE_MAP(MyDlg, CDialog)
  ON_WM_SIZE()
END_MESSAGE_MAP()

(2)实现

void MyDlg::OnSize(UINT nType, int cx, int cy)
{
  CDialog::OnSize(nType, cx, cy);
  // TODO: Add your message handler code here
  
}

(4)改变位置示例

 // TODO: Add your message handler code here
  if (nType == SIZE_MAXIMIZED || nType == SIZE_RESTORED)	//判断窗口是不是最小化了,因为窗口最小化之后,窗口的长和宽会变为0,这样造成除以0的错误
  {
    RECT reDlg;
    RECT rcList;
    RECT rcBtn;
    GetWindowRect(&reDlg);
    mList.GetWindowRect(&rcList);
    mBtnSelAll.GetWindowRect(&rcBtn);
    CRect rcTab, rcTab2;
    mTab.GetItemRect(0, &rcTab);
    
    rcTab2 = rcTab;
    ScreenToClient2(reDlg); // 客户区
    ScreenToClient2(rcTab2);

    double  dDlgW = reDlg.right - reDlg.left;
    double  dDlgH = reDlg.bottom - reDlg.top;
    double  dBTnW = rcBtn.right - rcBtn.left;
    double  dBTnH = rcBtn.bottom - rcBtn.top;

    RECT re;
    re.top = rcTab.top + rcTab.Height() * mTab.GetRowCount();
    re.bottom = reDlg.bottom - dBTnH - 20;
    re.left = rcTab.left;
    re.right = reDlg.right - rcTab.left;
    // 上下左右过以后处理
    mList.MoveWindow(&re);

    for (int i = 0; i < 5; i++)
    {
      mList.SetColumnWidth(i, LVSCW_AUTOSIZE);
      int nColumnWidth = mList.GetColumnWidth(i);
      mList.SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER);
      int nHeaderWidth = mList.GetColumnWidth(i);
      mList.SetColumnWidth(i, max(nColumnWidth, nHeaderWidth));
    }

    // 从左到右依次排列
    re.top = re.bottom + 10;
    re.bottom = re.top + dBTnH;
    re.left = re.right - dBTnW * 5 - 4 * 20;
    re.right = re.left + dBTnW;
    mBtnSelAll.MoveWindow(&re);

    CButton* pBtnDel = (CButton*)GetDlgItem(IDBtn_Del);
    if (pBtnDel)
    {
      re.left = re.right + 20;
      re.right = re.left + dBTnW;
      pBtnDel->MoveWindow(&re);
    }
    CButton* pBtnSec = (CButton*)GetDlgItem(IDBtn_Sect);
    if (pBtnSec)
    {
      re.left = re.right + 20;
      re.right = re.left + dBTnW;
      pBtnSec->MoveWindow(&re);
    }
    CButton* pBtnMdi = (CButton*)GetDlgItem(IDBtn_Modify);
    if (pBtnMdi)
    {
      re.left = re.right + 20;
      re.right = re.left + dBTnW;
      pBtnMdi->MoveWindow(&re);
    }
    CButton* pBtnCon = (CButton*)GetDlgItem(IDCANCEL);
    if (pBtnCon)
    {
      re.left = re.right + 20;
      re.right = re.left + dBTnW;
      pBtnCon->MoveWindow(&re);
    }
  }

4、可拖拽

在这里就不试应该是WS_THICKFRAME这个,代码大概是这样子的,未实验

DWORD dStyle = GetStyle();
ModifyStyle() //有兴趣的话自己只测试  可修改下面获取样式进行比对 我这里就不操作了 直接改属性方便

MFC 使用的样式 | Microsoft Learn(窗口样式)

对话框重载 OnSize 对话框尺寸修改_第1张图片

你可能感兴趣的:(MFC,C++,OnSize,对话框尺寸修改)