Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以为基于对话框的窗口而不是框架窗口创建MDI窗口?_C++_Winapi - Fatal编程技术网

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

C++ 是否可以为基于对话框的窗口而不是框架窗口创建MDI窗口?,c++,winapi,C++,Winapi,我知道您可以创建一个MDI窗口到框架窗口,但是基于对话框的窗口呢?是否也可以创建MDI窗口到框架窗口,或者它只是框架窗口的专用窗口 或者可以创建一个MDI客户端窗口,然后创建一个MDI子框架窗口到基于对话框的窗口吗?可以吗?可能这是个好主意吗?可能不会 主要问题是MDI和对话框都希望控制焦点和键盘处理 您肯定需要使用CreateDialog而不是DialogBox来创建主窗口,因为您需要控制消息循环。TranslateMDISysAccel和IsDialogMessage可以为您提供一点帮助,但

我知道您可以创建一个MDI窗口到框架窗口,但是基于对话框的窗口呢?是否也可以创建MDI窗口到框架窗口,或者它只是框架窗口的专用窗口


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

可以吗?可能这是个好主意吗?可能不会

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

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

Raymond Chen做了一个关于dialogs的演讲,其中一些是关于如何编写自己的dialog类和/或


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

我认为您的图表是正确的。我不知道用对话框代替主框架窗口的方法,因为它有支持MDI子窗口的特定行为。如果您想将对话框作为MDI子窗口,那么是的-您可以!某种程度上。您可以用通常的方式创建MDI子框架,但可以将其视图窗口定义为从CFormView派生,CFormView可以查看文档,但它是基于对话框模板资源的滚动视图。我自己从未尝试过,但如果你尝试过,请告诉我们你是如何开始的。你能澄清一下,你是在使用MFC还是普通的winapi吗?是的,但你的图像是MFC应用程序,这就是为什么我不确定的原因。我的意思是,这很容易-是什么阻止你创建你或你将DefFrameProc称为对话框子窗口的框架窗口?或者甚至直接在没有框架的对话框中使用MDI客户端?