Webbrowser新建页面只能显示一个frame.
在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);
}