Проблема обновления значка 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 ответа
Однажды я столкнулся с подобной проблемой. Позже я обнаружил, что причиной является CImageList, когда я его создал.
После того как я изменился
m_pImgLst->Create(32,20,ILC_COLOR32,2,2);
в
m_pImgLst->Create(32,20,ILC_COLOR16,2,2);
феномен обновления до WM_KILLFOCUS
получил исчез. Но жаль, что изображение немного менее красиво, чем раньше.