我已经创建了两个CDialog类。我们叫他们MainDialog和ExtraDialog。我希望ExtraDialog既可以通过doModal显示,也可以作为MainDialog中的嵌套对话框显示。
我已经可以通过按钮和doModal分别提出来了。然而,我一直被困在如何将它放在MainDialog中。
CWnd* m_pWndStatic = new CWnd;
m_pWndStatic->Create(_T("Something"), _T("Title"), WS_CHILD | WS_VISIBLE, CRect(x, y, xEnd, yEnd), this, idWnd);
CExtraDialog* dlg = new CExtraDialog;
dlg->Create(IDD_NEW_DIALOG, this); //Or second variable can be m_pWndStatic?
//dlg->SetWindowPos(m_pWndStatic, x, y, xEnd, yEnd, SWP_NOZORDER | SWP_NOACTIVATE);
//dlg->Invalidate();
//dlg->ShowWindow(SW_SHOW);
//m_pWndStatic->ShowWindow(SW_SHOW);在上面,我分享了一些我尝试过的信息。我希望创建一个CWnd,并将对话框放在CWnd中,但我觉得自己错过了一些东西,在网上找不到任何有用的东西。
编辑:我基本上是想把多个CWnds放到一个CDialog中,让CWnd从不同的类运行不同的功能。就像把乐高积木放在一起一样。
Edit2:我发现了一个类似的问题?我希望使它类似,但我只是不想要按钮,我希望其中两个被显示在一次。在主对话框中嵌入对话框并在MFC中按一下按钮切换对话框
发布于 2017-12-07 20:42:10
我一直被困在如何在MainDialog中放置它。
至少,删除WS_POPUP、WS_CAPTION和WS_SYSMENU样式。添加WS_CHILD样式。
强烈建议添加WS_EX_CONTROLPARENT扩展样式,以允许键盘导航进入和退出嵌入式对话框。
例如,在父对话框的OnInitDialog()中,可以添加:
// Note: Create member variable CExtraDialog, so there is no need for dynamic allocation!
m_extraDlg.Create( IDD_NEW_DIALOG, this );
// Adjust styles. 1st parameter removes, 2nd adds.
m_extraDlg.ModifyStyle( WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME, WS_CHILD );
// Adjust extended styles. 1st parameter removes, 2nd adds.
m_extraDlg.ModifyStyleEx( WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE, WS_EX_CONTROLPARENT );
// As we have changed the frame, we let Windows recalculate the non-client area
// by passing the SWP_FRAMECHANGED flag to SetWindowPos().
m_extraDlg.SetWindowPos( nullptr, 0, 0, 0, 0, SWP_FRAMECHANGED |
SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE );我希望创建一个CWnd并将对话框放在CWnd中
我建议始终使用CDialog-derived类作为嵌入对话框的父级。这确保了与Windows对话框管理器在标准键盘导航等功能上的最佳兼容性。你将与系统合作,而不是对抗它。
更多可阅读的内容:
https://stackoverflow.com/questions/47700584
复制相似问题