Gibt es einen Weg, um verschiedene Größen von der Windows-system-icons in .NET?
Insbesondere würde ich mag in der Lage sein, um die kleine (16 x 16) - Symbole zur Laufzeit.
Habe ich versucht, dieses:
new Icon(SystemIcons.Error, SystemInformation.SmallIconSize)
Die angeblich "versuche zu finden, eine version des symbols entspricht der angeforderten Größe", aber es ist immer noch, dass Sie mir einen 32 x 32-Symbol. Ich habe auch versucht:
Size iconSize = SystemInformation.SmallIconSize;
Bitmap bitmap = new Bitmap(iconSize.Width, iconSize.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
g.DrawIcon(SystemIcons.Error, new Rectangle(Point.Empty, iconSize));
}
Aber das skaliert nur das 32 x 32-Symbol unten in einen hässlichen 16 x 16.
Habe ich mir überlegt so ziehen Sie Symbole aus dem VS-Image-Bibliothek, aber ich wirklich wollen, um Sie zu variieren dynamisch mit dem OS (XP-Symbole auf XP, Vista icons, Vista, etc.). Ich bin bereit zu P/Invoke-wenn es das ist, was es braucht.
InformationsquelleAutor Andrew Watt | 2010-06-13
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie Sie selber skalieren. Die SystemIcons, als Sie heraus gefunden, nur 32x32. Sie können leicht skalieren auf 16 oder 48 wie erforderlich. Verwenden interpolation, um einen netten bicubic resize. Wir haben dies getan viele Male erfolgreich zu erstellen, sehr gut aussehende 16x16 erhältlich und es funktioniert einwandfrei, ob mit XP oder Vista oder 7.
Werden Sie sicher, dass Sie das MSDN Beispiel hier, vor allem Ihre Nutzung der
DestroyIcon
Methode, um aufzuräumen den Griff, wenn Sie fertig sind.Icon
Objekt aus dem obigen code?GetHicon
auf die neu angelegte Bitmap und dann kann die statischeIcon.FromHandle
Methode. Achten Sie auf Ihre Nutzung der externenDestroyIcon
Methode. Die Arbeit mit Griffen, die direkt fühlt hacky in C# und erfordert das ordnungsgemäße Aufräumen aber naja.Gewickelt ich P/Aufrufen. Es stellt sich heraus, dass beide LoadIcon und LoadImage zeigen das gleiche (fehlerhaft, IMO) Verhalten
SystemIcons
. Aber SHGetStockIconInfo, die verfügbar ist auf Vista und höher, funktioniert wie erwartet, wieder die kleinen, offiziellen, designer-gestaltete Symbole, die ich gesucht habe.Unter XP und früher, ich bin zurück zurück, um mit den kleinen icons in der VS-Image-Bibliothek.
Wenn Sie daran denken, P/Aufrufen
SHGetStockIconInfo
selbst, ich empfehle, einen Blick auf die Windows API Code Pack zu sehen, wie.In der Dokumentation für diese Konstruktor-überladung sagt:
Ich denke, dass dieses Symbol hat nur eine Größe (32×32); und der einzige Weg, um verschiedene Größen zu skalieren dieses Symbol, um Ihre Größe, wie in deinem Beispiel.