Lekcja ta będzie o używaniu ikon i kursorów w naszym programie.

Po pierwsze, aby użyć ikony potrzebna będzie nam ikona i kursor w zasobach naszego programu. Powiedzmy, że mamy taki plik zasobów:

Moja_ikona ICON
"moja ikona.ico"

Moj_kursor CURSOR
"mój kursor.cur"

Ikona naszego programu.

Każde okno ma swoje ikony, możemy je ustawić. Ustawia się je w polu struktury WNDCLASSEX, przypomnij sobie jak pisaliśmy:

...
wc.hIconSm=LoadIcon(
0
,IDI_APPLICATION);
//ikona okna

...

To właśnie to pole jest odpowiedzialne za te ikony. Jak widać użyta jest tu funkcja LoadIcon, przyjżyjmy się jej budowie.

...
HICON LoadIcon(HINSTANCE uchwyt_programu,LPCSTR nazwa_ikony);
...

Funkcja LoadIcon słyży do ładowania ikon, zwraca nam uchyt do ikony(HICON), pierwszy argument to uchwyt programu w jakim ma szukać ikon. Ikony szuka się w zasobach programu. Jeżeli nie podamy tego parametru, to funkcja przeszuka wszystkie systemowe miejsca z ikonami. Drugi parametr jest typu LPCSTR, jest to wskaźnik do tekstu w WinAPI. Jeżeli ikonę ładujemy z jakiegoś naszego programu, podajemy tutaj nazwę ikony w zasobach programu. Jeżeli jako pierwszy parametr podamy 0, czyli wczytamy ikonę z systemu, mamy kilka do wyboru. Oto systemowe ikony:

IDI_APPLICATION - domyślna ikona aplikacji w Windowsie.
IDI_HAND - ikona błędu.
IDI_INFORMATION - ikona informacyjna.
IDI_QUESTION - ikona pytania.
IDI_WARNING - ikona "uwaga".
IDI_WINLOGO - logo windowsa 9x/2000, w Windows XP jest to ikona IDI_APPLICATION.

Jak widać wcześniej nie wiedząc o tym, wczytywalismy domyślną ikonę aplikacji w Windowsie.

Teraz zajmiemy się wczytywaniem własnej ikony z naszych zasobów w programie. Aby to zrobić musimy podać funkcji LoadIcon jako pierwszy argument uchwt naszego programu, natomiast jako drugi podajemy nazwę naszej ikony z zasobów.

...
wc.hIconSm=LoadIcon(hInst,
"Moja_ikona"
);
//hInst - uchyt programu

...

Kursor naszego okna

Oknu podczas tworzenia, ładujemy odpowiednie ikony. Tak samo robimy z kursorem, podczas tworzenia okna trzeba go załadować i tu jest bardzo podobnie jak z ikoną. W strukturze WNDCLASSEX mamy odpowiedni element, który mówi o kursorze na danym oknie.

...
wc.hCursor=LoadCursor(
0
,IDC_ARROW);
//kursor

...

Jak widać kursor ładujemy funkcją LoadCursor(). Jest ona podobna do LoadIcon, z tym, że zamiast Ikony, ładujemy kusror. Jako pierwszy agrument przyjmuje uchwyt aplikacji, w której ma szukać kursora. Analogicznie do LoadIcon, podanie 0, powoduje przeszukanie zasobów systemowych. Drugi argument to nazwa kursora. I to także mamy standardowe kursory, pochodzące z systemu:

IDC_ARROW - systemowa strzałka
IDC_APPSTARTING - kursor z klepsydrą
IDC_WAIT - klepsydra
IDC_HAND - ręka jako kursor
IDC_CROSS - kursor krzyżyk
IDC_HELP - kursor pomocy

Są jeszcze inne, ale myslę, że te powinny ci wystarczyć. W praktyce w większości programów stosuje sie standardowy kursor(strzałkę IDC_ARROW), ewentualnie, niektóre programy mogą mieć swoje kursory z zasobów. Jak wczytać kursor z zasobów, tak samo jak ikone, tyle że wczytujemy kursor.

...
wc.hCursor=LoadCursor(hInst,
"Moj_kursor"
);
//hInst - uchyt programu

...

Wiemy już jak wyposażać nasze okno w swoje ikony i kursory, ładowane z zasobów. Proponuję teraz zaoparzyć się w program do tworzenia ikon i kursorów i spróbować własnych sił.

Do ładowania ikon i kursorów z zasobów swobodnie wystarczy nam fucnkja LoadCursor, czy LoadIcon. W WinAPI jest jeszcze inna funkcja do ładowania grafiki. Jej nazwa to LoadImage. Niesie ona znacznie większe możliwości niż LoadIcon, czy LoadCursor. Więcej o niej w dziale GDI. Do wczytania kursorów i ikon z zasobów do klasy okien posługujmy się poznanymi funkcjami LoadIcon i LoadCursor.