51 votes

Comment utiliser les icônes d'avertissement/erreur standard de Windows dans mon application WPF ?

Je crée une boîte de dialogue d'erreur personnalisée dans mon application WPF et je veux utiliser une fonction icône d'erreur standard de Windows . Puis-je obtenir l'icône spécifique au système d'exploitation à partir de WPF ? Si ce n'est pas le cas, quelqu'un sait-il où obtenir des .pngs avec leur transparence ? Ou sait-il où aller les extraire dans Windows ?

Jusqu'à présent, mes recherches n'ont rien donné.

0 votes

Voulez-vous la même image quelle que soit la plate-forme, ou voulez-vous l'icône correspondant à la version actuelle de Windows (y compris les versions futures) ?

0 votes

Idéalement, une icône qui ressemble à l'icône standard de cette version de Windows. Mais je peux me contenter d'obtenir le standard pour Vista/7.

41voto

modosansreves Points 1678

Il existe un SystemIcons mais il faut l'ajuster pour les besoins de WPF (c'est-à-dire convertir la classe Icon a ImageSource ).

1 votes

Vous avez complètement supprimé le besoin de p/invoke. Bien vu.

4 votes

Au fait, stackoverflow.com/questions/1127647/ cela peut aider

3 votes

Cet autre fil a environ quatre étapes de trop. Utilisez msdn.microsoft.com/fr/us/library/

29voto

Leniel Macaferi Points 38324

La grande majorité des développeurs ne savent pas que Visual Studio est livré avec une bibliothèque d'images. Voici donc deux liens qui le mettent en évidence :

A propos de l'utilisation Bibliothèque d'images de Microsoft Visual Studio 2008 .

1 votes

Merci pour cela, mais si je ne me trompe pas, vous devez découper chaque icône vous-même. Aïe !

1 votes

Notez que la bibliothèque d'images n'est plus fournie avec Visual Studio, voir stackoverflow.com/a/20612263/1462295

6voto

Hans Passant Points 475940

Dans Visual Studio, utilisez Fichier + Ouvrir + Fichier et sélectionnez c : \windows\system32\user32.dll. Ouvrez le nœud Icône et double-cliquez sur 103. Sur ma machine, c'est l'icône d'erreur. En arrière, cliquez avec le bouton droit de la souris et sélectionnez Exporter pour l'enregistrer dans un fichier.

C'est le moyen le moins sûr. Ces icônes sont également disponibles dans Visual Studio. À partir de votre répertoire d'installation de Visual Studio, naviguez vers Common7 \VS2008ImageLibrary\xxxx\VS2008ImageLibrary.zip + VS2008ImageLibrary \Annotations &Boutons \ico_format\WinVista\error.ico. Le fichier redist.txt dans l'installation de Visual Studio vous donne explicitement le droit d'utiliser cette icône dans votre propre application.

0 votes

En fait, les ID des ressources non gérées sont #définis dans winuser.h et compilés dans des millions de programmes à l'heure actuelle. Ils ne changent donc pas. L'index dans la DLL, et même la DLL qui contient les icônes du système peuvent changer, mais l'ID de la ressource ne changera jamais.

0 votes

@Ben : non, MB_ICONERROR a la valeur 0x10. Pas proche de l'ID de la ressource. Encore une fois, si vous avez une connaissance particulière de la façon dont cela fonctionne, alors, puhleze, postez votre propre réponse.

0 votes

Vous semblez déterminé à tout rendre personnel plutôt que de laisser chaque sujet technique se suffire à lui-même. Dans ce cas particulier, vous pourriez vous instruire en lisant la réponse que je tapais au moment où vous avez posté la vôtre et plusieurs heures avant votre commentaire. L'ID de ressource OIC_HAND ou équivalent OIC_ERROR, qui est utilisé avec la macro MAKEINTRESOURCE, n'a pas changé depuis l'introduction de LoadImage et ne pourra jamais changer, puisqu'il est compilé dans des millions de programmes.

4voto

Ben Voigt Points 151460

Vous pouvez utiliser la classe SystemIcons de .NET pour les trois premières étapes, si la taille par défaut est correcte. réponse de modosansreves

Donc ça pourrait être aussi simple que :

 Imaging.CreateBitmapSourceFromHIcon(SystemIcons.Error.Handle)

2voto

Andreas Rejbrand Points 57164

Ne pouvez-vous pas simplement utiliser l'API de Windows ?

Exemple Delphi :

procedure TForm1.FormClick(Sender: TObject);
var
  errIcon: HICON;
begin
  errIcon := LoadIcon(0, IDI_ERROR);
  DrawIcon(Canvas.Handle, 10, 10, errIcon)
end;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X