标题
[vc/vc6/mfc] CDialog 派生类 DoModal() 后弹出的窗口会将其挡住的解决方法
clq
浏览(0) +
2008-07-23 10:44:32 发表
编辑
关键字:
[vc/vc6/mfc] CDialog 派生类 DoModal() 后弹出的窗口会将其挡住的解决方法
项目中的一个需求,在一个对话框的程序中要弹出 n 个非模式的独立窗口,结果发现这些弹出的窗口会将这个对话框挡住,折腾了很久都没办法解决,最后想起 delphi 中也有这样的类似问题,解决方法是弄一个不可见的窗口作为主窗口.结果一试还真解决了!
具体方法如下,弄一个普通的 dialog ,在其 OnInitDialog 初始化时将真正的主窗口非模式显示出来.
BOOL CMainDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//显示真正的主窗体
CServerAdminDlg * dlg = new CServerAdminDlg();
dlg->Create(IDD_SERVER_ADMIN_DIALOG);
dlg->ShowWindow(SW_SHOW);
SetTimer(1, 3, NULL);
return TRUE;
}
那个 SetTimer 是用来隐藏主窗体的,应该还有更好的办法,不过目前未知.
void CMainDlg::OnTimer(UINT nIDEvent)
{
//隐藏主窗体
AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);
CDialog::OnTimer(nIDEvent);
}
这时无论新建的窗口是从那里出来的都不会挡住别人了 :)
后记:
这个其实应该是 mfc 的 bug ,我用 sdk 直接建立窗口是没有这种现象的.
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.