IDD_WINDOW_INFO
当用户单击我的 C++ Win32 应用程序中的按钮或菜单项时,我必须打开一个对话框。我用来打开对话框的方法如下:
DialogBox(hInstance, MAKEINTRESOURCE(IDD_WINDOW_INFO), hMainWindow, WindowInfoProc);
但我的问题是,当该对话框打开时,用户无法使用我的应用程序的主窗口进行操作。那么我该怎么做才能让两个窗口都处于活动状态?
您正在调用DialogBox
以模态方式显示对话框。当显示模态对话框时,其他拥有的窗口被禁用,只有模态对话框可以接受输入。这就是模态对话框的本质和意图。这个想法是您只能与对话框交互,而不能与其他窗口交互。
另一个答案建议NULL
作为hWndParent
参数传递给DialogBox
. 那不是解决方案。这将导致您拥有一个无主的窗口。是的,您将能够与主窗口进行交互,但是当您这样做时,您的主窗口将出现在对话框的顶部。那是因为所有权设置不正确。我建议您阅读有关窗口所有权的信息以更好地理解该问题。
您的问题的正确解决方案是显示无模式对话框。无模式对话框允许您与应用程序中的其他窗口进行交互。这正是您在问题中所要求的。
CreateDialog
通过调用后跟.来显示无模式对话框ShowWindow
。此 MSDN 文章显示了一个示例:使用对话框。
如果我没记错的话,您可以将 NULL 而不是句柄传递给父窗口,或者在资源编辑器中更改对话框类型。
这是一种简单的方法,但以下方法肯定更好 - 因为拥有无主对话框不是您的最佳选择。关键是 DialogBox() 将创建一个模态对话框窗口,而 CreateDialog 不会。模态对话框禁用父窗口。来自 MSDN:无模式对话框既不会禁用所有者窗口,也不会向其发送消息。 那应该可以解决您的问题。
CreateDialog(hInstance, MAKEINTRESOURCE(IDD_WINDOW_INFO), hMainWindow, WindowInfoProc);
ShowWindow(hWnd, SW_SHOW);