次の方法で共有


モードレス ダイアログの WIA エラー ハンドラーのキャンセル

エラー ハンドラーの複雑さは、多くの場合、モードレス ダイアログ ボックスの取り消しと無視の処理方法が原因です。

特に、WIA プロキシ コードは、下位レベルのエラー ハンドラー (そのアプリケーションのエラー ハンドラー以外のハンドラー) が、モードレス ダイアログからドライバーにキャンセル要求を確実に伝えられるようにします。これにより、下位レベルのハンドラーがそのモードレス ダイアログ ボックスを閉じられるようになります。

エラー ハンドラーがモードレス ダイアログからデータ転送操作を取り消せるようにするには、ドライバーは同じ hrErrorStatus コードで WIA_TRANSFER_MSG_DEVICE_STATUS メッセージを送信し続ける必要があります。場合によっては、エラー ハンドラー UI が進行状況を表示できるように lPercentComplete パラメーターを更新する必要があります。 たとえば、ドライバーが "ウォームアップ" にかかる時間を推定できる場合は、WIA_STATUS_WARMING_UP に設定された hrErrorStatus を使用して、多数のデバイス メッセージを送信できます。 これにより、エラー ハンドラーは進行状況ダイアログを表示するとともに、ユーザーはこのダイアログ ボックスからの転送をキャンセルできるようになります。 IWiaErrorHandler::ReportStatus に渡される lPercentComplete パラメーターは、ドライバーが IWiaTransferCallback::WiaTransferParams メソッドで設定するのとまったく同じ lPercentComplete パラメーターです。 この例については、WDK CD の拡張 WIA モンスター ドライバーを参照してください。

エラー ハンドラーがモードレス ダイアログを閉じることができるように、Microsoft はデバイスの状態コード WIA_STATUS_CLEARを導入しました。 このメッセージは、WIA プロキシが現在表示されているデバイス メッセージとは異なるデバイス メッセージを受信したときに、現在モードレス UI を表示しているエラー ハンドラーに WIA プロキシによって送信されます。 プロキシは、次の場合にもWIA_STATUS_CLEAR メッセージを送信します。

ドライバーは、

IWiaTransferCallback::GetNextStream メソッドの呼び出し中に、

ストリーム/転送の最後に WIA_TRANSFER_MESSAGE_STATUS メッセージを送信します (現在、モードレス UI を表示するエラー ハンドラーがある場合)。

ドライバーが、WIA_STATUS_CLEAR メッセージ自体を送信しないようにしてください。

IWiaTransferCallback インターフェイスについては、Microsoft Windows SDK のドキュメントを参照してください。