用TCppWebServer做聊天记录显示的问题
现在正在做一个即时通讯软件,就是类似于QQ,Skype,阿里旺旺一样的东东。用于显示接收或者发送的消息我开始是用的TRichEdit控件显示的,但有时候显示是正常的有时候又是乱的,客户反映很强烈。研究了一下Skype和阿里旺旺的客户端,发现它们是用的一个叫做“Internet Explorer_Server”的控件(用Spy++查看的),所以也想做一个类似的,在网上搜了一下,一直没弄明白“Internet Explorer_Server”到底是个什么东西。有人说可以用TCppWebServer控件来显示,用HTML标签来控制字体的大小及颜色。我在网上找了一个方法,可以直接修改TCppWebServer里面的内容,代码后面附上。
- C/C++ code
//更改TCppWebBrowser显示内容void __fastcall TForm1::SetHtml( TCppWebBrowser *WebBrowser,AnsiString Html ){ try { if (WebBrowser->Document == NULL) { return; } HGLOBAL hHTMLText = GlobalAlloc(GPTR, Html.Length() + 1); if (0 == hHTMLText) { ShowMessage( "GlobalAlloc Error" ); return; } CopyMemory(hHTMLText, Html.c_str(), Html.Length()); IStream *Stream = NULL; IPersistStreamInit *psi = NULL; try { OleCheck(CreateStreamOnHGlobal(hHTMLText, true, &Stream)); OleCheck(WebBrowser->Document->QueryInterface(__uuidof(IPersistStreamInit), (void **)&psi)); OleCheck(psi->InitNew()); OleCheck(psi->Load(Stream)); } catch (...) { delete Stream; delete psi; } delete psi; delete Stream; } catch (...) { }}这样做有几个问题存在:
1. TCppWebServer初始的时候,它的属性Document为空,每次初始的时候我都要调一次Navigate方法先打开一个网页,然后再置内容为空。有没有什么方法不调用Navigate方法而使Document不为空的。
2. 怎样在调用SetHtml方法后是TCppWebServer控件的左侧垂直滚动条自动滚动到最下面
3. 使用SetHtml方法有一个缺点就是每添加一次消息我都必须要保存前面所有已经显示的Html内容,然后再加上新的消息内容,再调用SetHtml更改整个页面的内容。有没有什么方法能直接在已经显示的内容后面加的方法,这样我就没必要每次都保存前面的消息内容。
4. Internet Explorer_Server究竟是什么,怎样用它做成类似于Skype,阿里旺旺那样的消息显示窗口?我估计QQ的也是这样做的,但是没用Spy++没抓到。
[解决办法]
Internet Explorer_Server就是ie浏览器的核心
[解决办法]
http://msdn.microsoft.com/en-us/library/aa752038(VS.85).aspx