标题
    
    
        [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软件下载及使用技巧.
    但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
    验证问题说明申请入群原因即可.