Partager via


Interface COM IWiaUIExtension

Si vous implémentez l’interface IWiaUIExtension , vous pouvez implémenter aucune méthode, certaines ou toutes les méthodes IWiaUIExtension .

Si une méthode particulière retourne E_NOTIMPL, l’alternative fournie par le système et une méthode est disponible, elle est utilisée à la place.

L’interface IWiaUIExtension fournit les méthodes suivantes :

Méthode Description
IWiaUIExtension ::D eviceDialog Fournit une interface utilisateur personnalisée qui remplace l’interface utilisateur système par défaut.
IWiaUIExtension ::GetDeviceBitmapLogo Obtient un logo bitmap personnalisé pour l’appareil.
IWiaUIExtension ::GetDeviceIcon Obtient une icône d’appareil personnalisé.

IWiaUIExtension ::D eviceDialog accepte un pointeur vers une structure DEVICEDIALOGDATA (déclarée dans wiadevd.h), qui contient toutes les données nécessaires pour implémenter la boîte de dialogue de l’appareil.

La boîte de dialogue de l’appareil doit être implémentée en tant que boîte de dialogue Win32 modale, sous réserve des quatre contraintes suivantes :

  1. Le tableau d’éléments retourné dans pDeviceDialogData-->ppWiaItems doit être alloué à l’aide de CoTaskMemAlloc et est libéré par l’application à l’aide de CoTaskMemFree (voir la documentation Microsoft Windows SDK pour les deux fonctions).

  2. Vous ne devez pas détruire ou libérer l’élément racine stocké dans pDeviceDialogData -->pIWiaItemRoot. Vous ne devez pas non plus rendre l’élément racine non valide. Pour instance, vous ne devez pas appeler la commande d’appareil WIA_CMD_SYNCHRONIZE.

  3. Retourne S_OK pour indiquer que l’utilisateur a demandé un transfert de données et S_FALSE pour indiquer que l’utilisateur a annulé le transfert.

  4. Veillez à ce que les fuites de mémoire ou de ressources ne soient pas introduites dans ce composant, car il s’exécute in-process dans l’application.

IWiaUIExtension ::GetDeviceIcon permet à l’application d’utiliser une icône spécifiée par le pilote. Pour éviter les fuites de ressources, cette icône doit être chargée avec LoadImage, à l’aide de l’indicateur LR_SHARED (voir la documentation du Kit de développement logiciel (SDK) Windows).

IWiaUIExtension ::GetDeviceBitmapLogo permet à l’application de présenter les logos de l’appareil et du fournisseur le cas échéant. Actuellement, aucun composant système n’utilise cette méthode. La bitmap doit être une bitmap allouée par DIB à l’aide de CreateDIBSection, ou chargée à l’aide de LoadImage avec l’indicateur LR_CREATEDIBSECTION (pour plus d’informations, consultez la documentation du Kit de développement logiciel (SDK) Windows). Cela permet à l’application d’extraire toutes les informations de palette et de s’adapter aux profondeurs de couleur d’affichage actuelles ou changeantes.

Pour implémenter une boîte de dialogue d’analyse personnalisée dans un pilote de scanneur WIA, utilisez la méthode IWiaUIExtension ::D eviceDialog (avec les quatre contraintes répertoriées ci-dessus) pour créer une boîte de dialogue modale Win32 et passer la structure DEVICEDIALOGDATA au paramètre dwInitParam de la fonction DialogBoxParam en tant que LPARAM.

Il est important de se rappeler que la boîte de dialogue de l’appareil elle-même ne gère pas les transferts de données. La boîte de dialogue retourne simplement un pointeur vers un tableau de pointeurs d’interface IWiaItem (avec des propriétés définies) du pilote vers l’application. Il appartient ensuite à l’application de négocier le mécanisme et le format de transfert.