MFC的ActiveX控件在Web中使用DoModal()显示对话框时,为非阻塞的,点击父窗体(IE窗口),弹出的新窗口都跑到后面去了,非常头痛!
而在调试模式下,弹出的对话框能正常阻塞父窗体,在不关闭的情况下,所有IE的操作都不允许!

解决方案 »

  1.   

    楼主在你的控件当中弹出对话框的时候 给对话框增加WS_EX_APPWINDOW属性 这样你的弹出对话框就会在任务栏上显示一个图标
    在非阻塞模式下 就算变到后面去 也可以通过点击任务栏图标重新获得焦点并返回屏幕前端。
    OnInitialdialog 函数里面:
    LONG Style = GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE);
    Style = Style | WS_EX_APPWINDOW;SetWindowLong( this->GetSafeHwnd(),GWL_EXSTYLE, Style );另外 可以考虑让你的窗口始终置顶显示 可能需要在对话框中很多地方都要加上SetWindowPos来实现 没有试验过。如果不采用上面的处理 还想让对话框显示在IE的上层 而且在IE中还可以操作 恐怕不太现实。
      

  2.   

    你好,感谢你的解答,其实可能你误解了一点,在弹出的对话框关闭前,我是不想IE中能操作任何东西(同步流程),其实一般应用程序中使用DoModal()是没问题的,不知为什么IE中不行!
      

  3.   

    试试CDialog dlg(CWnd::FromHandle(hWndIE));
    dlg.DoModal();
      

  4.   

    你好,已使用CDialog dlg(AfxGetMainWnd());还是老样子,不行!
      

  5.   

    窗口是和线程相关的,如果你的控件有自已的线程并且在其中创建军,那么你的模态窗口是不会对另一个线程起作用的,
    如果你用的是 MFC ActiveX控件,应该是有自已的线程的,
    当然这还要看 DoModal 是的调用都在哪个线程中!  
      

  6.   

    各位兄弟,经测试,我发现有一个特点,运行本地XXX.html网页文件,ACTIVEX控件一切正常,能显示模态和锁定父窗口不让操作,而AfxGetMainWnd()->GetWindowText证实是IE窗口的标题,所以应该不会存在线程问题。
    但把XXX.html网页文件挂在Web服务器上运行,使用http://localhost/之类访问时,网页中控件调用DoModal()弹出的对话框就不再是模态了,希望大家能指点下是怎么回事,相信这可以帮到其他正在开发WEB ACTIVEX的人!谢谢!
      

  7.   

    还有一点,我分别试过使用VC MFC和BCB的ActiveForm技术分别做过ActiveX控件,使用模态对话框时都出现这样的问题,应该是通病!
      

  8.   

    没有IIS 实在是没法测试 不过本地的没有问题的 用Domodal后是可以锁定浏览器窗口的。
      

  9.   

    IE7吗?
    每个tab都有自己的线程的,所以你的对话框可能阻塞不了当前tab
      

  10.   

    我想应该是tab的线程不同的原因!大家有什么好的解决方案?:)呵谢谢了