Sakatoku Temat założony przez niniejszego użytkownika |
[C++, WinAPI] Ikona programu » 2012-10-22 08:04:45 Witam mam problem przeorałem chyba cały internet ale nie znalazłem odpowiedzi ... Chodzi mi o tą cześć kodu która generuje code blocks: wincl.hIcon = LoadIcon( NULL, IDI_APPLICATION ); Chciałbym zmienić ikonkę programu ale nie daje rady wpisuje : wincl.hIcon = LoadIcon( hThisInstance, "small.ico" ); Niestety nic się nie zmienia co źle robię :( Ikonkę wrzucam do tego samego folderu co main.cpp Bardzo proszę o pomoc. |
|
Mrovqa |
» 2012-10-22 08:13:54 Ikonkę wrzuć do zasobów aplikacji i stamtąd spróbuj ją wczytaj.
PS jeżeli próbujesz ją tak wczytać z dysku, to wiesz o tym, że ikonka powinna znajdować się w katalogu, spod którego jest odpalona aplikacja? Tzn jeśli wywołasz aplikację tak: ./aplikacja/aplikacja.exe to ikona powinna znajdować się w ./. |
|
xevuel |
» 2012-10-22 08:17:44 Jeśli chodzi o ikonę, która pojawia się w eksploratorze Windows, to należy ją wrzucić do pliku .rc, i nic poza tym nie zmieniać w kodzie. Jeśli ikon będzie więcej, zostanie użyta ta z najniższym identyfikatorem. |
|
Sakatoku Temat założony przez niniejszego użytkownika |
» 2012-10-22 10:50:35 Ikonkę wrzuć do zasobów aplikacji i stamtąd spróbuj ją wczytaj.
PS jeżeli próbujesz ją tak wczytać z dysku, to wiesz o tym, że ikonka powinna znajdować się w katalogu, spod którego jest odpalona aplikacja? Tzn jeśli wywołasz aplikację tak: ./aplikacja/aplikacja.exe to ikona powinna znajdować się w ./. |
Próbowałem tak robić wrzuciłem gdzie się dało ale i tak jej nie "łapało" :( ------------------ Jeśli chodzi o ikonę, która pojawia się w eksploratorze Windows, to należy ją wrzucić do pliku .rc, i nic poza tym nie zmieniać w kodzie. Jeśli ikon będzie więcej, zostanie użyta ta z najniższym identyfikatorem. |
Ta metoda działa zrobiłem nowy plik i zmieniłem rozszerzenie na .rc resztę się domyśliłem co tam wpisać i działa skompilowany program ma teraz zamiast 7 KB ponad 30 i jest ikonka moja :) Aczkolwiek interesowała mnie ta zmiana wincl.hIcon nie wiem czemu nie działa szkoda pomyśle nad tym jeszcze :) Mam ostatnie pytanko jak zmienić ta mniejszą ikonkę czyli wincl.hIconSm tylko w pliku .rc? Co bym musiał wpisać tylko to bym chciał jeszcze wiedzieć :) W C# to było takie proste... |
|
xevuel |
» 2012-10-22 15:17:23 ZasobyPola hIcon oraz hIconSm odpowiadają za ikonkę na pasku zadań oraz tą w lewym górnym rogu aplikacji. Przykładowy program: main.cppwincl.hIcon = LoadIcon( GetModuleHandle( NULL ), MAKEINTRESOURCE( 1284 ) ); wincl.hIconSm = LoadIcon( GetModuleHandle( NULL ), MAKEINTRESOURCE( 2503 ) );
rc.rc 2503 ICON "icon.ico" 1284 ICON "icon2.ico"
Utwórz dwie ikony (różne od siebie, o nazwach icon.ico oraz icon2.ico, muszą być w katalogu z plikiem źródłowym) i sprawdź, jaki będzie efekt ;) |
|
Sakatoku Temat założony przez niniejszego użytkownika |
» 2012-10-22 19:47:17 Utwórz dwie ikony (różne od siebie, o nazwach icon.ico oraz icon2.ico, muszą być w katalogu z plikiem źródłowym) i sprawdź, jaki będzie efekt ;) |
Zrobiłem tak jak pan napisał efekt jest taki jaki chciałem :D
Jest ikonka programu, jest mała ikonka w lewym rogu, jest na pasku mała ikonka, jest ikonka jak wciskam alt+tab :)
Ale znowu mam problem :(
Wszystko ładnie pięknie cacy kiedy używam w code blocks "Frame based"
Kiedy natomiast użyje "Dialog based" nie widzę tam nigdzie :
wincl.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); wincl.hCursor = LoadCursor( NULL, IDC_ARROW );
I nie mogę zmienić na :
wincl.hIcon = LoadIcon( GetModuleHandle( NULL ), MAKEINTRESOURCE( 1284 ) ); wincl.hIconSm = LoadIcon( GetModuleHandle( NULL ), MAKEINTRESOURCE( 2503 ) );
Udało mi sie tylko dodac ikonke programu wpisujac 2503 ICON "icon.ico" do :
#include "resource.h"
2503 ICON "icon.ico"
DLG_MAIN DIALOGEX 6, 5, 194, 106
CAPTION "Code::Blocks Template Dialog App"
FONT 8, "Tahoma"
STYLE 0x10CE0804
BEGIN CONTROL "&Test", IDC_BTN_TEST, "Button", 0x10010000, 138, 5, 46, 15 CONTROL "&Quit", IDC_BTN_QUIT, "Button", 0x10010000, 138, 29, 46, 15 END
Jakąś podpowiedz poproszę :)
Jak tutaj dodać małą ikonę w lewym rogu wiem że to są pewnie noobskie pytania ale muszę to wiedzieć xD
|
|
xevuel |
» 2012-10-22 20:15:03 BOOL CALLBACK DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch( uMsg ) { case WM_INITDIALOG: SetClassLong( hwndDlg, GCL_HICON,( LONG ) LoadIcon( GetModuleHandle( NULL ), MAKEINTRESOURCE( 2 ) ) ); return TRUE;
Tak ma wyglądać początek Twojej procedury dialogowej. Dwójka to oczywiście identyfikator ikonki w zasobach (równie dobrze możesz tam dać 2503, ale wtedy w pliku .rc też musisz zmienić numer na 2503). Zmienia to zarówno ikonkę w lewym rogu, jak i na pasku zadań, niestety nie wiem, co zrobić, aby to rozdzielić. Poszukaj. //edit: Może to jest to czego szukasz: [MSDN] WM_SETICON |
|
Sakatoku Temat założony przez niniejszego użytkownika |
» 2012-10-22 20:43:15 Panie xevuel i panie Mrovqa dziekuje za pomoc w sprawie tych ikonek. Dostałem już dużo informacji tutaj które mi wystarcza na moje potrzeby.
Pozdrawiam :) |
|
« 1 » |