2

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

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

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

4

2 回答 2

6

您正在调用DialogBox以模态方式显示对话框。当显示模态对话框时,其他拥有的窗口被禁用,只有模态对话框可以接受输入。这就是模态对话框的本质和意图。这个想法是您只能与对话框交互,而不能与其他窗口交互。

另一个答案建议NULL作为hWndParent参数传递给DialogBox. 那不是解决方案。这将导致您拥有一个无主的窗口。是的,您将能够与主窗口进行交互,但是当您这样做时,您的主窗口将出现在对话框的顶部。那是因为所有权设置不正确。我建议您阅读有关窗口所有权的信息以更好地理解该问题

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

CreateDialog通过调用后跟.来显示无模式对话框ShowWindow。此 MSDN 文章显示了一个示例:使用对话框

于 2013-02-03T15:35:01.457 回答
2

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

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

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

ShowWindow(hWnd, SW_SHOW);
于 2013-02-03T15:10:08.370 回答