能做到么?或者哪里有控件也行

解决方案 »

  1.   

    在vc的对话框编辑器中使用菜单Project->Add to Project->Components and Controls,然后选择Registered ActiveX Controls,再选择Microsoft Web 浏览器即可。
      

  2.   

    那个CWebBrowser类具体怎么用啊,能告诉我么?
    谢谢啦
      

  3.   

    奇怪,我在MSDN里怎么找不到这个类的用法??
      

  4.   

    先加入Microsoft Web浏览器控件
    然后m_webBrowse.Navigate("www.163.net",FALSE,FALSE,FALSE,FALSE);
    就可以啦!!!
      

  5.   

    对于由插入的activex而生成的类,在msdn中是找不到的,不过其中的方法名字简明易懂.
      

  6.   

    Web Browser控件,很简单的,Open方法即可
      

  7.   

    BOOL CMainFrame::ShowHtml()
    {
    HINSTANCE  hinstMSHTML = LoadLibrary
       (TEXT("MSHTML.DLL")); //装载动态连接库
    WCHAR url[]=L"res://xxx.exe/myhtml.html";
     //此地址名称可直接用html文件名代替
    TCHAR options[] = _T("dialogWidth:500;DialogHeight:400;center:1");
      if(hinstMSHTML)//装载动态连接库成功
      {
         SHOWHTMLDIALOGFN *pfnShowHTMLDialog;     pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)
       GetProcAddress(hinstMSHTML,TEXT  ("ShowHTMLDialog"));     if(pfnShowHTMLDialog)
         {
         IMoniker *moniker=NULL;        //
         if( FAILED(CreateURLMoniker(NULL,
         (LPWSTR)url,&moniker ) ))
         {
            FreeLibrary(hinstMSHTML);
           return FALSE;
          }        //调用ShowHTMLDialog函数显示URL上的HTML文件
          pfnShowHTMLDialog((HWND)m_hWnd,moniker,NULL,options,NULL);      if(moniker!=NULL)
              moniker->Release();      //显示成功,返回TRUE
           return TRUE;     }
         else //GetProcessAddress失败
          return FALSE;   FreeLibrary(hinstMSHTML);
      }
      else //装载动态连接库失败
       return FALSE;
    }
      

  8.   

    #include <urlmon.h>
    #include <mshtmhst.h>
    #pragma comment(lib, "urlmon.lib")
    void ShowHtmlDlg(CString szResURL,VARIANT* VarIn,VARIANT* VarOut);void ShowHtmlDlg(CString szResURL,VARIANT* VarIn,VARIANT* VarOut)
    { TCHAR szURL[_MAX_PATH + 128];
    // now use the "res://" protocol to identify a dialog
    TCHAR szPath[_MAX_PATH]; // _MAX_PATH eqs 260
    strcpy(szPath,g_szAppPath);
             lstrcat(szPath,"xxxx.exe");//或dll    wsprintf(szURL, _T("res://%s/%s"), szPath, szResURL);// format the URL string
    // retrieve the handle of the mshtml.dll
            HINSTANCE g_hMSHTML=LoadLibrary("MSHTML.DLL");    if(g_hMSHTML!=NULL){
    g_pfnShowHTMLDialog=(SHOWHTMLDIALOGFN* )GetProcAddress(g_hMSHTML,"ShowHTMLDialog");
        }
    if(g_pfnShowHTMLDialog==NULL) {
     //SendHTTPByIE(szURL,NULL,NULL,0);
    ShellExecute(NULL,"Open",szURL,0, 0, SW_SHOWNORMAL);
     return;
    }
    // 128 is an idealy value, must be changed when programming autually
    int nLen = strlen(szURL);
    LPWSTR lpUnicodeURL = new WCHAR[nLen+1];
    // convert to Unicode
    ATLASSERT(MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,szURL,nLen+1,lpUnicodeURL,sizeof( WCHAR ) * (nLen)));
    // attempt to create the URL Moniker
    IMoniker *pIMoniker;
    ATLASSERT(SUCCEEDED(CreateURLMoniker(NULL,lpUnicodeURL,&pIMoniker)));
    // NOW, TRY TO DISPLAY THE DIALOG
    HRESULT h = g_pfnShowHTMLDialog(NULL,// NO window handle to pass
    pIMoniker, // the moniker interface's pointer
    VarIn, // argument to window.dialogArguments in HTML
    NULL, // optional auguments, see window.showModalDialog for detail
    VarOut // receive window.returnValue of HTML
    );
    // now the dialog is dismissed,
    // we will check the return value from HTML
    delete lpUnicodeURL;
    }
    int SendHTTPByIE(LPCSTR URL,LPCSTR headers,const BYTE *Post, DWORD postLength)
    {
     HRESULT hr;
     USES_CONVERSION;
             IWebBrowserApp* pWBApp = NULL; // Derived from IWebBrowser
             BSTR bstrURL = NULL, bstrHeaders = NULL;
             VARIANT vFlags = {0},
             vTargetFrameName = {0},
             vPostData = {0},
                vHeaders = {0};   
     if (FAILED(hr = CoInitialize(NULL)))
             {
                return false;
             }       
     if (FAILED(hr = CoCreateInstance(CLSID_InternetExplorer,
                NULL,
                CLSCTX_SERVER,
                IID_IWebBrowserApp,
                (LPVOID*)&pWBApp)))
             {
                goto Error;
             } 
     bstrURL = SysAllocString(T2OLE(URL));
             if (!bstrURL)
             {
                goto Error;
             }  
     if(headers!=NULL){
      bstrHeaders = SysAllocString(T2OLE(headers));
    if (!bstrHeaders)
    {
                goto Error;
         }    
     V_VT(&vHeaders) = VT_BSTR;
     V_BSTR(&vHeaders) = bstrHeaders;      
     }
     if(Post!=NULL){
      hr = GetPostData(&vPostData,(LPCTSTR)Post,postLength);
     }
             hr = pWBApp->Navigate(bstrURL, &vFlags,
                      &vTargetFrameName, &vPostData, &vHeaders);
             pWBApp->put_Visible(VARIANT_TRUE);  
        Error:
             if (bstrURL) SysFreeString(bstrURL);
             if (bstrHeaders) SysFreeString(bstrHeaders);
             if(Post!=NULL)VariantClear(&vPostData);
             if (pWBApp){
     pWBApp->Release();
     pWBApp=NULL;
     }
             CoUninitialize();
    return true;
    }
     HRESULT GetPostData(LPVARIANT pvPostData,LPCTSTR szPostData, DWORD postLength)
          {
             HRESULT hr;
             LPSAFEARRAY psa;
             
             LPSTR pPostData;  
     if (!pvPostData)
             {
                return E_POINTER;
             }  
     VariantInit(pvPostData); 
     psa = SafeArrayCreateVector(VT_UI1, 0, postLength);
             if (!psa)
             {
                return E_OUTOFMEMORY;
             } 
     hr = SafeArrayAccessData(psa, (LPVOID*)&pPostData);
             memcpy(pPostData, szPostData, postLength);
             hr = SafeArrayUnaccessData(psa);
             V_VT(pvPostData) = VT_ARRAY | VT_UI1; 
             V_ARRAY(pvPostData) = psa;
             return NOERROR;
          }    将网页作为HTML类型加入到项目资源中,GIF或者JPEG图片作为2110类型嵌入到资源中。
       并非任何时候都能获得g_pfnShowHTMLDialog函数指针,在我的IE BHO扩展项目采用DEBUG编译时能够正确显示对话框,然而采用Release却无法获得g_pfnShowHTMLDialog函数入口指针,该指针为NULL,这时候可以采用ShellExecute或者其它方法实现。
     当然也可以采用ShowHTMLDialogEx函数,这两个函数都是MSHTML.DLL的输出函数。可以使用ViewDependency查看。