Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In den folgenden Themen wird beschrieben, wie bestimmte Aufgaben im Zusammenhang mit Symbolen ausgeführt werden:
- Erstellen eines Symbols
- Abrufen der Symbolgröße
- Anzeigen eines Symbols
- Ressourcen für das Symbol „Teilen“
Erstellen eines Symbols
Im folgenden Beispiel werden zwei Symbolhandles erstellt: eines für das Standardfragesymbol und eines für ein benutzerdefiniertes Symbol, das als Ressource in der Ressourcendefinitionsdatei der Anwendung enthalten ist.
HICON hIcon1 = LoadIcon(NULL, IDI_QUESTION);
HICON hIcon2 = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON));
Anwendungen sollten benutzerdefinierte Symbole als Ressourcen implementieren und LoadIcon oder LoadImage verwenden, anstatt das Symbol zur Laufzeit zu erstellen. Die Verwendung von Symbolressourcen vermeidet Geräteabhängigkeit, vereinfacht die Lokalisierung und ermöglicht Anwendungen das Freigeben von Symboldesigns.
CreateIcon kann zum Erstellen eines benutzerdefinierten Monochromsymbols zur Laufzeit verwendet werden. Verwenden Sie die PackCursorMasks Hilfs- und Symbolzuordnung aus dem Erstellen eines Cursors, und erstellen Sie dann ein Symbol mit einer Ebene und einem Bit pro Pixel:
HICON hIcon = CreateIcon(hInstance, CURSOR_SIZE, CURSOR_SIZE, 1, 1, abAnd, abXor);
Informationen zum Erstellen eines alphaüberblendeten Symbols zur Laufzeit finden Sie unter Erstellen eines alphaüberblendeten Cursors — übergeben Sie TRUE für fIcon in ICONINFO, um anstelle eines Cursors ein Symbol zu erstellen.
Vor dem Schließen muss Ihre Anwendung DestroyIcon verwenden, um jedes Symbol zu zerstören, das mit CreateIcon, CreateIconIndirect, CreateIconFromResourceEx ohne das Flag LR_SHARED oder mit LoadImage ohne das Flag LR_SHARED bezogen wurde. Symbole, die mit LoadIcon geladen oder mit LR_SHARED erstellt oder geladen wurden, sind gemeinsam genutzte Systemressourcen und dürfen nicht zerstört werden.
Die Symbolgröße abrufen
Siehe Ermitteln der Cursorgröße. Das Beispiel funktioniert genauso für Symbole — übergeben Sie HICON anstelle von HCURSOR.
Anzeigen eines Symbols
Ihre Anwendung kann Symbole laden und erstellen, die im Clientbereich der Anwendung oder in untergeordneten Fenstern angezeigt werden. Im folgenden Beispiel wird veranschaulicht, wie sie ein Symbol im Clientbereich des Fensters zeichnen, dessen Gerätekontext (DC) durch den HDC-Parameter identifiziert wird.
DrawIcon(hdc, 10, 20, hIcon1);
Das System zeigt automatisch die Klassensymbole für ein Fenster an. Ihre Anwendung kann Beim Registrieren einer Fensterklasse Klassensymbole zuweisen. Ihre Anwendung kann ein Klassensymbol mithilfe der SetClassLongPtr-Funktion ersetzen. Diese Funktion ändert die Standardfenstereinstellungen für alle Fenster einer bestimmten Klasse. Im folgenden Beispiel wird ein Klassensymbol durch das Symbol ersetzt, dessen Ressourcenbezeichner 480 ist.
SetClassLongPtr(hWnd, GCLP_HICON,
(LONG_PTR)LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON)));
Weitere Informationen zu Fensterklassen finden Sie unter "Fensterklassen".
Freigeben von Symbolressourcen
Der folgende Code verwendet die Funktionen CreateIconFromResourceEx, DrawIcon und LookupIconIdFromDirectoryEx und mehrere der Ressourcenfunktionen, um ein Symbolhandle basierend auf Symboldaten aus einer anderen ausführbaren Datei zu erstellen. Anschließend wird das Symbol in einem Fenster angezeigt.
Sicherheitswarnung: Die Falsche Verwendung von LoadLibrary kann die Sicherheit Ihrer Anwendung gefährden, indem die falsche DLL geladen wird. Informationen zum ordnungsgemäßen Laden von DLLs mit verschiedenen Versionen von Windows finden Sie in der LoadLibrary-Dokumentation.
int cx = GetSystemMetrics(SM_CXICON);
int cy = GetSystemMetrics(SM_CYICON);
// LoadLibraryExW with LOAD_LIBRARY_AS_DATAFILE avoids running the DLL/EXE.
// Always use a fully qualified path to prevent DLL planting.
HINSTANCE hExe = LoadLibraryEx(TEXT("C:\\path\\to\\myapp.exe"), NULL,
LOAD_LIBRARY_AS_DATAFILE);
if (hExe == NULL)
return;
HRSRC hResource = FindResource(hExe, MAKEINTRESOURCE(440), RT_GROUP_ICON);
HGLOBAL hMem = LoadResource(hExe, hResource);
BYTE *lpResource = LockResource(hMem);
int nID = LookupIconIdFromDirectoryEx(lpResource, TRUE, cx, cy, LR_DEFAULTCOLOR);
hResource = FindResource(hExe, MAKEINTRESOURCE(nID), RT_ICON);
hMem = LoadResource(hExe, hResource);
lpResource = LockResource(hMem);
HICON hIcon1 = CreateIconFromResourceEx(lpResource,
SizeofResource(hExe, hResource), TRUE, 0x00030000,
cx, cy, LR_DEFAULTCOLOR);
DrawIcon(hdc, 10, 20, hIcon1);
FreeLibrary(hExe);