通过CREATEWINDOW创建一个窗口,并显示一个网页,网页关闭了,窗口却关不了,各位有什么好办法吗 HWND hWnd=CreateWindow(szClassName,pszUrl,WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU ,
CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,g_hInstance,NULL);
CComQIPtr<IWebBrowser2> spWebBrowser;

//窗口居中开始
RECT   rcDlg; 
int   cxDlg,cyDlg; 
::GetWindowRect(hWnd,&rcDlg); 
cxDlg=rcDlg.right-rcDlg.left; 
cyDlg=rcDlg.bottom-rcDlg.top; 
SetWindowPos(hWnd,HWND_TOP,GetSystemMetrics(SM_CXSCREEN)/2-cxDlg/2,GetSystemMetrics(SM_CYSCREEN)/2-cyDlg/2,0,0,SWP_NOSIZE);
//窗口居中结束 CAxWindow axWindow;
RECT rc;
GetClientRect(hWnd, &rc);
axWindow.Create(hWnd, rc, 0,WS_CHILD |WS_VISIBLE);
axWindow.CreateControl(OLESTR("shell.Explorer.2"));
axWindow.QueryControl(&spWebBrowser); 
CComVariant varUrl(pszUrl);
spWebBrowser->Navigate2(&varUrl,0,0,0,0);

  ShowWindow(hWnd,SW_SHOW);
UpdateWindow(hWnd);
axWindow.Detach();

解决方案 »

  1.   

    BOOL RegisterWindowClass()
    {
    WNDCLASS wc = {0};
    wc.style=CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc=(WNDPROC)WndProc;
    wc.hInstance=g_hInstance;
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName=szClassName;
    return !RegisterClass(&wc);
    }
      

  2.   

    在哪里DestroyWindow里,我已经在回调函数里调用了
    LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    switch(message)
    {
    case WM_CLOSE:
     
    DestroyWindow(hWnd);
    break;
    case WM_QUIT:
     
    break;
     
    default:
     
    return (int)DefWindowProc(hWnd,message,wParam,lParam);
    }
    return 0;
    }
      

  3.   

    什么叫网页关闭了窗口关不了
    网页怎么关的?
    如果你能控制所谓网页开关那同时给窗口发个WM_CLOSE消息不就好了
      

  4.   

    网页是通过JAVASCRIPT关的呀
      

  5.   

    window.parent.close();呀,就是关不了主窗口
      

  6.   

    试试看在OnBeforeNavigate2里拦一下
    如果发现网页关了就把窗口也关掉
      

  7.   

     我是在DLL中调用的,动态创建窗口。
      

  8.   

    窗口过程是这个
    LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    switch(message)
    {
    case WM_CLOSE:

    DestroyWindow(hWnd);
    break;
    default:

    return (int)DefWindowProc(hWnd,message,wParam,lParam);
    }
    return 0;
    }
      

  9.   

    已找到解决方案,在创建窗口时,监控窗口事件即可。//监控窗口事件开始
    MSG   Msg; 
          
    while( GetMessage(&Msg,NULL,0,0)){     
                  if(Msg.message==WM_QUIT)     
                  {     
      
      DestroyWindow(hWnd);
                  //        MessageBox(NULL,_T("收到WM_QUIT,即将跳出消息循环"),_T("注意了"),MB_OK);     
                          break;     
                  }  
      if(Msg.message==WM_CLOSE){
      DestroyWindow(hWnd);
    //   MessageBox(NULL,_T("收到WM_CLOSE,即将跳出消息循环"),_T("注意了"),MB_OK);   
      break;
      }
                  TranslateMessage(&Msg);     
                  DispatchMessage(&Msg);     
          }  
    return;
        //结束