Nastavení obrázků pro jednotlivé položky
Různé typy obrázků používaných rozšířenou položkou pole se seznamem jsou určeny hodnotami v iImage, iSelectedImage a iOverlay členy COMBOBOXEXITEM struktury. Každá hodnota je index obrázku v přidruženém seznamu imagí ovládacího prvku. Ve výchozím nastavení jsou tito členové nastaveni na hodnotu 0, což způsobí, že ovládací prvek nezobrazí žádný obrázek položky. Pokud chcete použít obrázky pro určitou položku, můžete strukturu odpovídajícím způsobem upravit, a to buď při vložení položky pole se seznamem, nebo úpravou existující položky pole se seznamem.
Nastavení obrázku pro novou položku
Pokud vkládáte novou položku, inicializujete členy struktury iImage, iSelectedImage a iOverlay se správnými hodnotami a pak vložte položku s voláním CComboBoxEx::InsertItem.
Následující příklad vloží novou rozšířenou položku pole se seznamem (cbi
) do rozšířeného ovládacího prvku pole se seznamem (m_comboEx
), přičemž poskytuje indexy pro všechny tři stavy obrázků:
COMBOBOXEXITEM cbi = { 0 };
COMBOBOXEXITEM cbi = { 0 };
CString str;
int nItem;
cbi.mask = CBEIF_IMAGE | CBEIF_INDENT | CBEIF_OVERLAY |
CBEIF_SELECTEDIMAGE | CBEIF_TEXT;
cbi.iItem = 0;
cbi.pszText = _T("Item 0");
cbi.iImage = 0;
cbi.iSelectedImage = 1;
cbi.iOverlay = 2;
cbi.iIndent = (0 & 0x03); //Set indentation according
//to item position
nItem = m_ComboBoxEx.InsertItem(&cbi);
ASSERT(nItem == 0);
Nastavení obrázku pro existující položku
Pokud upravujete existující položku, musíte pracovat s maskou členu COMBOBOXEXITEM struktury.
Úprava existující položky tak, aby používala obrázky
Deklarujte strukturu COMBOBOXEXITEM a nastavte datový člen masky na hodnoty, které vás zajímají.
Pomocí této struktury proveďte volání CComboBoxEx::GetItem.
Upravte masku, iImage a iSelectedImage členů nově vrácené struktury pomocí příslušných hodnot.
Volání CComboBoxEx::SetItem a předání změněné struktury.
Následující příklad ukazuje tento postup prohozením vybraných a nevybraných obrázků třetí rozšířené položky pole se seznamem:
COMBOBOXEXITEM cbi = {0};
int iImageTemp;
cbi.mask = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE;
cbi.iItem = 0;
m_ComboBoxEx.GetItem(&cbi);
iImageTemp = cbi.iImage;
cbi.iImage = cbi.iSelectedImage;
cbi.iSelectedImage = iImageTemp;
VERIFY(m_ComboBoxEx.SetItem(&cbi));