我现在想做的的是在,Win32窗口中调用WebBroser控件,由于本人对ATL不熟悉,对com也不太熟总之小白一个,用WTL框架创建Active也是昨天刚找到的方法。
在网上找到代码如下:LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
RECT rc;
    IWebBrowser2* iWebBrowser;
    VARIANT varMyURL;
static CAxWindow WinContainer;
LPOLESTR pszName=OLESTR("shell.Explorer.2");
GetClientRect(hWnd, &rc);
switch(message)
{
case WM_CREATE:
        WinContainer.Create(hWnd, rc, 0,WS_CHILD |WS_VISIBLE);
        WinContainer.CreateControl(pszName);
         WinContainer.QueryControl(__uuidof(IWebBrowser2),(void**)&iWebBrowser); 
        VariantInit(&varMyURL);
        varMyURL.vt = VT_BSTR; 
        varMyURL.bstrVal = SysAllocString(_T("http://www.baidu.com"));
        iWebBrowser-> Navigate2(&varMyURL,0,0,0,0);
        VariantClear(&varMyURL); 
        iWebBrowser-> Release(); 
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return (int)DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
static TCHAR szAppName[]=TEXT("WebBrowser");
static TCHAR szClassName[]=TEXT("WebBrowser");
HWND hWnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(hInstance, IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szClassName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("Error!"),szAppName,MB_ICONERROR);
return 0;
}
hWnd=CreateWindow(szClassName,szAppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,
0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
 
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
错误为运行到WM_CREATE消息就会崩溃,跟踪调试发现执行到 CreateControlEx 窗口句柄hWnd=0;百思不得其解。
希望大侠们指点,感激不尽..

解决方案 »

  1.   

    WinContainer.Create(hWnd, rc, 0,WS_CHILD |WS_VISIBLE);
    是否Create成功..自己单步跟踪,看怎么失败了
      

  2.   

    WinContainer.Create(hWnd, rc, 0,WS_CHILD |WS_VISIBLE);成功WinContainer.CreateControl(pszName);这句失败 F11跟踪到CreateControlEx 突然窗口句柄没值了然后崩溃..
      

  3.   

    用MFC的CHtmlView来作比较简单,大部分代码MFC已经帮你写了。
      

  4.   

    CAxWindow  wnd.Attach(m_hWnd);
    hr = wnd.CreateControlEx(IDR_URLDEFAULT,NULL,NULL,&m_punkCtrl); if (SUCCEEDED(hr))
    hr = wnd.SetExternalDispatch(static_cast<IFunExplorer*>(this));
    /* Get IWebBrowser2 for V-explorer bar to netvigate html*/
    if (SUCCEEDED(hr))
    {
    //hr = wnd.QueryControl(IID_IWebBrowser2, (void**)&m_pWebBrowser2);

    IServiceProviderPtr pServiceProvider = m_punkCtrl;
    if (m_pWebBrowser2)
    m_pWebBrowser2 = NULL;
    if (FAILED(pServiceProvider->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (void**)&m_pWebBrowser2)))
    return E_FAIL;


    BrowserEvents2::DispEventAdvise(m_pWebBrowser2);
    }

    return SUCCEEDED(hr) ? 0 : -1;
      

  5.   

    迟到的结贴。。 话说我要的win32 问题自己解决了。