玻璃小屋

全国人大第250次会议讨论并原则通过了人类历史上具有划时代意义的一部法律《中华人民共和国精神胜利法》

  VC知识库BLOG :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  176 随笔 :: 3 文章 :: 456 评论 :: 4 Trackbacks
<2005年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

News



喜欢红色有什么错吗? :)

留言簿(22)

随笔分类

随笔档案

文章分类

文章档案

相册

资源共享

搜索

最新评论

阅读排行榜

评论排行榜

/////////////////////////////////////////////////////////////////////////////
// CHtmlView operations

BOOL CHtmlView::GetSource(CString& refString)
{
    BOOL bRetVal = FALSE;
    CComPtr<IDispatch> spDisp = GetHtmlDocument();

    if (spDisp != NULL)
    {
        HGLOBAL hMemory;
        hMemory = GlobalAlloc(GMEM_MOVEABLE, 0);
        if (hMemory != NULL)
        {
            CComQIPtr<IPersistStreamInit> spPersistStream = spDisp;
            if (spPersistStream != NULL)
            {
                CComPtr<IStream> spStream;
                if (SUCCEEDED(CreateStreamOnHGlobal(hMemory, TRUE, &spStream)))
                {
                    spPersistStream->Save(spStream, FALSE);

                    LPCTSTR pstr = (LPCTSTR) GlobalLock(hMemory);
                    if (pstr != NULL)
                    {
                        // Stream is always ANSI, but CString
                        // assignment operator will convert implicitly.

                        bRetVal = TRUE;
                        TRY
                        {                        
                            refString = pstr;
                        }
                        CATCH_ALL(e)
                        {
                            bRetVal = FALSE;
                            DELETE_EXCEPTION(e);
                        }
                        END_CATCH_ALL

                        if(bRetVal == FALSE)
                            GlobalFree(hMemory);
                        else
                            GlobalUnlock(hMemory);
                    }
                }
            }
        }
    }
    
    return bRetVal;
}


向 IHTMLDocument2  写入 HTML 文本


int CChildView::HqResize(void)
{
 USES_CONVERSION;
 CComPtr<IHTMLDocument2> pDoc;

 CComPtr<IHTMLElementCollection> sphtmlAll;
 CComPtr<IHTMLScriptElement> spObject;
 CComPtr<IDispatch> spDisp;
 CComVariant varName;
 CComVariant varIndex;

 if(FAILED(m_wndHq.GetDocument(&pDoc)) || pDoc==NULL)
  return 0;

 CString strHtml="<html><head><title>网页行情</title></head>"
  "<body leftmargin=0 topmargin=0>"
  "<OBJECT  ID=KYT CODEBASE='http://www.sostock.com.cn/hq/webhq/webhq.cab#version=1,0,0,5'"
  "CLASSID='clsid:C952403E-C18D-4332-9F3D-0E1D7C486145'"
  "ALIGN='CENTER'"
  "width='%d'"
  "height='%d'>"
  "</OBJECT>"
  "<script language=javascript id=KYT1>"
  "window.focus();"
  "</script>"
  "</body>"
  "</html>";


 CRect rc;
 GetClientRect(&rc);

 CString strIn;
 strIn.Format(strHtml,rc.Width()-20,rc.Height()-15);


 CComQIPtr<IPersistStreamInit> spPersistStream(pDoc);

 if(spPersistStream==NULL)
  return 0;


 LPTSTR lpMem = (LPTSTR)::GlobalAlloc( GPTR,strIn.GetLength()+1);
 lstrcpy(lpMem,strIn.GetBuffer());


 CComPtr<IStream>spStream;
 CreateStreamOnHGlobal( lpMem, TRUE, &spStream );
 // 初始化后,装载显示
 spPersistStream->InitNew();
 spPersistStream->Load(spStream );

 return 0;
}

posted on 2005-06-23 16:07 玻璃小屋 阅读(11338) 评论(9)  编辑 收藏

评论

# re: 从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit) 2005-06-23 22:08 freedk
BLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBLBL

# re: 从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit) 2005-06-27 09:43 玻璃小屋

不小心踩了 小鸟的尾巴.... -_-

# re: 从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit) 2006-03-28 03:20 RM
写得不错。有用的代码。但请问不用MFC怎样实现HTML的写入?

# re: 从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit) 2007-06-14 12:01 zaboli
先打开一个 about:blank 空白页面才能得到 HtmlDocument


int CHotDlgNews::NewMsg(CString strMsg)
{
m_ocxMsg.Navigate(("about:blank"),NULL,NULL,NULL,NULL);

CComPtr<IDispatch> spDisp = m_ocxMsg.get_Document();

  if(spDisp != NULL)
{
CComQIPtr<IPersistStreamInit> spPersistStream(spDisp);
if (spPersistStream != NULL)
{
LPTSTR lpMem = (LPTSTR)::GlobalAlloc( GPTR,strMsg.GetLength()+1);
lstrcpy(lpMem,strMsg.GetBuffer());


CComPtr<IStream>spStream;
CreateStreamOnHGlobal( lpMem, TRUE, &spStream );
// 初始化后,装载显示
spPersistStream->InitNew();
spPersistStream->Load(spStream );


}
}


m_strSms=strMsg;
m_vMsgVector.push_back(strMsg);
UpdateData(FALSE);
ShowWindow(SW_SHOW);
this->SetFocus();

return 0;
}

# re: 从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit) 2007-08-17 14:55 hengxf
有没有通过的源代码。能发给我吗?我的email是hengxftt@yahoo.com.cn

# re: 从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit) 2007-08-23 16:51 玻璃小屋

今天用这个方法 向 IE 控件写入 HTML代码,可是在 win2000 pro ie 6 的机器上死活只显示 HTML 源代码,不出页面效果。。。。折腾了一天。。后来发现要把HTML代码写全他才认。。。
我只写了
<div>你好</div><br><div>你好</div> 他就不认识。。。
后来写成:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head><body><div>你好</div><br><div>你好</div></body></html>

他就认识了。。。晕~~ 好弱智。。。

# 从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit) [TrackBack] 2008-04-07 12:54 Redeom
从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit)
Redeom引用了该文章,地址:http://blog.csdn.net/redeom/archive/2008/04/07/2256700.aspx

# re: 从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit) 2009-03-19 08:08 beginner
插入 HTML 的方法很實用,謝謝。我在 winxp 編譯通過了,可以正常插入 HTML,但把程序放到 win2k 下卻失敗,我跟綜過程序,發現

CComQIPtr<IPersistStreamInit> spPersistStream(spDisp); 

總返回空的spPersistStream

# re: 从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit) 2009-04-12 00:08 JobsGuo
请问,我将您的CString换成string后放BHO中用,为什么会出现乱码呢?
我想可能是您说的这个原因吧:
 // Stream is always ANSI, but CString
 // assignment operator will convert implicitly.
请问您有办法可以解决吗?谢谢.
这个是我的帖子http://topic.csdn.net/u/20090412/00/03b7c4b9-1568-4e69-9169-d36d280b14f8.html,请不吝赐教.

标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]