解决方案 »

  1.   

    当你需要启动MFC窗口的时候,调用api函数shellexcuteEx打开
      

  2.   

    不是这样的,是要BHO支持mfc,他自行创建了对话框,不是访问mfc程序。
    这里我打算在浏览器文档加载完毕后,在创建Dialog,但是这里有问题,有谁能解释一下。
    void STDMETHODCALLTYPE CMrhan::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL)  
    {  
    // Retrieve the top-level window from the site.  
    HWND hwnd;  
    HRESULT hr = m_spWebBrowser->get_HWND((LONG_PTR*)&hwnd);  
    if (SUCCEEDED(hr))  
    {  
    // Output a message box when page is loaded.  
    MessageBox(hwnd, L"Hello World!", L"BHO", MB_OK);  
    CreateDlg();
    }  
    }  void CMrhan::CreateDlg()
    {
    MessageBox(NULL, L"11111", L"BHO", MB_OK);   if (m_hwndDlg == 0)
    {
    HINSTANCE hInst = GetModuleHandle(NULL);
    m_hwndDlg = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
    if (m_hwndDlg)
    {
    MessageBox(NULL, L"Create Error", L"BHO", MB_OK);
    }
    else
    MessageBox(NULL, L"Create Success", L"BHO", MB_OK);  
    ShowWindow(m_hwndDlg, SW_SHOW);
    }
    }
    打印Create Error,但是感觉没哪有问题啊。
    INT_PTR CALLBACK CMrhan::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    switch(uMsg)   
    {   
    case WM_INITDIALOG:
    return (INT_PTR)TRUE;
    case WM_COMMAND: 
    if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
    {
    m_pMrhan->DestroyDlg(); 
    return (INT_PTR)TRUE;
    }
    break;
    case WM_CLOSE:  
    m_pMrhan->DestroyDlg();  
    return (INT_PTR)TRUE;  
    }   
    return (INT_PTR)FALSE;
    }
      

  3.   

    好了,这个问题解决了。程序上没问题,是我自己在资源中添加对话框时弄错了。总算搞定了,也算是bho和mfc结合的入门吧!
    结贴,虽然上面的朋友说的不对,但是还是表示支持!