用“DialogBox”以外的方法打开一个窗口

时间:2013-02-03 15:05:13

标签: c++ windows winapi

当用户单击我的C ++ Win32应用程序中的按钮或菜单项时,我必须打开一个对话框IDD_WINDOW_INFO。我用来打开对话框的方法如下:

DialogBox(hInstance, MAKEINTRESOURCE(IDD_WINDOW_INFO), hMainWindow, WindowInfoProc);

但我的问题是,当该对话框打开时,用户无法使用我的应用程序的主窗口进行操作。那么我该如何让两个窗口都活动?

2 个答案:

答案 0 :(得分:5)

您正在调用DialogBox,以模态方式显示对话框。显示模态对话框时,其他所有窗口将被禁用,只有模态对话框可以接受输入。这是模态对话的本质和意图。我们的想法是,您只能与对话框进行交互,并且无法与其他窗口进行交互。

另一个答案建议将NULL作为hWndParent参数传递给DialogBox。那不是解决方案。这将导致你拥有一个无主的窗口。是的,您将能够与主窗口进行交互,但是当您这样做时,您的主窗口将显示在对话框的顶部。那是因为所有权设置不正确。我建议您阅读window ownership to better understand the issue

解决问题的正确方法是显示无模式对话框。无模式对话框允许您与应用程序中的其他窗口进行交互。而这正是你在问题中所要求的。

您可以通过调用CreateDialog后跟ShowWindow来显示无模式对话框。此MSDN文章显示了一个示例:Using Dialog Boxes

答案 1 :(得分:2)

如果我没记错的话,您可以将NULL而不是句柄传递给父窗口,或者在资源编辑器中更改对话框类型。

这是一种简单的方法,但以下情况肯定更好 - 因为拥有无主对话不是您的最佳选择。 关键是DialogBox()将创建一个模态对话框窗口,而CreateDialog则不会。模态对话框禁用父窗口。 从MSDN:无模式对话框既不会禁用所有者窗口也不会向其发送消息。 这应该可以解决你的问题。

CreateDialog(hInstance, MAKEINTRESOURCE(IDD_WINDOW_INFO), hMainWindow, WindowInfoProc);

ShowWindow(hWnd, SW_SHOW);
相关问题