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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

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

简单了解下CHtmlView类,CHtmlView类是MFC类,它继承自CView,属于MFC视图类。 但我们看它的具体实现时,我们会发现其最大的本质在于IWebBrowser2(WebBrowser...

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

http://blog.csdn.net/lin_angle/article/details/7938865 1. 手工重载添加两个虚拟函数: virtual void Doc...

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

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

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

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

关于CHtmlView的简单应用

  • 2009-02-07 02:24
  • 65KB
  • 下载

开发人员不可不知的六大JavaScript框架 传统网站网页转移动端方式

在移动设备全球流行的大趋势下,越来越多的企业开始致力于构建一个在移动端进行优化的网站或应用程序,用于发布和出售他们的产品。而这股在移动开发领域兴起的热潮离不开JavaScript。 随着互联网的高速...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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