用TCppWebBrowser控件显示内存中生成的网页

z1z2z3z4 2010-06-04 03:29:16
用TCppWebBrowser访问网络文件或本地文件没有问题,这些可简单地用Navigate方法打开文件。

现在问题是,要用TCppWebBrowser显示一些程序中动态生成的网页,而不是外部读入的文件。目前想到的解决办法是:

1、程序增加一个Web Server,动态生成网页的部分在Web Server中提供。流程是:
(1)TCppWebBrowser执行Navigate方法,提交一个请求到程序内置的Web Server。
(2)此Web Server动态生成需要的网页,返回给TCppWebBrowser。
(3)TCppWebBrowser显示返回的网页。

2、不用Web Server,直接在程序中动态生成需要的网页,即字符串,将此字符串传递给TCppWebBrowser显示出来。

如果用第二个办法,内存动态生成的网页如何传递到TCppWebBrowser显示出来?请给点提示,谢谢!
...全文
141 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
z1z2z3z4 2010-06-05
  • 打赏
  • 举报
回复
例子代码比较精悍,谢谢!

运行时发生错误,经乱试,问题在CrnSetHtmlContent函数的行:
::GlobalFree(hHTMLText);
禁用后可以运行。
ccrun.com 2010-06-04
  • 打赏
  • 举报
回复
刚才CSDN挂了,有些内容补充一下:
1. 要保证WebBrowser的初始化,所以在代码中有一句:Navigate(L"about:blank");
2. 取得IHTMLDocument2接口是最关键的。
ccrun.com 2010-06-04
  • 打赏
  • 举报
回复
toooooooo simple.
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
CppWebBrowser1->Navigate(L"about:blank");
}
//---------------------------------------------------------------------------
#include <mshtml.h>

BOOL __stdcall CrnSetHtmlContent(IHTMLDocument2 *spDoc, LPCTSTR lpText)
{
BOOL bResult(FALSE);

if (NULL == spDoc)
return bResult;

IStream *pStream;
IPersistStreamInit *psi;
int nLen = _tcslen(lpText);

HGLOBAL hHTMLText = ::GlobalAlloc(GPTR, nLen * sizeof(TCHAR) + 1);
if (NULL == hHTMLText)
return bResult;

::CopyMemory(hHTMLText, lpText, nLen * sizeof(TCHAR));
HRESULT hr = ::CreateStreamOnHGlobal(hHTMLText, true, &pStream);
if (SUCCEEDED(hr))
{
hr = spDoc->QueryInterface(IID_IPersistStreamInit, (void **)&psi);
if (SUCCEEDED(hr))
{
hr = psi->Load(pStream);

bResult = SUCCEEDED(hr);

psi->Release();
}
pStream->Release();
}
::GlobalFree(hHTMLText);

return bResult;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
IHTMLDocument2 *spDoc = NULL;

while (CppWebBrowser1->Busy)
Application->ProcessMessages();

HRESULT hr = CppWebBrowser1->Document->QueryInterface(
::IID_IHTMLDocument2, (void **)&spDoc);

if (!SUCCEEDED(hr)) return;

CrnSetHtmlContent(spDoc,
TEXT("<font color=red>测试</font><font color=green>abdafdsf好.</font>"));
}

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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