Проблема обновления значка MFC CComboBoxEx - PullRequest
0 голосов
/ 28 июля 2011

Я использую элемент управления 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 ]

0 голосов
/ 01 августа 2013

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

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

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

до

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

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

0 голосов
/ 29 июля 2011

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

...