WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
WinAPI Creating a second dialogbox after clicking a button control on the first dialogbox and destroying the first
我正在尝试让用户在第一个对话框中单击"确定"后使第二个对话框提示用户,同时销毁进程中的第一个对话框。
这是我的第一个对话框,在用户单击主窗口本身上的按钮后弹出。
void displayDialogW(HWND hWnd)
{
HWND hDlg = CreateWindowW(L"myDialogClass", L"Enter Desired Width", WS_VISIBLE | WS_OVERLAPPEDWINDOW, 0, 150, 300, 150, hWnd, NULL, NULL, NULL);
CreateWindowW(L"static", L"Width: ", WS_VISIBLE | WS_CHILD | WS_BORDER, 30, 20, 100, 20, hDlg, NULL, NULL, NULL);
CreateWindowW(L"edit", L"...", WS_VISIBLE | WS_CHILD | WS_BORDER, 80, 20, 180, 20, hDlg, NULL, NULL, NULL);
CreateWindowW(L"button", L"OK", WS_VISIBLE | WS_CHILD, 120, 60, 30, 30, hDlg, (HMENU)5, NULL, NULL);
TCHAR buff[1024];
GetWindowText(hDlg, buff, 1024);
desiredWidth = _wtoi(buff);
EnableWindow(hWnd, false);
}
第二个对话框或多或少与第一个对话框相同,但我不确定如何操作第一个对话框中的按钮以确保它打开第二个对话框并同时销毁第一个窗口。
我找到了一个名为 DestroyWindow 的函数,但它需要一个 hDlg 输入,所以我不能完全把它放在我的 dialogprodecure 命令函数中。所以,我不太确定我会怎么做。
如果要立即销毁第一个对话框,则第二个对话框不能将第一个对话框作为父对话框。相反,您可以打开第二个对话框,将父对话框设置为与第一个对话框相同的父对话框,然后可以安全地销毁第一个对话框。
case IDOK: // assuming hWnd is first dialog
{
createSecondDialog(GetWindow(hWnd, GW_OWNER)); // open second dialog
DestroyWindow(hWnd); // close first dialog
}
这是使用GetWindow(hWnd, GW_OWNER)
而不是GetParent(hWnd)
因为displayDialogW
创建一个具有WS_OVERLAPPED
样式的窗口,在这种情况下,传递到CreateWindowW
调用的内容必须是新窗口的所有者(根据拥有窗口的文档(。
DestroyWindow:
如果指定的窗口是父窗口或所有者窗口,则销毁窗口 在关联的子窗口或拥有的窗口时自动销毁 销毁父窗口或所有者窗口。函数首先销毁子项 或拥有的窗口,然后销毁父窗口或所有者窗口。
打开子窗口后,可以隐藏父窗口,如下所示:
case ID_BUTTON1:
{
displayDialogW(hWnd);
SetWindowPos(hWnd, NULL, 0, 0, 0, 0, SWP_HIDEWINDOW);
}
更新:
从 A 窗口可以有父级或所有者,但不能同时具有两者,
请注意,更改窗口的父级或所有者不是正常的 操作。
但是,如果您必须销毁父窗口,则可以使用SetParent根据ReincontinueMonica的评论实现它。
相关文章:
- 如果我尝试将对话框从一个项目移动到另一个项目,我是否需要从 rc 文件中复制 DESIGNINFO、对话框信息和AFX_
- 如何在另一个线程中关闭 MFC 模式对话框并获取对话框返回值?
- 如何从另一个QDialog访问comboBox的文本并将其写入该对话框中的lineEdit
- 连接类实例和另一个类实例中的对话框之间的槽和信号
- 如何从另一个线程关闭对话框?QT
- 嗨,我正在尝试编码一个允许用户在Visual C 中登录的按钮,程序正在运行,但表单对话框未显示
- 按下热键时显示一个对话框实例
- 当我打开一个新对话框时,如何禁止在Qt编程的Windows任务栏中显示对话框
- 如何使用C Win32 API在登录对话框中显示最后一个登录用户名
- MFC 一个父对话框,多个子对话框
- 当另一个窗口关闭时关闭无模式对话框
- 我想制作一个没有任何视觉对话框的程序
- 有没有办法获取对 MFC 对话框中所有子窗口或控件的引用,因为我有一个引用该控件的 CWnd 对象
- 无法在另一个对话框中创建 Qt 对话框
- Qt创建一个等待网络事件的对话框
- MFC:如何在一个函数中捕获对话框的每个控件的设置焦点
- 创建一个独立的gtkmm对话框
- 当一个进程崩溃时,我怎么能压制所有的错误对话框(我只想让它安静地崩溃)
- c++ win32为对话框添加一个超链接
- 多个对话框在一个dfm