Установка изображений для отдельного элемента
Различные типы изображений, используемых расширенным элементом поля со списком, определяются значениями в структуре iImage, iSelectedImage и iOverlay структуры CO МБ OBOXEXITEM. Каждое значение — это индекс изображения в связанном списке изображений элемента управления. По умолчанию эти элементы имеют значение 0, что приводит к тому, что элемент управления не отображает изображение элемента. Если вы хотите использовать изображения для определенного элемента, можно изменить структуру соответствующим образом при вставке элемента поля со списком или путем изменения существующего элемента поля со списком.
Настройка изображения для нового элемента
При вставке нового элемента инициализируйте элементы структуры iImage, iSelectedImage и iOverlay с соответствующими значениями, а затем вставьте элемент с вызовом CComboBoxEx::InsertItem.
В следующем примере вставляется новый расширенный элемент поля со списком () в расширенный элемент управления со списком (cbi
m_comboEx
), предоставляющий индексы для всех трех состояний изображения:
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);
Настройка образа для существующего элемента
При изменении существующего элемента необходимо работать с элементом маски структуры CO МБ OBOXEXITEM.
Изменение существующего элемента для использования изображений
Объявите структуру CO МБ OBOXEXITEM и задайте элемент данных маски значениям, которые вы хотите изменить.
Используя эту структуру, вызовите CComboBoxEx::GetItem.
Измените элементы маски, iImage и iSelectedImage новой возвращаемой структуры с помощью соответствующих значений.
Вызов CComboBoxEx::SetItem, передав измененную структуру.
В следующем примере показана эта процедура, переключив выбранные и неизбранные изображения третьего расширенного элемента поля со списком:
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));