Проблема обновления значка MFC CComboBoxEx

Я использую элемент управления CComboBoxEx в MFC для реализации адресного поля для приложения браузера, которое показывает адрес и значок соответствующего сайта.

По этой ссылке: http://msdn.microsoft.com/en-us/library/bb775788(v=vs.85).aspx, вызов CComboBoxEx::SetItem с iItem, равным -1, изменит элемент, отображаемый в данный момент при редактировании. контроль. Вот сегмент кода, который я использую для

HICON hIcon=LoadIcon(....);     //load the new icon from somewhere
imagelist.Replace(1,hIcon);     //replace the existing icon in the image list.
int nImage=1;

item.mask = CBEIF_IMAGE|CBEIF_SELECTEDIMAGE ;
item.iItem = -1;
item.iImage = nImage;
item.iSelectedImage = nImage;
SetItem(&item);

Я обнаружил, что иногда значок не обновляется после вызова SetItem. Он по-прежнему отображает предыдущий значок после установки нового значка. Обратите внимание, что индекс изображения никогда не меняется. Я обновляю только актуальный значок в списке изображений.

Интересно, что я обнаружил, что если я использую мышь, чтобы щелкнуть внутри поля со списком и затем щелкнуть внутри другого элемента управления, чтобы поле со списком потеряло фокус, значок обновится. Я мог бы сделать это программно, но я чувствую, что это обходной путь.

Кроме этого, вызов Invalidate или RedrawWindow в комбинированном окне не приведет к появлению нового значка, если он не обновляется.

Любой опыт или советы по этому вопросу будут с благодарностью. Большое спасибо.

2 ответа

Возможно, вам нужно снова вызвать CComboBoxEx::SetImageList.

Однажды я столкнулся с подобной проблемой. Позже я обнаружил, что причиной является CImageList, когда я его создал.

После того как я изменился

m_pImgLst->Create(32,20,ILC_COLOR32,2,2);

в

m_pImgLst->Create(32,20,ILC_COLOR16,2,2); 

феномен обновления до WM_KILLFOCUS получил исчез. Но жаль, что изображение немного менее красиво, чем раньше.

Другие вопросы по тегам