我在MFC中使用CComboBoxEx控件来实现浏览器应用程序的地址框,该应用程序显示地址和相关的站点图标。
根据此链接:http://msdn.microsoft.com/en-us/library/bb775788(v=vs.85).aspx,使用iItem为-1调用CComboBoxEx :: SetItem将修改当前显示在编辑控件中的项目。这是我用来
的代码段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时,如果不更新,则不会显示新图标。
我们将非常感谢您对此的任何经验或提示。非常感谢。
答案 0 :(得分:0)
您可能需要再次致电CComboBoxEx::SetImageList 。
答案 1 :(得分:0)
我曾经遇到过类似的问题。后来我发现创建它时原因是CImageList。
我改变了
m_pImgLst->Create(32,20,ILC_COLOR32,2,2);
到
m_pImgLst->Create(32,20,ILC_COLOR16,2,2);
在收到WM_KILLFOCUS
之前更新的现象消失了。但遗憾的是,这张照片比以前更漂亮了。