WinApi C++ TreeView nie pokazuje Ikonek

0

Witam. Postepuje według poradnika: http://cpp0x.pl/kursy/Kurs-WinAPI-C++/Kontrolki/Drzewo-TreeView/206
Do dodania nowego elementu drzewa uzywam funkcji:

 
struct sPokoj *f_DodajPokoj(int Ikona, char* nazwa, char* opis){
    struct sPokoj *nowy = new sPokoj;
    nowy->nazwa = nazwa;
    nowy->opis = opis;

    nowy->tvi.mask = TVIF_TEXT;
    nowy->tvi.pszText = nazwa;
    nowy->tvi.iImage = nowy->tvi.iSelectedImage = 1;

    TVINSERTSTRUCT tvins;
    tvins.item = nowy->tvi;
    tvins.hParent = tvins.hInsertAfter = TVI_ROOT;

    nowy->hPokoj = TreeView_InsertItem( Okno.h_Kanaly, & tvins );

    TVITEM tvi;
    tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
    tvi.iImage = nowy->tvi.iSelectedImage = 3;
    tvi.hItem = nowy->hPokoj;
    struct TEST test;
    tvi.lParam =( LPARAM ) & test;
    TreeView_SetItem( Okno.h_Kanaly, & tvi );

    return nowy;
};

Ikonki wczytuję tutaj:

 
BOOL Rejestracja(HINSTANCE hInst){
    if(!RejestrujPrzycisk(hInst))
        return false;
    if(!RejestrujCheckBox(hInst))
        return false;

    HIMAGELIST himl;
    HBITMAP hbmp;
    SHORT n1, n2;

    himl = ImageList_Create( 16, 16, FALSE, 2, 0 );

    hbmp = ( HBITMAP ) LoadImage( NULL, "BITMAPY\\IconPokoj.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
    n1 = ImageList_Add( himl, hbmp,( HBITMAP ) NULL );
    DeleteObject( hbmp );

    hbmp = ( HBITMAP ) LoadImage( NULL, "BITMAPY\\IconUzytkownik.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
    n2 = ImageList_Add( himl, hbmp,( HBITMAP ) NULL );
    DeleteObject( hbmp );

    TreeView_SetImageList( Okno.h_Kanaly, himl, TVSIL_NORMAL );

    return true;
}

Tu sa struktury:

 
struct TEST{
    int Bla;
    char BlaBla;
    double BlaBlaBla;
};
struct sPokoj{
    TVITEM tvi;
    HTREEITEM hPokoj;
    string nazwa;
    string opis;
};

Niestety nie widze żadnej ikonki przy elementach:

 
            f_DodajPokoj(0, "pokoj 1", "");
            f_DodajPokoj(0, "pokoj 2", "");
            f_DodajPokoj(0, "pokoj 3", "");

macie jakieś pomysły?

0

uaktualniam, dalej nie mogę znaleźć rozwiązania problemu :(

0

Dodałeś dwa obrazki czyli z indeksami 0 i 1, zaś wyświetlić chcesz ten z numerem 3. WTF?

0

Potem to zmieniłem w programie, zapomnialem dodac. Niestety nadal nie widać obrazków. Sprawdziłem ścieżkę do plików graficznych. Kombinowałem wczytac ".ico" i ".bmp". Nie wiem, czy prawidłowo wczytuje bitmapę, gdyz w kursie wczytują z zasobów, a ja chce to zrobić po ścieżce. To moje pierwsze starcie z TreeView i to strasznie zagmatwana kontrolka :(

0

A bieżącym katalogiem (GetCurrentDirectory()) jest co?

0

Jesli chodzi o to, gdzie znajduje sie folder to mam:

  1. Fodler z projektem, plikami .h itp.
    W nim:
    a) folder release a w nim:
    - plik wyjściowy .exe
    - folder BITMAPY a w nim bitmapy...
    b) fodler BITMAPY a w nim bitmapy

Z funkcji dowiedziałem sie, że folderem roboczym jest folder z projektem (nie release), ale w nim także mam wklejony folder z bitmapami.

1

Nie możesz poprzestawać na „nie działa”. Musisz się dowiedzieć na którym etapie coś idzie nie tak.

Co zwraca LoadImage? NULL? A jeśli NULL, to co zwraca GetLastError wywołane natychmiast w następnej linijce?
Wynik koniecznie przypisz do zmiennej

DWORD err = GetLastError();

Nigdy nie rób bezpośrednio czegoś tego typu

// printf("%ud", GetLastError());

bo to zakrzywia wynik (i potem zdziwienie że GetLastError zwraca ERROR_SUCCESS).

A jeśli LoadImage zwraca nie NULL, to co zwraca ImageList_Add? W razie błędu zwraca -1. I tu znowu możesz sprawdzić GetLastError.

0

Sprawdzone, każdy obrazek wczytuje sie prawidłowo. Także funkcja ImageList_Create() nie zwraca NULL. jak wróce do domu sprawdzę, czy czegoś ze wskaxnikami nie pomyliłem, bo ciężko sie skupić na 1 w robocie. Więcej informacji o tym co udało mi się wygrzebać prześle około 16.30.

Ps.
Myslę, że cos namieszałem w:

 
struct sPokoj *f_DodajPokoj(int Ikona, char* nazwa, char* opis){
    struct sPokoj *nowy = new sPokoj;
    nowy->nazwa = nazwa;
    nowy->opis = opis;

    nowy->tvi.mask = TVIF_TEXT;
    nowy->tvi.pszText = nazwa;
    nowy->tvi.iImage = nowy->tvi.iSelectedImage = 0;

    TVINSERTSTRUCT tvins;
    tvins.item = nowy->tvi;
    tvins.hParent = tvins.hInsertAfter = TVI_ROOT;

    nowy->hPokoj = TreeView_InsertItem( Okno.h_Kanaly, & tvins );

    TVITEM tvi;
    tvi.mask = TVIF_HANDLE | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
    tvi.iImage = nowy->tvi.iSelectedImage = 0;
    tvi.hItem = nowy->hPokoj;
    struct TEST test;
    tvi.lParam =( LPARAM ) & test;
    TreeView_SetItem( Okno.h_Kanaly, & tvi );

    return nowy;
};

//////////////////////*//////////*/////////////////////////////////////

struct TEST{
    int Bla;
    char BlaBla;
    double BlaBlaBla;
};
struct sPokoj{
    TVITEM tvi;
    HTREEITEM hPokoj;
    string nazwa;
    string opis;
};

1 użytkowników online, w tym zalogowanych: 0, gości: 1