是否可以为基于对话框的窗口而不是框架窗口创建MDI窗口?

时间:2019-08-12 13:29:58

标签: c++ winapi

我知道您可以创建一个MDI窗口到Frame窗口,但是基于对话框的窗口又可以为其创建MDI窗口呢?还是仅适用于Frame窗口?

还是可以创建一个MDI客户端窗口,然后创建一个MDI子框架窗口到基于对话框的窗口?

1 个答案:

答案 0 :(得分:1)

可以做到吗?大概。这是个好主意吗?可能不是。

主要问题是MDI和对话框都希望控制焦点和键盘处理。

您肯定需要使用CreateDialog而不是DialogBox来创建主窗口,因为您需要控制消息循环。 TranslateMDISysAccelIsDialogMessage可以为您提供一点帮助,但是您可能需要一些自定义处理,确定活动/重点窗口是MDI子框架还是常规对话框控件,并为MDI或对话框确定消息优先级。最困难的是跳出MDI子框架窗口并返回对话框。您可以通过添加诸如 F6 之类的自定义键将焦点设置回对话框来解决最后一个问题。

Raymond Chen对对话框做了blog post series,其中一些关于如何编写自己的对话框类和/或custom dlgproc handling

即使完全控制了消息循环并对对话框进行了一些控制,您可能仍然不得不不得不继承对话框和/或MDI客户端窗口的子类来处理特定消息。