Поделиться через


Отмена обработчика ошибок WIA для немодерных диалоговых окон

Большая часть сложности обработчика ошибок связана с обработкой отмены и закрытия немодальных диалоговых окон.

В частности, код прокси-сервера WIA гарантирует, что обработчик ошибок более низкого уровня (т. е. обработчик ошибок, отличный от обработчика ошибок этого приложения) получает возможность передать драйверу запрос на отмену из немодерного диалогового окна. это гарантирует, что обработчик нижнего уровня получит возможность закрыть свое немодерное диалоговое окно.

Чтобы разрешить обработчику ошибок отменять операцию передачи данных из немодерного диалогового окна, драйвер должен продолжать отправлять WIA_TRANSFER_MSG_DEVICE_STATUS сообщения с тем же кодом hrErrorStatus , возможно, обновив параметр lPercentComplete , чтобы пользовательский интерфейс обработчика ошибок отображал ход выполнения. Например, если драйвер может дать оценку того, сколько времени действительно занимает "прогрев", он может отправить несколько сообщений устройства с параметром hrErrorStatus , для которых задано значение WIA_STATUS_WARMING_UP. Это позволит обработчику ошибок отображать диалоговое окно хода выполнения, а также предоставить пользователю возможность отменить перенос из этого диалогового окна. Параметр lPercentComplete, передаваемый в IWiaErrorHandler::ReportStatus , является тем же параметром lPercentComplete , который драйвер задает в методе IWiaTransferCallback::WiaTransferParams . Пример см. в разделе Extended WIA Monster Driver на компакт-диске WDK.

Чтобы разрешить обработчику ошибок закрыть немодерное диалоговое окно, корпорация Майкрософт представила код состояния устройства WIA_STATUS_CLEAR. Это сообщение отправляется прокси-сервером WIA обработчику ошибок, который в настоящее время отображает немодерный пользовательский интерфейс, когда прокси-сервер WIA получает сообщение об устройстве, отличное от отображаемого в данный момент. Прокси-сервер также отправляет сообщение WIA_STATUS_CLEAR в следующих случаях:

Драйвер отправляет WIA_TRANSFER_MESSAGE_STATUS сообщение:

во время вызовов метода IWiaTransferCallback::GetNextStream

в конце потока или передачи (если в настоящее время имеется обработчик ошибок, отображающий немодерный пользовательский интерфейс).

Водители не должны отправлять WIA_STATUS_CLEAR сообщение самостоятельно.

Интерфейс IWiaTransferCallback описан в документации по Microsoft Windows SDK.