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
相关产品推荐
相关产品推荐

