以下为html代码:
<a href="mailto:[email protected]">write to me </a><br/>
<BUTTON STYLE="WIDTH:100" ID="ButtonOK">确定</BUTTON><BR>
<BUTTON STYLE="WIDTH:100" ID="ButtonCancel">取消</BUTTON>-------------------------------------------------------------------
---------------------------------------------------
以下为ButtonOK的响应代码:
HRESULT CtestHtmlHrefDlg::OnButtonOK(IHTMLElement* /*pElement*/)
{
//OnOK();
MessageBox(_T("adfsd"));
return S_OK;
}没有点击mailto超链接前,点击ButtonOK按钮可以正常进入响应代码,但是在点击mailto超链接后,ButtonOK按钮无法进入响应代码。
请问各位高手是什么原因?????

解决方案 »

  1.   

    顶一下,vs2003和vs2005确实不可以
      

  2.   

    跟踪一下连接点是否已经断开了,或者重载OnBeforeNavigate看看点击发邮件按钮时是否触发了这个事件
      

  3.   

    void CDHtmlDialog::OnBeforeNavigate(LPDISPATCH pDisp, LPCTSTR szUrl)
    {
    szUrl; // unused if (pDisp != m_pBrowserApp)
    return;
    DisconnectDHtmlEvents();
    m_spHtmlDoc = NULL;
    m_strCurrentUrl.Empty();
    }谢谢jameshooo的点拨,我看了一下这个事件的响应函数,该函数里面调用了DisconnectDHtmlEvents()断掉了事件的响应。其他的超链接也会调用这个函数,但是在调用完了以后紧跟着还会有一个CDHtmlDialog::OnNavigateComplete(LPDISPATCH pDisp, LPCTSTR szUrl)事件响应,该函数代码中调用了ConnectDHtmlEvents(pdispDoc)又把事件的响应恢复了。唯独这个mailto超链接点击后只有OnBeforeNavigate事件响应而没有OnNavigateComplete响应。导致所有的事件都无法正常响应。这是什么原因?是MFC故意这么设计的吗?他是出于什么理由?
      

  4.   

    我认为这是CDHtmlDialog的BUG。
    尝试绕开这个BUG,重载OnBeforeNavigate,通过一定条件判断是否要断开事件
      

  5.   

    嗯,测试了一下,确实有这个问题.
    向Microsoft报告这个Bug吧..
      

  6.   

    http://lab.msdn.microsoft.com/productfeedback/Default.aspx