14

我正在编写一个有两个窗格(通过CSplitter)的程序,但是我在弄清楚调整每个框架中控件的大小时遇到​​了问题。为简单起见,有人可以告诉我如何为带有单个CEdit控件的基本框架执行此操作吗?

我很确定这与CEdit::OnSize()功能有关......但我并没有真正到达任何地方......

谢谢!:)

4

8 回答 8

11

窗口在调整大小后立即收到 WM_SIZE 消息(由 MFC 中的 OnSize 处理程序处理),因此 CEdit::OnSize 不是您要查找的。

您应该在框架类和此处理程序中添加 OnSize 处理程序,正如 Rob指出的那样,您将获得框架客户区域的宽度和高度,然后您应该添加调整控件大小和位置的代码。

像这样的东西

void MyFrame::OnSize(UINT nType, int w, int h)
{
    // w and h parameters are new width and height of your frame
    // suppose you have member variable CEdit myEdit which you need to resize/move
    myEdit.MoveWindow(w/5, h/5, w/2, h/2);
}
于 2008-09-24T14:46:16.197 回答
10

当您的框架收到 OnSize 消息时,它将为您提供新的宽度和高度 - 您可以简单地调用 CEdit SetWindowPos 方法并将这些值传递给它。

假设 CMyPane 是您的拆分器窗格,它包含您在 OnCreate 中创建的名为 m_wndEdit 的 CEdit:

void CMyPane::OnSize(UINT nType, int cx, int cy)
{
    m_wndEdit.SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
}
于 2008-09-24T14:28:10.200 回答
5

GetDlgItem(IDC_your_slidebar)->SetWindowPos(...) // 实际上你可以移动,调整大小...等

于 2008-09-24T14:36:00.620 回答
3

为此目的,SetWindowPos 有点繁重。MoveWindow 正是需要的。

于 2008-09-24T14:32:49.177 回答
2

其他人指出 WM_SIZE 是您应该在此时处理和调整子控件大小的消息。WM_SIZE 在调整大小完成后发送。

您可能还想处理在调整大小进行时发送的 WM_SIZING 消息。这将允许您在用户仍在拖动鼠标时主动调整子窗口的大小。处理 WM_SIZING 不是绝对必要的,但它可以提供更好的用户体验。

于 2008-09-24T15:39:28.250 回答
1

我使用 CodeGuru 的 CResize 类自动调整所有控件的大小。你告诉你希望如何调整每个控件的大小,它会为你完成这项工作。

调整大小范例是指定在调整对话框大小时控件的每一侧将移动多少。

SetResize(IDC_EDIT1, 0,   0,   0.5, 1);
SetResize(IDC_EDIT2, 0.5, 0,   1,   1);

当您有大量对话框控件时非常方便。

源代码

于 2008-09-24T21:23:25.243 回答
0

当涉及到窗口大小更改时,您可能会感兴趣的三个窗口消息:ON_WM_SIZE()ON_WM_SIZING()ON_WM_GETMINMAXINFO()

正如官方文档所说:

  • ON_WM_SIZE::OnSize()在 CWnd 的大小发生变化后触发其消息处理程序;
  • ON_WM_SIZING::OnSizing()当 clipbord-viewer 窗口的客户区大小发生变化时触发其消息处理程序;
  • ON_WM_GETMINMAXINFO::OnGetMinMaxInfo()每当窗口需要知道最大化的位置或尺寸,或者最小或最大跟踪大小时,就会触发其消息处理程序。

如果您想将大小限制在cwnd某个范围内,可以参考消息ON_WM_GETMINMAXINFO;如果您想实时检索尺寸变化,您可以参考其他两条消息。

于 2019-01-08T07:51:16.880 回答
0

最好在属性部分使用每个控件的动态布局功能。

假设您想要一个特定的控件,例如标题,始终位于视图/对话框的中心,然后您只需选择控件的动态布局的属性,将移动类型设置为水平,将移动 X 设置为 50,但您继续调整大小为无。这样,当您调整视图大小时,标题始终保持在中心。当您在资源视图中设计控件时,您必须记住,调整大小/移动的最小值是对话框/视图中控件的大小/位置。

这样,您就可以减轻几何和变换的负担。

于 2020-10-14T18:50:26.290 回答