如何使用CHtmlView动态显示本地Html文件,并实现利用CHtmlView给Html文件中传递参数?

yongai1 2008-06-13 02:54:41
我想使用CHtmlView动态显示本地Html文件,并实现利用CHtmlView给Html文件中传递参数,怎么实现呢?高手们指点指点,谢谢了。
...全文
789 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
yongai1 2008-06-27
  • 打赏
  • 举报
回复
谢谢大家的帮忙,只是我还是不能够解决在VC访问网页上的参数的问题,如果大家有什么好的建议,继续给予指导,还会加分给各位,谢谢。
yongai1 2008-06-26
  • 打赏
  • 举报
回复
谢谢,我自己再看看吧。
_microsoft 2008-06-25
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 yongai1 的回复:]
能不能再说明白点,不是很理解。谢谢。或者你可不可以给我一个实例参考一下。引用 28 楼 _microsoft 的回复:
用这个CWebBrowserHelp,在界面上添加一个ActiveX控件IDC_EXPLORER_HELP
DDX_Control(pDX, IDC_EXPLORER_HELP, m_WebBrowser);

char Direc[MAX_PATH];
::GetModuleFileName( NULL, Direc, MAX_PATH );
char* pCh = NULL ;
pCh = strrchr(Direc,'\\');
if( pCh != NULL)
*pCh = '\0';
CString s…
[/Quote]
给你的就是从我的代码里面摘出来的。如果你只需要显示某个html的话这样是比较简单的了。在对话框上面点右键,就看见添加ActiveX控件的菜单了。
yongai1 2008-06-25
  • 打赏
  • 举报
回复
你给的这种方法是不是有问题?请进一步指教。[Quote=引用 19 楼 skewin 的回复:]
char szFilePath[256];
GetModuleFileName(NULL , szFilePath,sizeof(szFilePath));
CString strValue;
strValue.Format("file://%s\\%s.html?para1=%d¶2=%d"),szFilePath,strFileName,x,y);
//strFileName,x,y由程序控制,你想输入啥就输入什么
Navigate(strValue);
[/Quote]
yongai1 2008-06-25
  • 打赏
  • 举报
回复
哪位知道哪里有具体介绍CDHtmlDialog类的使用的吗?帮忙介绍一下,感激不尽。
yongai1 2008-06-24
  • 打赏
  • 举报
回复
能不能再说明白点,不是很理解。谢谢。或者你可不可以给我一个实例参考一下。[Quote=引用 28 楼 _microsoft 的回复:]
用这个CWebBrowserHelp,在界面上添加一个ActiveX控件IDC_EXPLORER_HELP
DDX_Control(pDX, IDC_EXPLORER_HELP, m_WebBrowser);

char Direc[MAX_PATH];
::GetModuleFileName( NULL, Direc, MAX_PATH );
char* pCh = NULL ;
pCh = strrchr(Direc,'\\');
if( pCh != NULL)
*pCh = '\0';
CString strHelpFilePath;
strFileName = "\\"+strFileName+".htm";
strHelpFilePath.Format("%s\\document",Direc)…
[/Quote]
_microsoft 2008-06-24
  • 打赏
  • 举报
回复
用这个CWebBrowserHelp,在界面上添加一个ActiveX控件IDC_EXPLORER_HELP
DDX_Control(pDX, IDC_EXPLORER_HELP, m_WebBrowser);

char Direc[MAX_PATH];
::GetModuleFileName( NULL, Direc, MAX_PATH );
char* pCh = NULL ;
pCh = strrchr(Direc,'\\');
if( pCh != NULL)
*pCh = '\0';
CString strHelpFilePath;
strFileName = "\\"+strFileName+".htm";
strHelpFilePath.Format("%s\\document",Direc);
strHelpFilePath = strHelpFilePath+strFileName;
m_WebBrowser.Navigate(strHelpFilePath,NULL,NULL,NULL,NULL);
我的html是放在工作目录下面的\document里面的
yongai1 2008-06-23
  • 打赏
  • 举报
回复
谢谢楼上的,可是我的是VC6.0,里面没有包含<atlsafe.h> 这个头文件。
zwvista 2008-06-20
  • 打赏
  • 举报
回复
class CHtmlViewEx : public CHtmlView
{
DECLARE_DYNCREATE(CHtmlViewEx)

protected:
CHtmlViewEx(); // protected constructor used by dynamic creation
virtual ~CHtmlViewEx();

public:
void SetHTML(LPCTSTR lpszHtml);

protected:
CString m_strHtml;

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void OnDocumentComplete(LPCTSTR lpszURL);
HRESULT SetHTML();

DECLARE_MESSAGE_MAP()
};


// HtmlViewEx.cpp : implementation file
//

#include "stdafx.h"
#include "HtmlViewEx.h"
#include <atlsafe.h>


// CHtmlViewEx

IMPLEMENT_DYNCREATE(CHtmlViewEx, CHtmlView)

CHtmlViewEx::CHtmlViewEx()
{

}

CHtmlViewEx::~CHtmlViewEx()
{
}

void CHtmlViewEx::DoDataExchange(CDataExchange* pDX)
{
CHtmlView::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CHtmlViewEx, CHtmlView)
END_MESSAGE_MAP()

// useful macro for checking HRESULTs
#define HRCHECK(x) hr = x; if (!SUCCEEDED(hr)) { \
TRACE(_T("hr=%p\n"),hr);\
return hr;\
}

void CHtmlViewEx::SetHTML(LPCTSTR lpszHtml)
{
m_strHtml = lpszHtml;
Navigate(_T("about:blank"));
}

