WIA 错误处理程序取消无模式对话框

错误处理程序中的大部分复杂性都与如何处理取消和消除无模式对话框有关。

具体而言,WIA 代理代码可确保较低级别的错误处理程序 (应用程序错误处理程序以外的处理程序,) 有机会将取消请求从无模式对话传回驱动程序;这可确保较低级别的处理程序有机会关闭其无模式对话框。

为了允许错误处理程序取消无模式对话框中的数据传输操作,驱动程序应使用相同的 hrErrorStatus 代码继续发送WIA_TRANSFER_MSG_DEVICE_STATUS消息,并可能更新 lPercentComplete 参数以允许错误处理程序 UI 显示进度。 例如,如果驱动程序可以估计“预热”真正花费的时间,它可以发送大量设备消息,并将 hrErrorStatus 设置为 WIA_STATUS_WARMING_UP。 这将允许错误处理程序显示进度对话框,并为用户提供从此对话框取消传输的机会。 传入 IWiaErrorHandler::ReportStatuslPercentComplete 参数与驱动程序在 IWiaTransferCallback::WiaTransferParams 方法中设置的 lPercentComplete 参数完全相同。 有关这种情况的示例,请参阅 WDK CD 上的扩展 WIA 怪物驱动程序。

为了允许错误处理程序关闭无模式对话框,Microsoft 引入了设备状态代码WIA_STATUS_CLEAR。 当 WIA 代理收到与当前显示的设备消息不同的设备消息时,WIA 代理会将此消息发送到当前显示无模式 UI 的错误处理程序。 代理还会在以下情况下发送WIA_STATUS_CLEAR消息:

驱动程序发送WIA_TRANSFER_MESSAGE_STATUS消息,

调用 IWiaTransferCallback::GetNextStream 方法期间

如果当前存在显示无模式 UI) 的错误处理程序,则 (流/传输的末尾。

驱动程序不应自行发送WIA_STATUS_CLEAR消息。

Microsoft Windows SDK文档中介绍了 IWiaTransferCallback 接口。