1

我正在使用win32创建一个窗口:

HWND mainWnd = CreateWindow(...);

现在我可以添加 gui 元素作为 mainWnd 的子元素。然而,这很快就会变得有点乏味,我想使用 Visual Studio 内置的设计器来帮助我。我注意到在添加资源下有一个对话框条目。在 IDD_FORMVIEW 对话框中似乎是最通用的,所以我添加了其中一个。接下来,我使用设计器向它添加了 gui 元素。

现在我想用它作为我的 mainWnd 的一个孩子。我该怎么做呢?

我找到了一些使用 DialogBox 的示例,但我不想要一个单独的对话框,我希望这个窗口作为我的 mainWnd 的子窗口。

4

3 回答 3

4

Visual Studio 中的设计器适用于创建对话框,而不是任意窗口。

话虽如此,有几种方法(按难度递增的顺序):

  1. 使您的主窗口成为一个对话框。 Petzold 的书中有一个使用对话框作为程序主窗口的示例。(如果我没记错的话,这是计算器的例子。)

  2. 创建对话框,并在显示之前将其样式更改为WS_CHILD,将其扩展样式更改为WS_EX_CONTROLPARENT,并将其作为主窗口的父级。要使所有导航功能正常工作,您必须IsDialogMessage在消息泵中添加呼叫。这是可行的,但可能很难让一切正常运行。

  3. 1 和 2 的混合,您为主窗口创建一个对话框,然后为内容创建第二个对话框(使用DS_CONTROL),并将第二个对话框放在第一个对话框中。我自己从未尝试过这种方法,但它似乎应该有效。

  4. 编写您自己的代码来解析对话框资源并创建子窗口,这基本上是在重新做很多CreateDialog为您所做的工作。

鉴于您希望使用 GUI 来设计 UI,我怀疑只有第一个解决方案足够简单以至于您会感兴趣。

于 2013-09-26T16:22:53.647 回答
1

使用 CreateDialog API 从资源中创建窗口。如果您不希望它看起来像一个对话框,请从资源属性中删除标题栏样式。

于 2013-09-26T13:39:07.297 回答
0

要使用从对话框资源模板创建的对话框,您必须在模板中指定 DS_CONTROL 窗口样式。

在此处阅读有关对话框的更多信息。

对话框资源在这里解释

于 2013-09-26T14:50:13.780 回答