高分!!我想在一个对话框里显示HTML页面 能做到么?或者哪里有控件也行 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在vc的对话框编辑器中使用菜单Project->Add to Project->Components and Controls,然后选择Registered ActiveX Controls,再选择Microsoft Web 浏览器即可。 那个CWebBrowser类具体怎么用啊,能告诉我么?谢谢啦 奇怪,我在MSDN里怎么找不到这个类的用法?? 先加入Microsoft Web浏览器控件然后m_webBrowse.Navigate("www.163.net",FALSE,FALSE,FALSE,FALSE);就可以啦!!! 对于由插入的activex而生成的类,在msdn中是找不到的,不过其中的方法名字简明易懂. Web Browser控件,很简单的,Open方法即可 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;} #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查看。 opencv中 用摄像头捕捉目标 已经获得目标的中心坐标后怎么描轨迹 图像处理高手来看一下我公司的项目是否可行,技术上能否实现 在WinCE下使用ifstream打开文件出错 树形控件内存不足的问题 VC++ 中的ToolTip显示难题? 对话框资源如何转移 对话框动态显示多幅图像怎么做比较好? 急问:怎么把已经存在的C++对象转化为com组件 哪里有INSIDE OLE的电子书可以下载? 在ATL工程中使用ADO访问数据库的两个问题,大家帮帮忙,急~~!! 100分求助InstallShield5.1如何设置一个安装程序在操作系统中的环境变量? 在VC6.0中如何使用断点功能??在那?
谢谢啦
然后m_webBrowse.Navigate("www.163.net",FALSE,FALSE,FALSE,FALSE);
就可以啦!!!
{
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;
}
#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查看。