在WTL自带Sample TabBrowser BrowserView.h line147:hRet = spHost->put_DocHostFlags(DOCHOSTUIFLAG_NO3DBORDER | _DOCHOSTUIFLAG_THEME|DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE);
实现表单自动完成,在IE6环境下正常使用,在IE7以上环境下功能失效,附加到调试器或者开Application verify程序崩溃
崩溃在::DispatchMessage(&m_msg); message=0x8002
堆栈信息:
0012f0e0 68d131c0 ieframe!CAutoComplete::_HideDropDown+0x26
0012f0f4 68d13436 ieframe!CAutoComplete::_EditWndProc+0x8f
0012f108 73e0f5ee ieframe!CAutoComplete::s_EditWndProc+0x1d
0012f16c 73e0f5a2 COMCTL32!CallNextSubclassProc+0x3d
0012f190 68bd00a0 COMCTL32!DefSubclassProc+0x46
0012f1bc 68bd002e ieframe!CSelectionModel::_WndProc+0x12b
0012f1d0 73e0f5ee ieframe!CSelectionModel::s_WndProc+0x27
0012f234 73e0f490 COMCTL32!CallNextSubclassProc+0x3d
0012f294 75b9c4e7 COMCTL32!MasterSubclassProc+0x54
0012f2c0 75b9c5e7 USER32!InternalCallWinProc+0x23
0012f338 75b95294 USER32!UserCallWinProcCheckWow+0x14b
0012f378 75b95582 USER32!SendMessageWorker+0x4d0
0012f398 68c01ea4 USER32!SendMessageW+0x7c
0012f3e0 68b5e927 ieframe!CIntelliForms::CAutoSuggest::HandleEvent+0x17a
0012f404 713af2c8 ieframe!CIntelliForms::CEventSink::Invoke+0xd8
0012f458 71147495 mshtml!CBase::InvokeDispatchExtraParam+0x104
0012f50c 7132911d mshtml!CBase::InvokeAttachEvents+0x1db
0012f5b4 71328f71 mshtml!CBase::InvokeEvent+0x1ab
0012f720 712ae9dc mshtml!CBase::FireEvent+0x110
0012f890 71148b7e mshtml!CElement::FireEvent+0x546
附最简单的HTML表单源码:<html>
<head>
<title>test</title>
</head>
<body>
        <form id="loginForm">
            <h3>请输入帐号</h3>
             <input title="请输入帐号" id="idInput" name="username" type="text" maxlength="50" value="" />
        </form>
</body>
</html>

解决方案 »

  1.   

    IE浏览器设置:
    Internet选项-》内容-》自动完成[设置]-》勾选表单复选框
    重启IE登录139邮箱
    也可以使用139邮箱的登录测试
    mail.10086.cn
      

  2.   

    自己解决了// 使页面得到焦点
    void CBrowserView::SetFocusToHTML()
    {
        CComPtr<IWebBrowser2> spWebBrowser;
        HRESULT hRet = QueryControl(IID_IWebBrowser2, (void**)&spWebBrowser);
        if ( SUCCEEDED(hRet) && spWebBrowser != NULL )
        {
            CComPtr<IDispatch> spDocument;
            hRet = spWebBrowser->get_Document(&spDocument);
            if ( SUCCEEDED(hRet) && spDocument != NULL )
            {
    CComQIPtr<IHTMLDocument4> spHtmlDoc = spDocument;
    if(spHtmlDoc != NULL)
    {
    spHtmlDoc->focus();
    // CComPtr<IHTMLWindow4> spParentWindow;
    // hr = spHtmlDoc->get_parentWindow(&spParentWindow);
    // if( spParentWindow != NULL)
    // spParentWindow->focus();
    }
               /* CComQIPtr<IHTMLDocument2> spHtmlDoc = spDocument;
                if ( spHtmlDoc != NULL )
                {
                    CComPtr<IHTMLWindow2> spParentWindow;
                    hRet = spHtmlDoc->get_parentWindow(&spParentWindow);
                    if ( spParentWindow != NULL )
                    {
                        spParentWindow->focus();
                    }
                }*/
            }
        }
    }