HRESULT CHtmlViewEx::SetHTML()
{
HRESULT hr;

// Get document object
CComQIPtr<IHTMLDocument2> doc = GetHtmlDocument();

// Create string as one-element BSTR safe array for IHTMLDocument2::write.
CComSafeArray<VARIANT> sar;
sar.Create(1,0);
sar[0] = CComBSTR(m_strHtml);

// open doc and write
LPDISPATCH lpdRet;
HRCHECK(doc->open(CComBSTR("text/html"),
CComVariant(CComBSTR("_self")),
CComVariant(CComBSTR("")),
CComVariant((bool)1),
&lpdRet));

HRCHECK(doc->write(sar)); // write contents to doc
HRCHECK(doc->close()); // close
lpdRet->Release(); // release IDispatch returned

return S_OK;
}

// CHtmlViewEx message handlers

void CHtmlViewEx::OnDocumentComplete( LPCTSTR lpszURL )
{
CHtmlView::OnDocumentComplete(lpszURL);
// The document is not complete until all of its data has been retrieved
if(GetReadyState() != READYSTATE_COMPLETE) return;
if(GetLocationURL() == _T("about:blank"))
SetHTML();
}
yongai1 2008-06-20
  • 打赏
  • 举报
回复
不过还是很感谢楼上的,我就重新装个软件试试,解决完问题我就结贴了。谢谢大家的帮忙。
yongai1 2008-06-19
  • 打赏
  • 举报
回复
可我用的是VC6.0,没有CDHtmlDialog这个类。
sam88888 2008-06-18
  • 打赏
  • 举报
回复
yongai1,

这里有个很好的解说关于用VC浏览html

http://www.codeproject.com/KB/MFC/HtmlSkinCDHtmlDialog.aspx
yongai1 2008-06-18
  • 打赏
  • 举报
回复
好吧,假设我现在有一个Html文件,我要通过VC这个软件来浏览它。那怎么实现呢?我不想用c:\winnt\system32\shdo.html就像这样子的目录。
eduyu 2008-06-17
  • 打赏
  • 举报
回复
计算机操作的都是绝对路径,所谓的相对是相对于某个参照物,最后由比如系统依照参照物换算成绝对路径。
所以空谈相对路径这个概念好像没有意义。不如把问题摆出来。

>>我们也可以直接把html文件的内容直接写入VC中实现页面的显示也可以的
不谈好坏,仅从实现这个角度而言,是可以做到的,思路就是导航到about:blank,而后在这个空页面上利用document.write(...)写入想要的html。c++的代码大致如下:

	CComVariant ve;
spBrowser2->Navigate2(&CComVariant(_T("about:blank")),&ve, &ve, &ve, &ve);
CComPtr<IDispatch> spDocDisp;
spBrowser2->get_Document(&spDocDisp);
ATLASSERT(spDocDisp!=NULL);
CComQIPtr<IHTMLDocument2> spDoc2=spDocDisp;
CComVariant v(_T("<p>...</p>"));
CComSafeArray sa;
sa.CreateOneDim(VT_VARIANT,1,(void*)&v);
spDoc2->write(sa.parray);

jameshooo 2008-06-17
  • 打赏
  • 举报
回复
DOM,顾名思义,就是把文本流式的文档转换成树状可导航的对象集合的一种模型,就像网页中的脚本访问网页元素就必须通过DOM来操作一样,直接操纵文本流是一件痛苦的事情。

比如,定位一个元素有很多种方式:
document.all.someid.style.display='block' 等效于在文档中获得所有元素集合,在集合中查找ID为someid的元素,获取元素的样式,设置样式中display为block
document.getElementById('someid').style.display='block' 效果与上一句相同,但是获得元素的方式不一样,直接从文档中查找第一个ID为someid的元素
document.getElementsByTagName('div')[1] 从文档中获得所有标签为DIV的元素,取其中的第二个元素

如果使用了DOM,则不存在传递参数的问题,因为网页打开后,程序可以任意修改DOM的内容并实时反映到浏览器窗口中
yongai1 2008-06-17
  • 打赏
  • 举报
回复
高手呢,上面的几位怎么也不说话了?自己顶起来。
yongai1 2008-06-17
  • 打赏
  • 举报
回复

strValue.Format("file://%s\\%s.html?para1=%d¶2=%d"),szFilePath,strFileName,x,y);
//strFileName,x,y由程序控制,你想输入啥就输入什么
是不是少了一个括号?
skewin 2008-06-17
  • 打赏
  • 举报
回复
char szFilePath[256];
GetModuleFileName(NULL , szFilePath,sizeof(szFilePath));
CString strValue;
strValue.Format("file://%s\\%s.html?para1=%d¶2=%d"),szFilePath,strFileName,x,y);
//strFileName,x,y由程序控制,你想输入啥就输入什么
Navigate(strValue);
skewin 2008-06-17
  • 打赏
  • 举报
回复
char szFileName[256];
GetModuleFileName(NULL , szFileName ,sizeof(szFileName ));
CString strValue;
strValue.Format("file://%s\\abc.html?para1=%d¶2=%d"),szFileName ,x,y); //x,y由程序控制,你想输入啥就输入什么
Navigate(strValue);
yongai1 2008-06-17
  • 打赏
  • 举报
回复
能否给一个小小的示例说明之?谢谢
[Quote=引用 10 楼 zys85 的回复:]
你可以获取到当前exe运行的路径

C/C++ code char FileName[768];
GetModuleFileName(NULL , FileName ,768);


所谓相对路径也就是相对于此,然后你对获得到的exe进行修改,加上相对路径,就是绝对路径
[/Quote]
加载更多回复(14)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