【问题标题】:Group dialog items to a single "Group" (Visual Studio)将对话框项分组到单个“组”(Visual Studio)
【发布时间】:2012-12-11 11:31:06
【问题描述】:

我想创建一个对话窗口来更改应用程序的设置。下面是 Adob​​e 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
...
...
...

【问题讨论】:

  • 组合框不组合控件。它们只是传达对话设计者意图的视觉辅助。 WS_GROUP 窗口样式控制箭头键导航,WS_TABSTOP 控制 [Tab] 键导航。由于您的假设是错误的,因此您基于该假设的解决方案也是错误的。事实上,我仍然不明白你真正想要做什么。如果您描述了您的最终目标而不解释您提出的解决方案,这将有所帮助。

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


【解决方案1】:

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

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();

在运行时都在一起:

【讨论】:

  • 是的,我知道这个解决方案。但这不是在 .rc 文件中起作用,而是在另一个 .cpp 文件中起作用。我只是想知道在 .rc 文件中创建对话框项时是否可以这样做。我编辑我的问题以指定这一点,但谢谢。
  • 好的,谢谢你告诉我不能在 .rc 文件中指定对话框项的父项。
  • .RC 控件的父级将是对话框,您无法灵活地覆盖它。您可以在运行时重新设置控件的父级,并且可以设计单独的模板并在运行时将它们“合并”到层次结构中。
  • 谢谢。通过“...将假定的子组放入单独的对话框模板”,您的意思是:创建 2 个对话框窗口,并在运行时将一个设置为另一个的子组?
  • 是的,可以让孩子成为一个无边框且无缝适配主对话框的。
猜你喜欢
  • 1970-01-01
  • 2016-04-18
  • 2012-07-11
  • 1970-01-01
  • 2012-11-08
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
相关资源
最近更新 更多