我有一个对话框IDD_WINDOW_INFO
,当用户点击我的C ++ Win32应用程序中的button或菜单项时,必须打开它。 我用来打开对话框的方法如下:
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);