如何在页面加载之前隐藏 CDHTMLDialog?

Posted

技术标签:

【中文标题】如何在页面加载之前隐藏 CDHTMLDialog?【英文标题】:How to make CDHTMLDialog hidden until the page is loaded? 【发布时间】:2010-12-23 08:37:59 【问题描述】:

调用 DoModal 方法后,对话框将立即显示。但我需要让它在页面加载之前不可见。这可能吗?

谢谢 xx

【问题讨论】:

【参考方案1】:

你好,你可以在开始时隐藏它

OnInitDialog()
   DWORD dwStyle = GetWindowLong(GetSafeHwnd(), GWL_STYLE);
   dwStyle -= WS_VISIBLE;
   SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle);

然后在OnNavigateComplete 中使其可见。 但是,如果您的页面加载缓慢,则看起来您的应用挂断了

【讨论】:

谢谢,它有效。但我仍然可以看到开始时显示的对话框然后消失了。是否可以在启动之前使其不可见? @x_x 你使用模态对话框还是非模态对话框? 我使用 CDhtmlDialog 作为主窗口。我认为它可能是模态的,因为我确实调用了 DoModal 方法【参考方案2】:
//CYourDialog.cpp

void CYourDialog::OnWindowPosChanging(WINDOWPOS* lpwndpos)

     //allow to hide dialog at the startup of dialog,
     //delay the show of dialog until m_bVisible is set
     if(!m_bVisible)
     
         lpwndpos->flags &= ~SWP_SHOWWINDOW;
     

     CDialog::OnWindowPosChanging(lpwndpos);


//CYourHtmlView.cpp

void CYourHtmlView::OnDocumentComplete()

    m_pYourDlg->m_bVisible=TRUE;
    m_pYourDlg->ShowWindow(SW_SHOW);

【讨论】:

【参考方案3】:
BOOL CYourDialog::OnInitDialog()

    DWORD dwStyle = GetWindowLong(GetSafeHwnd(), GWL_STYLE);
    dwStyle -= WS_VISIBLE;
    SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle);
    Invalidate();
    CDHtmlDialog::OnInitDialog();
...
    Navigate(_T("www.google.com"));
    return TRUE;  // return TRUE  unless you set the focus to a control


void CYourDialog::OnNavigateComplete(LPDISPATCH pDisp, LPCTSTR szUrl)
   
    DWORD dwStyle = GetWindowLong(GetSafeHwnd(), GWL_STYLE);
    dwStyle += WS_VISIBLE;
    SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle);   
    Invalidate();

【讨论】:

以上是关于如何在页面加载之前隐藏 CDHTMLDialog?的主要内容,如果未能解决你的问题,请参考以下文章

如何在页面加载之前隐藏可切换的 p:panel?

CDHtmlDialog加壳HTML5页面跳转错误解决(原)

如何在CDHtmlDialog中引用html资源的方法

如何强制更新隐藏窗口?

一个 CDHtmlDialog 派生类 可不可以不绑定某一个html, 而动态的指定要显示在上面的html资源?

CDHTMLDIALOG中对input type=file的操作