You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win32 C++应用如何通过URI在Toast通知中引用编译资源?

在Win32 C++应用中通过Toast通知引用资源文件的实现方法

核心协议:ms-resource

Win32应用中Toast通知引用本地资源(图标、位图、PNG等)确实依赖ms-resource协议,以下是具体实现步骤和细节:


1. 正确定义RC资源文件

首先确保资源已在.rc文件中正确声明,不同资源类型的写法略有区别:

标准资源类型(图标、位图)

// 图标资源,ID为IDI_TOAST_ICON
IDI_TOAST_ICON ICON "assets/toast_icon.ico"

// 位图资源,ID为IDB_TOAST_BITMAP
IDB_TOAST_BITMAP BITMAP "assets/toast_bmp.bmp"

自定义资源类型(如PNG)

RC默认没有PNG类型,需先声明自定义类型,再定义资源:

// 声明PNG为自定义资源类型(类型值256可自定义,只要不与系统类型冲突)
PNG TYPE 256

// PNG资源,ID为IDP_TOAST_PNG
IDP_TOAST_PNG PNG "assets/toast_img.png"

2. Toast通知XML中的URI写法

在Toast的XML模板中,通过ms-resource URI直接引用资源,格式为:
ms-resource:///<资源类型>/<资源ID或名称>

不同资源的引用示例

  • 图标:
    <image src="ms-resource:///Icon/IDI_TOAST_ICON" placement="appLogoOverride"/>
    
  • 位图:
    <image src="ms-resource:///Bitmap/IDB_TOAST_BITMAP" alt="位图展示"/>
    
  • PNG(使用自定义类型名或类型值均可):
    <image src="ms-resource:///PNG/IDP_TOAST_PNG" alt="PNG图片"/>
    <!-- 或用类型值代替名称:ms-resource:///256/IDP_TOAST_PNG -->
    

完整Toast XML示例

<toast>
  <visual>
    <binding template="ToastGeneric">
      <text>新消息提醒</text>
      <text>您有一条未读通知</text>
      <image src="ms-resource:///Icon/IDI_TOAST_ICON" placement="appLogoOverride"/>
      <image src="ms-resource:///PNG/IDP_TOAST_PNG" alt="详情图片"/>
    </binding>
  </visual>
</toast>

3. 关键注意事项

  • 资源必须被正确编译链接到应用的EXE或DLL中,确保RC文件被包含在项目编译流程里。
  • 如果资源存放在独立DLL中,需在URI中指定模块路径:ms-resource:///my_resources.dll/Icon/IDI_TOAST_ICON
  • 需符合Toast通知的图像尺寸要求,例如appLogoOverride建议使用40x40或80x80像素的图标(适配高DPI)。

内容的提问来源于stack exchange,提问作者user3161924

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:47:11