Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W poniższych tematach opisano sposób wykonywania określonych zadań związanych z ikonami:
Tworzenie ikony
Poniższy przykład tworzy dwa uchwyty ikon: jeden dla standardowej ikony pytania i jeden dla ikony niestandardowej dołączonej jako zasób w pliku definicji zasobów aplikacji.
HICON hIcon1 = LoadIcon(NULL, IDI_QUESTION);
HICON hIcon2 = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON));
Aplikacje powinny implementować niestandardowe ikony jako zasoby i używać modułu LoadIcon lub LoadImage , a nie tworzyć ikon w czasie wykonywania. Korzystanie z zasobów ikon pozwala uniknąć zależności urządzenia, upraszcza lokalizację i umożliwia aplikacjom udostępnianie projektów ikon.
Element CreateIcon może służyć do tworzenia niestandardowej ikony monochromatycznej w czasie wykonywania. Użyj pomocnika i mapy symboli PackCursorMasks z obszaru Tworzenie kursora, a następnie utwórz ikonę z jedną płaszczyzną i jednym bitem na piksel:
HICON hIcon = CreateIcon(hInstance, CURSOR_SIZE, CURSOR_SIZE, 1, 1, abAnd, abXor);
Aby utworzyć ikonę z mieszaniem alfa w czasie wykonywania, zobacz Tworzenie kursora z mieszaniem alfa — przekaż TRUE dla fIcon w strukturze ICONINFO, aby utworzyć ikonę zamiast kursora.
Przed zamknięciem aplikacja musi użyć polecenia DestroyIcon , aby zniszczyć dowolną ikonę uzyskaną z polecenia CreateIcon, CreateIconIndirect, CreateIconFromResourceEx bez LR_SHARED flagi lub LoadImage bez flagi LR_SHARED . Ikony załadowane za pomocą modułu LoadIcon lub utworzone lub załadowane z LR_SHAREDprogramem są współużytkowane zasoby systemowe i nie mogą być niszczone.
Pobieranie rozmiaru ikony
Zobacz Pobieranie rozmiaru kursora. Przykład działa identycznie dla ikon — przekazuje element HICON zamiast HCURSOR.
Wyświetlanie ikony
Aplikacja może ładować i tworzyć ikony do wyświetlania w obszarze klienta aplikacji lub oknach podrzędnych. W poniższym przykładzie pokazano, jak narysować ikonę w obszarze klienta okna, którego kontekst urządzenia (DC) jest identyfikowany przez parametr hdc.
DrawIcon(hdc, 10, 20, hIcon1);
System automatycznie wyświetla ikony klas dla okna. Aplikacja może przypisywać ikony klas podczas rejestrowania klasy okna. Aplikacja może zastąpić ikonę klasy za pomocą funkcji SetClassLongPtr . Ta funkcja zmienia domyślne ustawienia okna dla wszystkich okien danej klasy. Poniższy przykład zastępuje ikonę klasy ikoną, której identyfikator zasobu to 480.
SetClassLongPtr(hWnd, GCLP_HICON,
(LONG_PTR)LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON)));
Aby uzyskać więcej informacji na temat klas okien, zobacz Klasy okien.
Udostępnianie zasobów ikon
Poniższy kod używa funkcji CreateIconFromResourceEx, DrawIconi LookupIconIdFromDirectoryExi kilku funkcji zasobów, aby utworzyć uchwyt ikony na podstawie danych ikon z innego pliku wykonywalnego. Następnie wyświetla ikonę w oknie.
Ostrzeżenie o zabezpieczeniach: Użycie LoadLibrary niepoprawnie może naruszyć bezpieczeństwo aplikacji przez załadowanie nieprawidłowej biblioteki DLL. Zapoznaj się z dokumentacją LoadLibrary, aby uzyskać informacje na temat prawidłowego ładowania bibliotek DLL z różnymi wersjami systemu Windows.
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);