MFC中的CMFCDynamicLayout类的介绍
MFC中的CMFCDynamicLayout类的介绍
MFC想要实现对话框中窗口拖拽时自动改变控件的位置和大小,在Visual Studio 2015之前只能自己写方法进行计算。
Visual Studio 2015以后,MFC增加了一个叫做CMFCDynamicLayout的类,来处理画面上这些需要自适应大小的控件。
下面我们来介绍CMFCDynamicLayout布局类的使用:
首先新建工程:,我在我之前的工程中使用该类。
1.首先需要包含头文件
#include<afxlayout.h>
在对话框中添加一些控件如下:
添加完后,需要设置对话框的属性是Resizing属性。
第二步:在对话框的OnInitialDialog函数中添加代码:
// 启用布局方式
EnableDynamicLayout(TRUE);CMFCDynamicLayout* layout = GetDynamicLayout();if (layout)
{layout->Create(this);layout->SetMinSize(CSize(400,300));layout->AddItem(IDC_BUTTON_OK, CMFCDynamicLayout::MoveHorizontalAndVertical(100,100),CMFCDynamicLayout::SizeNone()); layout->AddItem(IDC_BUTTON_CANCEL, CMFCDynamicLayout::MoveHorizontalAndVertical(100,100),CMFCDynamicLayout::SizeNone()); layout->AddItem(IDC_LIST_CITY, CMFCDynamicLayout::MoveNone(),CMFCDynamicLayout::SizeHorizontalAndVertical(100,100));layout->AddItem(IDC_STATIC_MODEL, CMFCDynamicLayout::MoveHorizontalAndVertical(100, 100),CMFCDynamicLayout::SizeNone()); layout->AddItem(IDC_RADIO_MODEL, CMFCDynamicLayout::MoveHorizontalAndVertical(100, 100),CMFCDynamicLayout::SizeNone());layout->AddItem(IDC_RADIO_MODEL2, CMFCDynamicLayout::MoveHorizontalAndVertical(100, 100),CMFCDynamicLayout::SizeNone());layout->AddItem(IDC_RADIO_MODEL3, CMFCDynamicLayout::MoveHorizontalAndVertical(100, 100),CMFCDynamicLayout::SizeNone());layout->AddItem(IDC_STATIC_LED1, CMFCDynamicLayout::MoveHorizontalAndVertical(100,100),CMFCDynamicLayout::SizeHorizontalAndVertical(100,100));layout->AddItem(IDC_STATIC_LED2, CMFCDynamicLayout::MoveHorizontalAndVertical(100,100),CMFCDynamicLayout::SizeHorizontalAndVertical(100, 100));
}
代码运行结果:
小结:
可以使用该类来实现界面控件跟随对话框大小改变而改变。
- 启用/关闭
EnableDynamicLayout(TRUE/FALSE);
// CWnd 成员 - 取布局对象
CMFCDynamicLayout* p = GetDynamicLayout();
// 必须先启用再取 - 添加控件(二选一)
BOOL AddItem(HWND hwnd, MoveSettings, SizeSettings);
BOOL AddItem(int nID, MoveSettings, SizeSettings);
- 移动规则(静态函数)
MoveNone()
/MoveHorizontal(pct)
/MoveVertical(pct)
/MoveHorizontalAndVertical(x, y)
pct=100 表示窗口变多少控件就移多少,0 表示不动。 - 大小规则
SizeNone()
/SizeHorizontal(pct)
/SizeVertical(pct)
/SizeHorizontalAndVertical(x, y)
- 其他
Adjust()
// 立即触发一次重排(通常框架在OnSize
里自动调)
SetMinSize(size)
// 小于该尺寸不再缩放
HasItem()/IsEmpty()
更多使用方法可以参考微软官方。
参考文章
1.CMFCDynamicLayout
2.使用CMFCDynamicLayoutLayout动态修改MFC画面上控件的大小和位置