CHtmlView读取带框架的网页的函数。

原创 2006年06月19日 17:54:00

 BOOL GetFrameSource( CString& refString, long frameIndex =0)

frameIndex 为框架集的序号

0 代表主框架,如果frameIndex 大于总的框架数则返回FALSE

BOOL CHtmlView::GetFrameSource( CString& refString, long frameIndex )
{
 BOOL bRetVal = FALSE;
 if( frameIndex == 0 )
 {
  bRetVal = GetSource( refString );
 }
 else if( frameIndex > 0 )
 {
  frameIndex = frameIndex - 1;
  CComQIPtr<IDispatch> pDisp = GetHtmlDocument();

  if ( pDisp != NULL )
  {
   CComQIPtr<IHTMLDocument2> pHtmlDoc = pDisp;

   if ( pHtmlDoc != NULL )
   {
    CComQIPtr<IHTMLFramesCollection2> pFrames;
    pHtmlDoc->get_frames( &pFrames );

    if ( pFrames != NULL )
    {
     long frameCount = 0;
     pFrames->get_length( &frameCount );

     if ( frameCount > frameIndex )
     {
      COleVariant varIndex( frameIndex, VT_I4 );
      COleVariant varpDisp;
      pFrames->item( varIndex, varpDisp );
      CComQIPtr<IDispatch> pDispDoc = varpDisp.pdispVal;

      if( pDispDoc != NULL )
      {
       CComQIPtr<IHTMLWindow2> pHtmlWnd = pDispDoc;

       if( pHtmlWnd != NULL )
       {
        CComQIPtr<IHTMLDocument2> pHtmlDocf;
        pHtmlWnd->get_document( &pHtmlDocf );

        if( pHtmlDocf != NULL )
        {
         HGLOBAL hMemory;
         hMemory = GlobalAlloc( GMEM_MOVEABLE, 0);

         if (hMemory != NULL)
         {
          CComQIPtr<IPersistStreamInit> spPSI = pHtmlDocf;

          if( spPSI != NULL)
          {
           CComPtr<IStream> spStream;
           if ( SUCCEEDED( CreateStreamOnHGlobal(hMemory, TRUE, &spStream) ) )
           {
            spPSI->Save( spStream, FALSE );
            LPCTSTR pstr = (LPCTSTR) GlobalLock( hMemory );
            if ( pstr != NULL )
            {
             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;
}

MFC界面--利用CHtmlView和HTML制作新风格的界面(包括CView和Dialog)

一、文档视图形式,以一个视图cview(chtmlview)作为首页界面 转自:http://liuxiang031130.blog.163.com/blog/static/117666552011...
  • WaitForFree
  • WaitForFree
  • 2013年05月19日 10:41
  • 8430

在CHtmlView中,判断一个页面加载完成的准确方法,解决OnDocumentComplete多次调用问题

在CHtmlView中,判断一个页面加载完成的准确方法 凌晨了,但是关于这个问题一定要记录下来,要不然以后不记得了,还得走弯路。 今天在对一个小系统做一个测试,为了便于自动操作,于是用VC写了...
  • z331719654
  • z331719654
  • 2014年02月25日 22:28
  • 2664

使用CHtmlView制作浏览器的简单记录

这几天做了一个简易浏览器,其中碰到了一些问题,在这里记录下来,以供之后查阅。 1、简单的浏览器一些基本功能,例如回到主页、向前、后退、刷新、停止,都可以直接使用CHtmlView中的操作。 例如G...
  • hrxd1270
  • hrxd1270
  • 2014年03月12日 23:18
  • 2546

VC6下CHtmlView中最简单最全面的程序与网页交互方法

简单来说,终极目标------VC6和网页相互调用对方的数据和方法;而调用方法时重点要捕获返回值。 VC6下远没有VC7及其之后提供的操作丰富方便。一些深度应用的破解方法,钻进应用的原理中,解释...
  • liehuoee
  • liehuoee
  • 2012年03月23日 09:05
  • 2064

MFC对话框里利用CHtmlView加载界面(一)————加载网页

简单了解下CHtmlView类,CHtmlView类是MFC类,它继承自CView,属于MFC视图类。 但我们看它的具体实现时,我们会发现其最大的本质在于IWebBrowser2(WebBrowser...
  • qq_20828983
  • qq_20828983
  • 2017年07月10日 08:44
  • 307

判断多Frame网页是否真正加载完毕(CHtmlView)

http://blog.csdn.net/lin_angle/article/details/7938865 1. 手工重载添加两个虚拟函数: virtual void Doc...
  • codespad
  • codespad
  • 2012年11月27日 15:56
  • 354

VC用CHTMLVIEW循环打开一个网页

  • 2009年09月21日 23:26
  • 1.91MB
  • 下载

如何把一个网页强制带参数跳转到一个框架包含窗口中

问题是这样的:我有两个页面a.php和b.php,我要求b.php一定要包含在a.php的一个框架中的,即a.php是一个包含框架页面的父页面,如果直接访问b.php的话就带参数跳转到a.php,使b...
  • YamateDD
  • YamateDD
  • 2011年03月16日 13:09
  • 925

ffmpeg框架阅读笔记一:读取数据帧函数 int av_read_frame(AVFormatContext *s, AVPacket *pkt)

做音频播放,数据源从完整音频文件变成了网络拉取音频流到缓冲区,实现片段流的播放。分析av_read_frame过程,自定义获取数据源的功能。重点查找如何读入数据源。首先分析函数av_read_fram...
  • a675311
  • a675311
  • 2017年06月19日 15:30
  • 294

CHTMLView(简单浏览器)设计

  • 2017年12月29日 22:19
  • 1.9MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CHtmlView读取带框架的网页的函数。
举报原因:
原因补充:

(最多只允许输入30个字)