工控编程吧

标题: 上位机MFC如何根据父窗口的大小改变控件的大小和位置 [打印本页]

作者: qq263946146    时间: 2019-7-27 12:13
标题: 上位机MFC如何根据父窗口的大小改变控件的大小和位置
我们知道窗口大小发生变化时,会触发消息WM_SIZE我们就可以在此消息处理函数中改变控件的大小。
例如我们对话框上有一个列表控件IDC_LIST
初始化时我们可以设置一下它的窗口大小
  1. //获得客户区坐标
  2.         CRect rect;
  3.         GetClientRect(&rect);

  4.         //移动窗口
  5.         CWnd* pWnd = GetDlgItem(IDC_LIST);
  6.         if (pWnd != NULL)
  7.         {
  8.                 pWnd->MoveWindow(10, 10, rect.Width() - 20,rect.Height() - 20);
  9.         }
复制代码
当主窗口大小发生变化时,我们可以基其WM_SIZE消息处理函数内对应更改控件大小。
  1. void CDemoDlg::OnSize(UINT nType, int cx, int cy)
  2. {
  3.         CDialog::OnSize(nType, cx, cy);

  4.         //根据父窗口的大小移动窗口
  5.         CWnd* pWnd = GetDlgItem(IDC_LIST);
  6.         if (pWnd != NULL)
  7.         {
  8.                 pWnd->MoveWindow(10, 10, cx - 20, cy - 20);
  9.         }
  10. }
复制代码
nType表示窗口尺寸变化的类型,有最大化SIZE_MAXIMIZED 。最小化等等。
另外两个参数表示窗口新的客户区大小。
这个函数可以查阅MSDN
afx_msg void OnSize( UINT nType, int cx, int cy );
Parameters
nType
Specifies the type of resizing requested. This parameter can be one of the following values:
SIZE_MAXIMIZED   Window has been maximized.
SIZE_MINIMIZED   Window has been minimized.
SIZE_RESTORED   Window has been resized, but neither SIZE_MINIMIZED nor SIZE_MAXIMIZED applies.
SIZE_MAXHIDE   Message is sent to all pop-up windows when some other window is maximized.
SIZE_MAXSHOW   Message is sent to all pop-up windows when some other window has been restored to its former size.
cx
Specifies the new width of the client area.
cy
Specifies the new height of the client area.


[MFC408]1[/MFC408]
[weixinlianxi]1[/weixinlianxi]






欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4