65.9K
CodeProject 正在变化。 阅读更多。
Home

简单的对话框控件调整器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (41投票s)

2003年9月15日

1分钟阅读

viewsIcon

232808

downloadIcon

7436

简单实现 .NET 窗体中实现的“锚点”和“停靠”功能。

dialog window before resizing

dialog window after resizing

引言

昨天当我编写一个简单的 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日
    • 添加了 UpdateUpdateAll 函数,你可以使用它们,如果其他对话框处理程序(如分割器)将更改控件的大小。
    • 添加了辅助类 CDlgMan(保存/恢复窗口位置和所有子窗口的位置)。
  • 2003年9月11日
    • 首次发布。
© . All rights reserved.