Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++, WinAPI] Ikona programu

Ostatnio zmodyfikowano 2012-10-22 20:43
Autor Wiadomość
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.
P-67265
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 ./.
P-67268
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.
P-67269
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...
P-67273
xevuel
» 2012-10-22 15:17:23
» Kurs WinAPI, C++ » PodstawyZasoby lekcja

Pola hIcon oraz hIconSm odpowiadają za ikonkę na pasku zadań oraz tą w lewym górnym rogu aplikacji. Przykładowy program:

main.cpp
C/C++
wincl.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 ;)
P-67291
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 :

C/C++
wincl.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
wincl.hCursor = LoadCursor( NULL, IDC_ARROW );

I nie mogę zmienić na :

C/C++
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 :

C/C++
#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





P-67303
xevuel
» 2012-10-22 20:15:03
C/C++
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
P-67309
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 :)
P-67313
« 1 »
  Strona 1 z 1