ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows 驱动实例分析系列:libwdi 驱动分析 - examples 篇(四)

Windows 驱动实例分析系列:libwdi 驱动分析 - examples 篇(四) 子文档四Zadig UI 与标准对话框模块Zadig 的用户界面完全使用 Win32 原生控件构建未使用任何第三方 UI 库。其 UI 相关代码主要分布在zadig_stdlg.c和zadig.c的主窗口过程部分。本子文档重点分析zadig_stdlg.c中实现的标准对话框和辅助 UI 组件。文件夹浏览对话框BrowseForFolder函数实现了文件夹选择功能用于让用户指定驱动文件的提取目录。它同时支持两种实现路径首选路径使用 Windows Vista 及以后引入的IFileOpenDialog设置FOS_PICKFOLDERS选项提供更现代的界面和更好的高 DPI 支持。回退路径若IFileOpenDialog不可用如 Windows XP则使用传统的SHBrowseForFolderAPI。BrowseForFolder还通过子类化SHBrowseForFolder的编辑框控件实现了用户可以直接在编辑框中输入路径的功能提升了易用性。文件对话框打开/保存FileDialog函数封装了IFileDialogVista和传统的GetOpenFileName/GetSaveFileName支持自定义文件类型过滤器。它接受一个ext_t结构体其中定义了文件扩展名和对应的描述用于构建过滤器字符串。FileDialog还处理了 UTF-8 路径的转换内部将传入的 UTF-8 路径转换为 UTF-16 调用 Windows API返回时将结果转换回 UTF-8确保在整个应用程序中字符串编码统一。自定义通知对话框zadig_stdlg.c实现了notification函数和对应的对话框过程notification_callback用于替代标准的MessageBox提供以下增强功能自定义图标支持信息、警告、错误、询问四种类型。可选的“更多信息”按钮用于打开一个额外的对话框如更新策略详情。居中于父窗口且禁用窗口最大化/调整大小防止用户意外操作。模态行为阻塞父窗口直到用户响应。该通知对话框在 Zadig 中广泛用于显示操作结果、警告信息以及询问用户是否允许更新检查等。关于对话框about_callback实现了关于对话框其特殊之处在于使用 Rich Edit 控件RichEdit20W显示 RTF 格式的版权声明和附加版权信息。支持超链接自动检测EM_AUTOURLDETECT和点击打开通过EN_LINK通知。包含一个“许可证”按钮点击后显示 GPLv3 全文的模态对话框。包含一个“更新策略”按钮点击后显示更新策略对话框。关于对话框的版权文本定义在zadig_license.h中包括主程序版权、libwdi 版权、profile.c 版权等充分尊重了所有依赖项目的许可证要求。更新策略对话框UpdateCallback实现了更新策略设置对话框允许用户配置更新检查频率禁用/每日/每周/每月/自定义。是否包含测试版Beta更新。手动触发立即检查。该对话框将用户的偏好存储到注册表HKCU\Software\Akeo Consulting\Zadig\中并在下次启动时应用。新版本通知对话框当检测到新版本时Zadig 会显示new_version_callback对话框。该对话框包含当前版本和最新版本的对比显示。发布说明RTF 格式支持超链接。“下载”按钮点击后启动后台下载线程并在进度条上显示下载进度。下载完成后按钮变为“启动”点击后启动新版本的可执行文件并关闭当前 Zadig 实例。该实现展示了如何结合多线程和进度条实现流畅的用户体验。工具提示Tooltip管理zadig_stdlg.c中实现了create_tooltip、destroy_tooltip和destroy_all_tooltips三个函数用于为控件添加自定义提示。它们维护了一个全局数组ttlist存储每个工具提示的句柄、原始窗口过程和 UTF-8 字符串。工具提示支持多行文本并可以设置显示时长。Zadig 为几乎所有控件都添加了工具提示极大地提升了软件的易用性。状态栏create_status_bar函数创建了一个状态栏STATUSCLASSNAME分为两个部分左侧用于显示动态提示信息右侧用于显示应用程序版本号。版本号部分使用了自定义绘制WM_DRAWITEM以灰色文字显示与状态栏背景协调。
返回列表