您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:159 来源:vckbase.com

本文章共11714字,分8页,当前第7页,快速翻页:
 

BSTR bstrHTMLText;

hr = m_pBody->get_outerHTML(&bstrHTMLText);

   在此基础上,在代码窗口中显示源码就是一种简单的事情了:生成一个窗口,进行字符的UNICODE至ANSI转化和设置编辑框控件的问题。下面代码实现这些功能:
HRESULT CViewSource::GetDocumentContent()

{

  USES_CONVERSION;

  

  // 获取 WebBrowser的文档对象

  CComPtr<IDispatch> pDisp;

  HRESULT hr = m_spWebBrowser2->get_Document(&pDisp);

  if (FAILED(hr))

   return hr;



  // 确保我们取得的是一个IHTMLDocument2接口指针

  //让我们查询一下 IHTMLDocument2 接口 (使用灵敏指针)

  CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> spHTML;

  spHTML = pDisp;



  // 抽取文档源代码

  if (spHTML)

  {

    // 取得BODY 对象

    hr = spHTML->get_body(&m_pBody); 

    if (FAILED(hr))

        return hr;

    // 取得HTML 文本

    BSTR bstrHTMLText;

    hr = m_pBody->get_outerHTML(&bstrHTMLText); 

    if (FAILED(hr))

     return hr;

    // 进行文本的Unicode到 ANSI的转换

    LPTSTR psz = new TCHAR[SysStringLen(bstrHTMLText)];

    lstrcpy(psz, OLE2T(bstrHTMLText));

     // 文本进行相应的调整

    HWND hwnd = m_dlgCode.GetDlgItem(IDC_TEXT);

    EnableWindow(hwnd, true);

    hwnd = m_dlgCode.GetDlgItem(IDC_APPLY);

    EnableWindow(hwnd, true);



    // 设置代码窗口中的文本

    m_dlgCode.SetDlgItemText(IDC_TEXT, psz); 

    delete [] psz;

  }

  else   // 文档不是一个 HTML 页

  {

    m_dlgCode.SetDlgItemText(IDC_TEXT, ""); 

    HWND hwnd = m_dlgCode.GetDlgItem(IDC_TEXT);

    EnableWindow(hwnd, false);

    hwnd = m_dlgCode.GetDlgItem(IDC_APPLY);

    EnableWindow(hwnd, false);

  }



  return S_OK;  

}

  因为我要运行这段代码来响应DocumentComplete事件通知,每个新的页自动地而且敏捷地被处理。DHTML对象模型使你能够随意修改网页的结构,但这一变化在按F5刷新后全部复原。你还要处理一下DownloadComplete事件以刷新代码窗口 (注意, DownloadComplete 事件发生在 DocumentComplete事件之前)。你应该忽略网页的首次DownloadComplete事件,而是在执行刷新动作时才关注这一事件。布尔成员变量m_bDocumentCompleted正是用来区别这两种情形的。
逆风编程精品

十一、管理代码窗口
  用来显示当前HTML页原始码的代码窗口涉及另外一个ATL 基本编程问题-对话框窗口,它位于ATL对象向导的"Miscellaneous"选项卡下。
  我调整了代码窗口的大小来响应WM_INITDIALOG消息,使它占居桌面空间的下部区域,正好是在任务栏的上面。在浏览器启动时你可以选择显示或不显示这个窗口。缺省情况下是显示的,但这可以通过清除"Show window at startup"复选框项来实现。当然喜欢的话,你可以随时关闭。按键F12即可重新显示代码窗口。F12是通过在SetSite()中安装的键盘钩子实现的。启动环境存于WINDOWS注册表中,我选择外壳库文件shlwapi.dll中函数SHGetValue来实现注册表的读写操作。这同使用Reg开头的Win32函数操作相比,简单极了。请看:
DWORD dwType, dwVal;

DWORD dwSize = sizeof(DWORD);

SHGetValue(HKEY_CURRENT_USER, _T("Software\\MSDN\\BHO"), _T("ShowWindowAtStartup"), &dwType, &dwVal, &dwSize);

这个DLL文件是同Internet Explorer 4.0 和活动桌面的诞生一起产生的,是WIN98及以后版本的标准组成,你可以放心使用。
 
本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 下一页>>
相关文章

使用socket套接字时的两点经验
Visual Basic .NET 中多 Windows 窗体的同步
可以替代系统记事本的程序
论程序设计方法
图形显示特技算法
SQL Server 索引结构及其使用(三)
简单实用的Xml解析类
一个实用的CToolBar扩展类CToolBarEx
定时显示远程计算机的桌面
《系统飞狐》系列软件中的“系统监视器”开
DLL初学者指南(非MFC)
VC中基于 Windows 的精确定时
模拟 Windows 下 CPU 占用率的控件及其实现
自动隐藏停泊窗体实现
Buffer Overruns,portability和其它...
在你的程序中如何使用CButtonST类
QQ2006 界面编程之鸡蛋里挑骨头
用 Web 服务进行二进制序列化和 BinaryForm
DLL头文件的格式和应用
如何在 C# 中加载自己编写的动态链接库

相关评论


本文章所属分类:首页 VC++

  热门关键字: