Skip to content

WebView2 ResFile 示例 - 从 VB6 资源文件加载 HTML

概述

演示如何将 HTML 内容嵌入 VB6 资源文件 (.RES),运行时通过 NavigateToString 加载到 WebView2 中。适用于单文件分发,不依赖外部 HTML 文件。

项目结构

下载源码 [ 注意:重新到bin目录注册 DLL 文件 ]

代码请到 VBMAN2 项目 demos/webview2/resFile 目录获取。

resFile/
  ├── Form1.frm                    # 主窗体,包含资源加载逻辑
  ├── vbman2_webview2.RES          # VB6 资源文件(含嵌入的 INDEX.HTML)
  ├── vbman2_webview2.vbp          # VB6 项目文件(含 ResFile32 引用)
  └── vbman2_webview2.vbw          # VB6 工作区文件

核心代码解析

1. 延迟初始化(Form1.frm)

vb
Dim WithEvents wv As cWebView2Host

Private Sub Form_Load()
    Set wv = New cWebView2Host
    wv.Initialize Me.hWnd       ' 只传一个参数,不立即导航
End Sub

只传入窗口句柄,不传入 URL,延迟导航到 wv_Ready 事件中执行。

2. 在 Ready 事件中从资源加载

vb
Private Sub wv_Ready()
    wv.NavigateToString VBMAN2.Res(LoadResData("INDEX.HTML", "WWW")).ReturnString()
End Sub

3. 标题同步

vb
Private Sub wv_DocumentTitleChanged()
    Me.Caption = wv.DocumentTitle
End Sub

功能说明

  1. VB6 资源文件嵌入

    • HTML 存储在 .RES 文件的 "WWW" 自定义资源类型中
    • 资源 ID 为 "INDEX.HTML"
    • 编译后嵌入 EXE,无需外部文件
  2. NavigateToString

    • 将 HTML 字符串直接加载到 WebView2
    • 内容以 about:blank 为基础 URL
    • 不支持相对路径引用外部资源
  3. VBMAN2.Res 辅助函数

    • LoadResData("INDEX.HTML", "WWW") 加载原始字节数据
    • VBMAN2.Res() 转换编码
    • .ReturnString() 转为字符串
  4. 延迟导航模式

    • Initialize 不传 URL
    • 在 wv_Ready 事件中导航
    • 确保 WebView2 就绪后再加载内容

技术要点

  1. LoadResData 是 VB6 内置函数,用于加载自定义资源类型。返回 Byte 数组

  2. VBMAN2.Res().ReturnString() 是 VBMAN2 库提供的辅助方法,处理字节到字符串的编码转换(处理 UTF-8 等)

  3. NavigateToString 的限制

    • 基础 URL 为 about:blank
    • 不能使用相对路径引用外部 CSS/JS/图片
    • 所有资源必须内联(base64 图片、内联 CSS/JS)
  4. 资源文件编辑:使用 VB6 资源编辑器添加自定义资源,资源类型为 "WWW",ID 为 "INDEX.HTML"

应用场景

  1. 单文件 EXE 分发(所有 HTML/CSS/JS 嵌入资源)
  2. 关于对话框/帮助页面
  3. 简单的 HTML 报告显示
  4. 不依赖外部文件的离线应用

扩展建议

  1. 对于包含外部资源引用的 HTML,可结合 SetVirtualHostNameToFolderMapping 实现资源映射
  2. 可以嵌入多份 HTML 资源,根据条件动态切换显示
  3. 资源中的 HTML 可以通过 JS 与 VB6 交互(postMessage / BindUI)

VB6及其LOGO版权为微软公司所有