简单的对话框控件调整器






4.86/5 (41投票s)
2003年9月15日
1分钟阅读

232808

7436
简单实现 .NET 窗体中实现的“锚点”和“停靠”功能。
引言
昨天当我编写一个简单的 Win32 对话框应用程序时,我发现 .NET 窗体中实现的一个方便的功能缺失了;控件的锚点和停靠。我查看了 CodeProject,但我没有找到 *完全* 我要找的东西,所以我为自己编写了一个简单的解决方案。我把它放在这里,希望对其他程序员有用。这个解决方案有两个优点。首先,你可以在 MFC 和非 MFC 应用程序中使用这个简单的类。其次,你可以使用添加/删除功能来动态创建在运行应用程序期间创建的控件。
使用代码
首先,如果你想在你的应用程序中使用这个类,你必须包含这个头文件
#include "anchor.h"
CDlgAnchor dlgAnchor;
CDlgMan dlgMan;
在 WM_INITDIALOG
处理程序例程或 OnInitDialog
(MFC 应用程序) 中,你必须初始化这个类
static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: // load pos/sizes of dialog window and all child windows dlgMan.Load(hwndDlg, "Software\\CodeProject\\AnchorExample"); dlgAnchor.Init(hwndDlg); ...
现在你可以从头文件中列表中设置你想要的控件的锚点和/或停靠。你可以根据需要使用添加/删除控件在对话框窗口的生命周期内,例如,你可以使用 Add
函数来动态创建控件。
dlgAnchor.Add(IDOK, ANCHOR_BOTTOM); dlgAnchor.Add(IDCANCEL, ANCHOR_BOTTOM); dlgAnchor.Add(IDC_LIST1, ANCHOR_TOPLEFT | ANCHOR_BOTTOM); dlgAnchor.Add(IDC_LIST2, ANCHOR_BOTTOMLEFT | ANCHOR_RIGHT); dlgAnchor.Add(IDC_EDIT1, ANCHOR_ALL); ...
最后,你需要将代码添加到 WM_SIZE
处理程序例程中,该代码将执行 OnSize
类例程,并将代码添加到 WM_DESTROY
处理程序例程中,该代码将保存窗口位置和大小。
case WM_SIZE:
dlgAnchor.OnSize();
...
case WM_DESTROY:
dlgMan.Save();
...
就这样。我希望你觉得这个类有用。
历史
- 2003年9月19日
- 添加了
Update
和UpdateAll
函数,你可以使用它们,如果其他对话框处理程序(如分割器)将更改控件的大小。 - 添加了辅助类
CDlgMan
(保存/恢复窗口位置和所有子窗口的位置)。
- 添加了
- 2003年9月11日
- 首次发布。