[MFC] ListControl / CImageList a *.ico w kolumnach.

0

Mam kontrolkę ListControl = m_cLista . Dodałem do niej zbiór bitmap CImageList = CMyList .

CMyList.Create(::GetSystemMetrics(SM_CXSMICON),
::GetSystemMetrics(SM_CYSMICON),
ILC_COLOR32 | ILC_MASK , 0, 0))
{
CMyList.Add(::AfxGetApp()->LoadIcon(IDI_AZ));
CMyList.Add(::AfxGetApp()->LoadIcon(IDI_ZA));
}
m_cLista.SetImageList(CMyList,LVSIL_SMALL);

Ikona IDI_AZ jest 32x32x24bpp.

Aby dodać ikone do wybranej kolumny:

m_cLista.InsertColumn(0,"Nazwa kolumny",LVCFMT_LEFT,50);

LVCOLUMN lvColumn;
m_cListaUAM.GetColumn(0, &lvColumn );

lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_IMAGE;
lvColumn.fmt = LVCFMT_LEFT | LVCFMT_IMAGE | LVCFMT_BITMAP_ON_RIGHT;
lvColumn.cx = m_cLista.GetColumnWidth(0);
lvColumn.pszText = "Nazwa kolumny";
lvColumn.iImage = 1;
if (kierunek==1) lvColumn.iImage = 0; //wybór czy IDI_AZ czy IDI_ZA

m_cLista.SetColumn(0, &lvColumn );

Pytanie. Ikony dodane są bez koloru transparentnego. Widać całe 32x32. Próbowałem różnie wypełniać je w edytorze ikon Visual'a. Ale nic nie pomagało....
Co robić ?

0

Ikony 24bpp są w ogóle transparentne? Nie jestem pewien, ale wydaje mi się, że:

  • ikony do 256 kolorów są przeźroczyste jak gif - jeden kolor jest wyświetlany jako przeźroczysty
  • ikony 32 bitowe mają kanał alpha
    Ikony 24 bitowe? Nie jestem pewien :]

Poza tym maski ILC_MASK o ile pamiętam używa się dla ikon które nie mają kanału alpha, czyli ILC_MASK i ILC_COLOR32 nie za bardzo ze sobą pasują.

0

UPS. Ikona jest 32x32x4bpp czyli 16 kolorów (testowałem też 16x16x4bpp)

Jeśli dobrze w przeglądarkach graficznych wyswietlana jest ikona (jest kolor transparentny) to na samym pasku kolumn kolor transparentny wyświetlany jest jako biały (jak tło całej reszty zawartości ListControl które jest białe)...
To nie wina, że nie mam koloru transparentnego.
Nie pomaga zmiana na: ILC_COLOR4
Nie pomaga usunięcie: ILC_MASK

Może należy inczej dołączać: CMyList.Add(::AfxGetApp()->LoadIcon(IDI_AZ));

Może można dołączać do kontrolki dwie listy bitmap (mi się nie udało):
m_cLista.SetImageList(&Cmoj->CMyList,LVSIL_SMALL);

Wstawiłem także kolor tła na czerwony: m_cLista.SetBkColor(RGB(192,0,0));

user image

i nic....

PS. Patrz strzałka kursora myszki - moj problem !

0

Dodawaj ikony poprzez AddIcon().

Edit: Chodziło mi o ImageList_AddIcon(), ale z tego co właśnie przeczytałem to CImageList.Add() jest jak najbardziej poprawne. Sorry za dezinformację...

0

Sorki, ale AddIcon nie odnalazłem, z jakiej to bibioteki [???]

0

Rozumiem, że do ImageList'a wrzucasz najpierw IDI_AZ i IDI_ZA, a następnie ikony kategorii wyświetlane przy itemach.
Jeżeli tak to czy upewniłeś się, że wszystkie są w jednakowym formacie? (te grzybki i domki nie wyglądają na 16 kolorowe obrazki :>)

Najlepiej wrzuć tutaj te ikonki, spróbuję coś pokombinować...

0

Co do kolejności ładawania, masz racje. Najpierw IDI_AZ,IDI_ZA a potem te kolorowe....

http://cas-archive.pigwa.net/dow/UamEdytor/bmpico.zip

Prócz *.ico IDI_AZ 16x16x4bpp i IDI_ZA 32x32x4bpp
są *.bmp....

Jeśli *.ico mogę zrobić w jednym formacie (tak było na początku ale experymentowałem)
to *.bmp są nie przewidywalne - doczytywane z HDD a dostarczane przez użytkowników programu.

PS. co do teorii jednego formatu. Przed doczytaniem tych "kolorowych" także nie mogę ustalić koloru transparentnego....

A tak to robię:
user image

0

Po pierwsze, zaraz po otworzeniu Twoich ikon w programie Microangelo Studio dostałem taki oto komuniat:

user image

Niestety, zmiana palety kolorów na pełne 16 kolorów niewiele pomogła... Problemem zdaje się być sposób, w jaki kontrolka ListView odmalowywuje ikony na headerze - jedynym rozwiązaniem jest wykonanie tej czynności na własną rękę (owner-drawing).

http://www.codeguru.com/Cpp/controls/listview/usingimages/article.php/c1009
http://groups.google.pl/group/comp.os.ms-windows.programmer.win32/browse_thread/thread/2ab51caee054e634/631536f0306b2e15%23631536f0306b2e15#

Pozdrawiam.

0

ZROBIŁEM - JEST KOLOR TRANSPARENTNY
We właściwościach kontroli - szukałem w Extended Styles coś ala "transparent" ale nic to nie pomogło, ale patrz niżej - teraz jest dobrze...

user image

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