当前位置: 首页 > article >正文

2501,wtl显示html

原文

MFC程序中有专门封装CHTMLView来显示超文本文件,如果在对话框显示网页可用CDHTMLDialog,甚至可实现多页超文本向导风格的对话框,但是在WTL中却没有单独封装超文本的对应控件,这是因为COM组件的使用和编写本来就是ATL的强项,WTL扩展的是ATL欠缺的桌面应用的功能部分,所以即使不使用WTL也可用ATL的基本功能来显示超文本,首先来看如何显示一个超文本:

struct  CWelcomePage :  public  CWindowImpl <  CWelcomePage , CAxWindow  >
{
    DECLARE_WND_SUPERCLASS( TEXT( " WelcomePage " ) ,  CAxWindow::GetWndClassName( ) )
    BEGIN_MSG_MAP_EX( CWelcomePage )
    END_MSG_MAP( )
};

上面类声明中,和普通的类唯一不同的就是基类使用了CAxWindow而不是CWindow.
然后创建窗口的使用按对应的网址指定窗口标题就可以了,如下:

CWelComePage WelcomePage;
WelcomePage.Create( m_hWnd , rcDefault , TEXT( " http://www.microsoft.com " ), dwStyle);

首先来看下,声明了一个从CAxWindow集成类的实例时ATL干了什么:在CAxWindow构造器中,调用了注册了两个特定的消息来让CAxWindow取得主机内部包含的COM控件的AtlAxWinInit函数.

更重要的是注册了一个叫做ATLAXWIN_CLASS窗口类,ATLAXWIN_CLASS是一个在VS2008附带的ATL中按"AtlAxWin90"定义的宏.
该窗口类窗口函数不是普通的窗口那样使用一个开始函数,然后内部去初化,而是使用了一个全局静态函数:AtlAxWindowProc,看看该函数的实现.

哦,看到了在处理WM_CREATE消息,在处理该消息中,如果窗口标题不是空的,则使用窗口标题最为首参数调用内部直接调用,内部创建一个CAxHostWindow然后调用该实例CreateControlLicExAtlAxCreateControlLicExAtlAxCreateControlLic函数.
恩,继续跟踪到CreateNormalizedObject函数内部,啊哦,终于找到了,在该函数内部根据传入的串决定创建什么:如果是"MSHTML"😦不区分大小写)则创建HTMLDocument对象;

否则如果发现包含":",则创建WebBrowser对象;否则检查是否为类标的串格式(即第一个符是'{'),并,按类标转换,如果转换成功则使用该类标创建对象;
恩,创建了对象了,那何时加载并显示网页呢?继续.
CreateNormalizedObject函数,创建完了控件,返回到CreateControlLicEx,继续向下代码实现是,如果是"MSHTML:",则取IPersistStreamInit接口,调用加载,否则试取IWebBrowser2接口,如果包含该接口则调用Navigate2.


http://www.kler.cn/a/503757.html

相关文章:

  • SpringBoot整合Easy-es
  • RV1126+FFMPEG推流项目(3)VI模块视频编码流程
  • 第27章 汇编语言--- 设备驱动开发基础
  • 《使用 YOLOV8 和 KerasCV 进行高效目标检测》
  • 服务器数据恢复—raid5故障导致上层ORACLE无法启动的数据恢复案例
  • RTDETR融合[WACV 2024]的MetaSeg中的gmb模块
  • 基于springboot+vue的洪涝灾害应急信息管理系统设计与实现
  • 【蓝桥杯】Python算法——快速幂
  • Python文档生成利器 - Sphinx入门指南
  • 【JVM】深入了解Java虚拟机-------内存划分、类加载机制、垃圾回收机制
  • 【Uniapp-Vue3】页面生命周期onLoad和onReady
  • 语音合成的预训练模型
  • Linux Centos中安装多个JDK并且管理
  • 基于深度学习的视觉检测小项目(十三) 资源文件的生成和调用
  • 学习进程前的简单认知-体系结构与OS
  • Qt/C++进程间通信:QSharedMemory 使用详解(附演示Demo)
  • 刷题记录 回溯算法-10:93. 复原 IP 地址
  • 如何高效使用Adobe软件的组件功能
  • OpenCV实现彩色图像的直方图均衡化
  • riscv架构下linux4.15实现early打印
  • 《零基础Go语言算法实战》【题目 4-2】使用 Go 语言实现一个模拟栈数据结构操作的类 FrequencyStack
  • 智能制造智慧工业4.0大数据平台建设综合解决方案(PPT原件)
  • element-ui动态设置tabel的columns时,切换columns数据表格抖动
  • 30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <1> 5分钟快速创建一个springboot web项目
  • MATLAB学习笔记-table
  • C++实现设计模式---代理模式 (Proxy)