我试图使第二个对话框在用户破坏第一个对话框的同时在第一个对话框上单击“确定”后提示用户。
这是我在用户单击主窗口本身上的按钮后弹出的第一个对话框。
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
调用的内容必须是新窗口的所有者(根据所拥有窗口的文档)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句