IWiaUIExtension COM インターフェイス
IWiaUIExtension インターフェイスを実装する場合、IWiaUIExtension メソッドの一部、またはすべてを実装、または一切実装しないことが可能です。
特定のメソッドが E_NOTIMPL を返し、システム提供の代替メソッドを使用できる場合、代わりに使用されます。
IWiaUIExtension インターフェイスには、次のメソッドが用意されています。
Method | 説明 |
---|---|
IWiaUIExtension::DeviceDialog | 既定のシステム ユーザー インターフェイスを置き換えるカスタム ユーザー インターフェイスを提供します。 |
IWiaUIExtension::GetDeviceBitmapLogo | デバイスのカスタム ビットマップ ロゴを取得します。 |
IWiaUIExtension::GetDeviceIcon | カスタム デバイス アイコンを取得します。 |
IWiaUIExtension::DeviceDialog は、デバイス ダイアログ ボックスの実装に必要なすべてのデータを含む DEVICEDIALOGDATA 構造 (wiadevd.h で宣言) へのポインターを受け入れます。
デバイス ダイアログは、次の 4 つの制約に従い、モーダル Win32 ダイアログ ボックスとして実装する必要があります。
pDeviceDialogData-->ppWiaItems で返される項目の配列は、CoTaskMemAlloc を使用して割り当てる必要があり、CoTaskMemFree を使用してアプリケーションによって解放されます (両方の関数については、Microsoft Windows SDK のドキュメントを参照してください)。
pDeviceDialogData -->pIWiaItemRoot に格納されているルート項目を破棄または解放しないでください。 また、ルート項目が無効にならないようにする必要があります。 たとえば、WIA_CMD_SYNCHRONIZE デバイス コマンドを呼び出してはなりません。
ユーザーがデータ転送を要求したことを示す S_OK、ユーザーが転送をキャンセルしたことを示す S_FAL Standard Edition を返します。
メモリまたはリソース リークがアプリケーションでインプロセスで実行されるため、このコンポーネントに導入されないように注意してください。
IWiaUIExtension::GetDeviceIcon を使用すると、アプリケーションでドライバー指定のアイコンを使用できます。 リソース リークを回避するには、LR_SHARED フラグを使用し、このアイコンを LoadImage と共に読み込む必要があります (Windows SDK のドキュメントを参照)。
IWiaUIExtension::GetDeviceBitmapLogo を使用すると、アプリケーションは必要に応じてデバイスとベンダーのロゴを表示できます。 現時点では、このメソッドを使用するシステム コンポーネントはありません。 ビットマップは、CreateDIBSection を使用して DIB で割り当てられたビットマップであるか、LR_CREATEDIB Standard Edition CTION フラグで LoadImage を使用して読み込まれる必要があります (詳細については、Windows SDK のドキュメントを参照してください)。 これにより、アプリケーションは任意のパレット情報を抽出し、現在または変化する表示色の深さに適応することができます。
WIA スキャナー ドライバーでカスタム スキャン ダイアログ ボックスを実装するには、IWiaUIExtension::DeviceDialog メソッド (上記の 4 つの制約を含む) を使用して Win32 モーダル ダイアログ ボックスを作成し、DEVICEDIALOGDATA 構造を DialogBoxParam 関数の dwInitParam パラメーターに LPARAM として渡します。
デバイス ダイアログ ボックス自体がデータ転送を管理するものではないので、ご注意ください。 このダイアログ ボックスは、ドライバーからアプリケーションへの IWiaItem インターフェイス ポインターの配列へのポインターを返すだけです (プロパティが設定されています)。 転送メカニズムと形式のネゴシエートは、アプリケーションに拠ることになります。