在webbrowser,点击第一页的某个链接,新建第二页并打开链接,但是没有打开所有的frame(只打开第一个frame),不知是为什么?extern IDispatch** NewWindowDispatch3;
extern LONG_PTR RunCreateWindowProc;
void _stdcall WebBrowser::NewWindow2( IDispatch **ppDisp, VARIANT_BOOL* &Cancel)
{
NewWindowDispatch3 = ppDisp;
CallWindowProc( (WNDPROC)RunCreateWindowProc, NULL, WM_Y_OPEN_NW2, 0, 0);
*Cancel = VARIANT_FALSE;
}LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
case WM_CREATE:
   RunCreateWindowProc = ( LONG_PTR)WndProc;
   NewWindowDispatch3 = 0x0;
                                           break;
                 case WM_Y_OPEN_NW2:
                   openNewWindow2( "Sub Parts");
                   break;}
         return 0;
}
void openNewWindow2( string Description)
{
WebForm->openDefaultWeb("about:blank");
WebForm->getBrowser()->GetWebBrowser2()->put_RegisterAsBrowser( VARIANT_TRUE);
LPDISPATCH disp = NULL;
  HRESULT hr = WebForm->getBrowser()->GetWebBrowser2()->get_Application( &disp);
if( SUCCEEDED(hr))
{
  *NewWindowDispatch3 = disp;
}
}另外,如果使用下面的代码第一次成功新建了一个IE窗口,并导向了链接。(它弹出一个提示,匆忙之中按了确定键)之后再也不能新建IE窗口,一闪就退,并导向原来窗口的最后一个frame来打开点击的链接?
void _stdcall WebBrowser::OnNewWindow3(IDispatch **ppDisp,  VARIANT_BOOL *Cancel,
    DWORD dwFlags,
    BSTR bstrUrlContext,
    BSTR bstrUrl)
{
    IWebBrowser2 *wb = NULL;        CoCreateInstance(CLSID_InternetExplorer,
                                  NULL,
                                  CLSCTX_LOCAL_SERVER, //CLSCTX_ALL ,
                                  IID_IWebBrowser2,
                          (void**)&wb);
    wb->put_RegisterAsBrowser(VARIANT_TRUE);
    wb->put_Visible(VARIANT_FALSE);
    wb->get_Application(ppDisp);
}

解决方案 »

  1.   

    先别着急加OnNewWindow3之类的代码,你就简单的使用Navigate到你的网页,看看能否正常显示(一般都会正常显示)
    其后,再添加你的控制代码
      

  2.   

    Navigate完全正常,其它都调通了,就是这点,不知道是Webbrowser继承后,继承的方法有误,还是其它。另外,今天内网有点问题,但是,void _stdcall WebBrowser::OnNewWindow3(IDispatch **ppDisp,  VARIANT_BOOL *Cancel,
        DWORD dwFlags,
        BSTR bstrUrlContext,
        BSTR bstrUrl)
    {
        IWebBrowser2 *wb = NULL;        CoCreateInstance(CLSID_InternetExplorer,
                                      NULL,
                                      CLSCTX_LOCAL_SERVER, //CLSCTX_ALL ,
                                      IID_IWebBrowser2,
                              (void**)&wb);
        wb->put_RegisterAsBrowser(VARIANT_TRUE);
        wb->put_Visible(VARIANT_FALSE);
        wb->get_Application(ppDisp);
    }
    这一段奇迹般的好了,可以正常载入弹出页面。就是用webbrowser还是不行
      

  3.   

    https://bbs.csdn.net/topics/651  看15#
      

  4.   

    不是这个意思,并不是用第一个frame里的链接在第二个frame里打开页面。
    在webbrowser里新建一页,然后打开一个页面,这个页面包括多个frame. 这个新建页的启动是其它页面的一个链接。
    错误的结果是:显示一个标题头的frame,然后,不知道是中断还是不响应,就是不显示另外的frame.
      

  5.   

    捕捉 NavigateError 异常, 看看是否有页面加载错误?
      

  6.   

    OnNewWindow里,不需要你 
            CoCreateInstance(CLSID_InternetExplorer,。
    你把ppDisp读到的数据就是一个CLSID_InternetExplorer
      

  7.   

    我试试加个NavigateError, 不过用的是API没现成代码,哎!
    新建弹出窗口是因为想通过弹出窗口的页面获得url, 先隐藏这个弹出窗口,get url, 然后关掉隐藏窗口。但是有时能用,有时就一闪即灭。也不知道webbrowser是否有缺陷。在newwindow里不加任何代码,关键新建窗口不出现。ie也并没有设置对这个网站的弹出窗口的拦截
      

  8.   

    https://blog.csdn.net/norsd/article/details/2921389
      

  9.   

    不要用IE,不要用IE,不要用IE,不要用IE
    重要的事说三遍!不要用IE