
图形学桌面应用【免费下载链接】RGF_CJRGF是仓颉Windows系统下的通用渲染框架兼应用开发框架。RGF仓颉版后续简称RGF基于RGF(C/C版)封装优化而来。RGF为开发者提供轻量化、安全、高性能以及高度一致性的2D渲染能力以及常用的桌面应用开发工具并且提供对接Direct3D的相关接口以满足开发者对3D画面渲染的需求。在Windows开发方面RGF在子包内也提供开箱即用的Windows API确保熟悉Win32的开发者快速上手。此外RGF还提供一些常用功能的封装如XAudio2、MF以辅助开发者实现音频、摄像头等扩展功能的管理。项目地址https://gitcode.com/Cangjie-SIG/RGF_CJ点击查看免费下载导读Windows 桌面应用几乎离不开系统托盘通知区域图标后台驻留、消息提醒、快捷菜单都依赖它。本文以 RGF 仓颉版RGF_CJrgf.win_def子包中的_NOTIFYICONDATAW结构体为线索完整讲解该结构体的 15 个构造参数、内嵌联合体属性、配套的NIM_*/NIF_*/NIIF_*常量以及底层的Shell_NotifyIconW绑定与wShell_NotifyIconW安全封装。读完本文你可以在 RGF 应用中从零添加、修改、删除托盘图标并正确设置气泡通知与通知版本号。一、_NOTIFYICONDATAW是什么_NOTIFYICONDATAW是 RGF 对 Windows 原生结构体NOTIFYICONDATAWShellAPI宽字符版本的仓颉语言映射用于向系统 Shell 描述一个托盘图标该长什么样、有哪些字段有效、显示什么气泡提示。它带有C标注表明该结构体与 C ABI 布局兼容可安全地传给底层 foreign 函数C public struct _NOTIFYICONDATAW在 hshellapi.cj 中可以看到它唯一的构造函数所有字段都带默认值这意味着你只需要为关心的字段传参即可public _NOTIFYICONDATAW( let cbSize!:DWORD UInt32(sizeOf_NOTIFYICONDATAW()), let hWnd!:HWND HWND(), let uID!:UINT 0, let uFlags!:UINT 0, let uCallbackMessage!:UINT 0, let hIcon!:HICON HICON(), let szTip!:VArrayWCHAR,$128 VArrayWCHAR, $128(repeat: 0), let dwState!:DWORD 0, let dwStateMask!:DWORD 0, let szInfo!:VArrayWCHAR,$256 VArrayWCHAR, $256(repeat: 0), let unionU!:UINT 0, let szInfoTitle!:VArrayWCHAR,$64 VArrayWCHAR, $64(repeat: 0), let dwInfoFlags!:DWORD 0, let guidItem!:GUID GUID(), let hBalloonIcon!:HICON HICON() )二、构造参数逐一详解结构与 Win32 原生定义一一对应字段语义如下名称类型说明cbSizeDWORD结构体字节大小默认取UInt32(sizeOf_NOTIFYICONDATAW())即当前结构体实际大小。Win32 要求该字段必须设置正确否则Shell_NotifyIconW会失败hWndHWND关联的窗口句柄用于接收uCallbackMessage指定的回调消息通常是鼠标点击托盘图标uIDUINT图标标识符。同一hWnd下可挂多个托盘图标用uID区分取值 0 表示不使用uFlagsUINT指示哪些字段有效用NIF_*常量按位或组合见下文uCallbackMessageUINT用户定义的消息编号如WM_USER 1Shell 向hWnd发送的托盘交互消息hIconHICON要显示的图标句柄仅当uFlags含NIF_ICON时有效szTipVArrayWCHAR,$128悬停提示文本定长 128 个宽字符即 127 个有效字符加终止符仅当uFlags含NIF_TIP时有效dwStateDWORD图标状态如隐藏/共享仅当uFlags含NIF_STATE时有效dwStateMaskDWORD状态掩码指明dwState中哪些位被更新szInfoVArrayWCHAR,$256气泡通知正文定长 256 个宽字符仅当uFlags含NIF_INFO时有效unionUUINT联合体字段按上下文分别解释为uTimeout或uVersion见下节szInfoTitleVArrayWCHAR,$64气泡通知标题定长 64 个宽字符dwInfoFlagsDWORD气泡图标类型NIIF_*常量见下文guidItemGUID图标的全局唯一标识仅当uFlags含NIF_GUID时有效。使用 GUID 后hWnd/uID可传默认值hBalloonIconHICON气泡通知自定义图标句柄。源码注释明确指出此成员要求 NTDDI_VERSION 0x06000000即系统为 Windows Vista 及以上定长宽字符数组字段szTip、szInfo、szInfoTitle三个字段均为仓颉的定长数组类型VArrayWCHAR, $N依次为 128、256、64并在构造时默认用repeat: 0整体清零。写入文本时需注意字节上限szTip最多 127 个字符、szInfo最多 255 个字符、szInfoTitle最多 63 个字符均需保留一个宽字符作为终止符超长内容会被系统截断。三、联合体uTimeout与uVersion结构体内部第 10 个参数unionU是一个联合体占位字段源码中以注释这是一个联合体标明它根据使用场景有两种语义分别通过两个只读属性暴露public prop uTimeout:UINT{ get(){ unionU }; } public prop uVersion:UINT{ get(){ unionU }; }uTimeout当调用NIM_MODIFY且uFlags含NIF_INFO时表示气泡通知的显示时长毫秒。系统会按该值决定气泡停留时间。uVersion配合NIM_SETVERSION使用表示 Shell 通知接口版本。应用可传入版本号经典为NOTIFYICON_VERSION来获得对应的回调行为与消息格式。由于两者共享同一块内存实际使用中需按当前操作语义选择对应的属性理解其含义。四、类型别名与指针形态与结构体配套hshellapi.cj 还定义了两种常用形态public type NOTIFYICONDATAW _NOTIFYICONDATAW public type PNOTIFYICONDATAW CPointer_NOTIFYICONDATAWNOTIFYICONDATAW不带下划线的便捷别名面向日常书写PNOTIFYICONDATAW结构体指针用于与底层 foreign 函数对接。五、配套常量NIM、NIF、NIIF 三组标志使用该结构体必然涉及三组常量全部定义在 hshellapi.cj类型均为UInt32NIM_Shell_NotifyIconW 的 dwMessage 操作码常量值含义NIM_ADD0x00000000添加托盘图标NIM_MODIFY0x00000001修改现有托盘图标NIM_DELETE0x00000002删除托盘图标NIM_SETFOCUS0x00000003将焦点设置到托盘图标NIM_SETVERSION0x00000004设置通知版本配合uVersionNIF_uFlags 有效字段标志可按位或常量值对应有效字段NIF_MESSAGE0x00000001uCallbackMessageNIF_ICON0x00000002hIconNIF_TIP0x00000004szTipNIF_STATE0x00000008dwState/dwStateMaskNIF_INFO0x00000010szInfo/szInfoTitle/dwInfoFlags/uTimeoutNIF_GUID0x00000020guidItemNIF_REALTIME0x00000040实时刷新不缓存NIF_SHOWTIP0x00000080显示悬停提示NIIF_dwInfoFlags 气泡图标标志常量值含义NIIF_NONE0x00000000无图标NIIF_INFO0x00000001信息图标NIIF_WARNING0x00000002警告图标NIIF_ERROR0x00000003错误图标NIIF_USER0x00000004用户图标配合hBalloonIconNIIF_ICON_MASK0x0000000f图标类型掩码NIIF_NOSOUND0x00000010播放气泡时不发声NIIF_LARGE_ICON0x00000020使用大图标要求 NTDDI_VERSION 0x06000000即 Windows Vista 起NIIF_RESPECT_QUIET_TIME0x00000080遵循系统的安静时段策略要求 NTDDI_VERSION 0x06010000即 Windows 7 起六、调用入口wShell_NotifyIconW封装_NOTIFYICONDATAW结构体本身不产生任何行为真正驱动它的是 ShellAPI 的Shell_NotifyIconW。RGF 在 hshellapi.cj 中先以 foreign 函数声明原生入口再提供安全封装foreign func Shell_NotifyIconW(dwMessage:DWORD, lpData:PNOTIFYICONDATAW):WINBOOL; public func wShell_NotifyIconW(dwMessage:DWORD, data:NOTIFYICONDATAW):Bool{ var tmp data unsafe{ Shell_NotifyIconW(dwMessage,inout tmp) } ! 0 }封装要点接收按值传递的结构体内部复制到局部变量后以inout取地址传给 foreign 函数屏蔽了底层指针操作将 Win32 的WINBOOL返回值转换为仓颉Bool非 0 即为true该函数签名也同步登记在rgf.win_defAPI 列表与函数文档中供开发者直接检索使用。七、完整使用示例结合上述 API一个典型的托盘图标生命周期如下示意代码需配合 RGF 窗口句柄使用// 1. 添加托盘图标设置窗口句柄、图标、提示文本与回调消息 let nid _NOTIFYICONDATAW( hWnd hwnd, // 承载回调的窗口 uID 1, // 图标标识 uFlags NIF_MESSAGE | NIF_ICON | NIF_TIP, uCallbackMessage 0x8000, // 自定义托盘回调消息 hIcon hIcon, // 图标句柄 szTip /* 填充不超过 127 个宽字符 */, szInfo /* 填充不超过 255 个宽字符 */, szInfoTitle /* 填充不超过 63 个宽字符 */, dwInfoFlags NIIF_INFO ) wShell_NotifyIconW(NIM_ADD, nid) // true 表示成功 // 2. 修改气泡通知内容 let nid2 _NOTIFYICONDATAW( hWnd hwnd, uID 1, uFlags NIF_INFO, szInfo /* 新通知正文 */, szInfoTitle /* 新标题 */, dwInfoFlags NIIF_WARNING ) wShell_NotifyIconW(NIM_MODIFY, nid2) // 3. 删除托盘图标 wShell_NotifyIconW(NIM_DELETE, _NOTIFYICONDATAW(hWnd hwnd, uID 1))八、版本与系统要求注意hBalloonIcon与NIIF_LARGE_ICON均要求Windows Vista 及以上NTDDI_VERSION 0x06000000源码注释已明确标注NIIF_RESPECT_QUIET_TIME要求Windows 7 及以上NTDDI_VERSION 0x06010000涉及unionU时NIM_SETVERSION场景按uVersion理解、NIF_INFO气泡场景按uTimeout毫秒理解二者不可混用。九、延伸阅读结构体完整定义_NOTIFYICONDATAW底层源码实现src/win_def/hshellapi.cj调用函数文档wShell_NotifyIconW常量全集rgf.win_def变量与常量子包总览rgf.win_defreadme赞分享图形学桌面应用【免费下载链接】RGF_CJRGF是仓颉Windows系统下的通用渲染框架兼应用开发框架。RGF仓颉版后续简称RGF基于RGF(C/C版)封装优化而来。RGF为开发者提供轻量化、安全、高性能以及高度一致性的2D渲染能力以及常用的桌面应用开发工具并且提供对接Direct3D的相关接口以满足开发者对3D画面渲染的需求。在Windows开发方面RGF在子包内也提供开箱即用的Windows API确保熟悉Win32的开发者快速上手。此外RGF还提供一些常用功能的封装如XAudio2、MF以辅助开发者实现音频、摄像头等扩展功能的管理。项目地址https://gitcode.com/Cangjie-SIG/RGF_CJ点击查看免费下载相关推荐RGF 仓颉版 FLASHWINFO 结构体详解Win32 窗口闪烁 API 在 rgf.win_def 中的封装与使用RGF 仓颉版 FLASHWINFO 结构体详解Win32 窗口闪烁 API 在 rgf.win_def 中的封装与使用 RGF 仓颉版RGF_CJ在子包图形学桌面应用Just the Docs 面包屑导航Breadcrumbs完整指南自动父级链接、层级祖先与自定义覆写Just the Docs 面包屑导航Breadcrumbs完整指南自动父级链接、层级祖先与自定义覆写 面包屑breadcrumbs是 Just th图形学桌面应用RGF 仓颉版 Win32 互操作指南解析 _GUID 结构体与 GUID/IID 类型体系RGF 仓颉版 Win32 互操作指南解析 _GUID 结构体与 GUID/IID 类型体系 导读 _GUID 是 RGF 仓颉版RGF_CJ rgf.w图形学桌面应用上一篇如何用GetQzonehistory永久保存QQ空间记忆免费开源备份工具完整指南下一篇无损视频剪辑终极指南5分钟快速上手的完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考