将对话框项分组到单个“组”(Visual Studio)

时间:2012-12-25 14:42:58

标签: visual-studio-2010 visual-studio winapi visual-c++ dialog

我想为应用程序的更改设置创建一个对话框窗口。以下是Adobe Reader的屏幕截图。使用Spy ++后,我想:

在右侧,所有控件(按钮,组合框等等)都属于GroupBox。

对于左侧TreeView控件中的每个类别,都有一个相应的GroupBox,它将与此类别相关的所有控件分组。

当用户在不同类别之间进行选择时,它会隐藏一个GroupBox并显示另一个GroupBox。

但是在下面的源代码(xxx.rc,资源文件)中,我没有看到任何可以指定对话框项目的“父”的地方。

即使我用“资源视图”打开xxx.rc(未被视为代码),我也找不到任何选项来在其属性页中指定对话框项的父级。

我想知道如何在.rc文件中将父对象(在我的情况下是GroupBox)分配给对话项,或将对话框组分组到单个组,即创建对话框项时。 (我想可以通过修改.rc文件来实现。)

GROUPBOX        "View",IDC_SECTION_VIEW,101,6,228,88
LTEXT           "Default &Layout:",IDC_DEFAULT_LAYOUT_LABEL,107,19,108,9
COMBOBOX        IDC_DEFAULT_LAYOUT,215,17,108,64,CBS_DROPDOWNLIST | WS_TABSTOP
LTEXT           "Default &Zoom:",IDC_DEFAULT_ZOOM_LABEL,107,36,108,9
COMBOBOX        IDC_DEFAULT_ZOOM,215,34,108,149,CBS_DROPDOWN | WS_TABSTOP
CONTROL         "Show the &bookmarks sidebar when available",IDC_DEFAULT_SHOW_TOC,
                "Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,53,216,9
...
...
...

enter image description here

1 个答案:

答案 0 :(得分:2)

  

我想知道如何分配父母......

SetParent Windows API。您提供控件的HWND和假定的新父级的句柄。

在资源脚本中,控件将是对话框本身的子控件,但在运行时,您可以自由更改它并将它们分组到您感兴趣的层次结构中。

您可能还想考虑将假定的子组放入单独的对话框模板中并将其作为“复合控件” - 单独实例化并成为更高级别对话框的子级。

UPD。看看这个简单的项目(C ++ / ATL):AtlChildDialog。特别是at main dialog's WM_INITIDIALOG handler

ATLVERIFY(m_ChildDialog.Create(m_hWnd, (LPARAM) this));
ATLVERIFY(m_ChildDialog.MoveWindow(50, 50, 200, 150));
m_ChildDialog.m_EditWindow.SetWindowText(_T("Some Text"));
m_ChildDialog.ShowWindow(SW_SHOWNORMAL);
m_ChildDialog.SetFocus();

IDD_MAIN

IDD_CHILD

所有在运行时:

Run Time