IWiaUIExtension COM 接口

如果实现 IWiaUIExtension 接口,则可以实现无、部分或所有 IWiaUIExtension 方法。

如果特定方法返回E_NOTIMPL,则改用系统提供的替代方法,并且有一个方法可用。

IWiaUIExtension 接口提供以下方法:P

方法 说明
IWiaUIExtension::D eviceDialog 提供替换默认系统用户界面的自定义用户界面。
IWiaUIExtension::GetDeviceBitmapLogo 获取设备的自定义位图徽标。
IWiaUIExtension::GetDeviceIcon 获取自定义设备图标。

IWiaUIExtension::D eviceDialog 接受指向在 wiadevd.h () 中声明的 DEVICEDIALOGDATA 结构的指针,该结构包含实现设备对话框所需的所有数据。

设备对话必须作为模式 Win32 对话框实现,但需遵守以下四个约束:

  1. pDeviceDialogData-->ppWiaItems 中返回的项数组必须使用 CoTaskMemAlloc 进行分配,并由应用程序使用 CoTaskMemFree 释放 (请参阅这两个函数) Microsoft Windows SDK文档。

  2. 不得销毁或释放存储在 pDeviceDialogData -->pIWiaItemRoot 中的根项。 也不得导致根项无效。 例如,不得调用 WIA_CMD_SYNCHRONIZE 设备命令。

  3. 返回S_OK指示用户请求了数据传输,S_FALSE指示用户取消了传输。

  4. 请务必确保此组件中不会引入内存或资源泄漏,因为它在应用程序中在进程内运行。

IWiaUIExtension::GetDeviceIcon 允许应用程序使用驱动程序指定的图标。 为了避免资源泄漏,应使用 LoadImage 加载此图标,使用 LR_SHARED 标志 (请参阅 Windows SDK 文档) 。

IWiaUIExtension::GetDeviceBitmapLogo 允许应用程序根据需要显示设备和供应商徽标。 目前,没有系统组件使用此方法。 位图应是使用 CreateDIBSection 分配的 DIB 分配的位图,或使用带有 LR_CREATEDIBSECTION 标志的 LoadImage 加载 (请参阅 Windows SDK 文档,了解) 的详细信息。 这允许应用程序提取任何调色板信息并适应当前或更改的显示颜色深度。

若要在 WIA 扫描程序驱动程序中实现自定义扫描对话框,请使用 IWiaUIExtension::D eviceDialog 方法 (上面列出的四个约束) 创建 Win32 模式对话框,并将 DEVICEDIALOGDATA 结构作为 LPARAM 传递给 DialogBoxParam 函数的 dwInitParam 参数。

请务必记住,设备对话框本身不管理数据传输。 该对话框仅返回指向 IWiaItem 接口指针数组的指针, (属性集) 从驱动程序到应用程序。 然后由应用程序协商传输机制和格式。