代码之家  ›  专栏  ›  技术社区  ›  Konrad

在MFC中调整控件的大小

  •  14
  • Konrad  · 技术社区  · 16 年前

    我正在写一个有两个窗格的程序(通过 CSplitter ),但我在确定每个帧中控件的大小时遇到问题。为了简单起见,有人能告诉我,对于一个基本的框架,我将如何使用单个 CEdit 控制

    CEdit::OnSize() 作用但我真的没有什么进展。。。

    谢谢!:)

    7 回复  |  直到 12 年前
        1
  •  11
  •   Community CDub    6 年前

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

    您应该在框架类中添加OnSize处理程序,并将其作为Rob添加到此处理程序中 pointed out 您将获得框架的客户端区域的宽度和高度,然后您应该添加代码来调整控件的大小和位置。

    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);
    }
    
        2
  •  9
  •   Rob    16 年前

    当您的帧接收到OnSize消息时,它将为您提供新的宽度和高度-您只需调用CEdit SetWindowPos方法将这些值传递给它即可。

    void CMyPane::OnSize(UINT nType, int cx, int cy)
    {
        m_wndEdit.SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
    }
    
        3
  •  5
  •   Eddie    16 年前

    GetDlgItem(IDC\u您的\u幻灯片)——>SetWindowPos(…)//实际上,您可以移动、调整大小…等等

        4
  •  3
  •   ravenspoint    16 年前

        5
  •  2
  •   Scott Stanchfield    16 年前

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

    您可能还希望处理在调整大小过程中发送的WM_大小消息。这将允许您在用户仍在拖动鼠标时主动调整子窗口的大小。严格来说,不需要处理WM_大小,但它可以提供更好的用户体验。

        6
  •  1
  •   Sergey Kornilov    16 年前

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

    调整大小范例用于指定调整对话框大小时控件每一侧的移动量。

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

    Source code

        7
  •  0
  •   barbsan Cibi    6 年前

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

    the official docs 说:

    • ON_WM_SIZE 是谁的消息处理程序 ::OnSize()
    • ON_WM_SIZING 是谁的消息处理程序 ::OnSizing() 当剪贴簿查看器窗口的客户端区域大小更改时触发;
    • ON_WM_GETMINMAXINFO 是谁的消息处理程序 ::OnGetMinMaxInfo() 每当窗口需要知道最大化位置或尺寸,或最小或最大跟踪大小时触发。

    cwnd 对于某些范围,您可以参考消息 关于\u WM\u GETMINMAXINFO ; 如果要实时检索大小更改,可以参考其他两条消息。

        8
  •  0
  •   db-hopper    4 年前

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

    这样,您就省去了几何体和变换的负担。