我正在使用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不会让新图标在没有更新时显示出来。
在这方面的任何经验或技巧都将非常感谢。非常感谢。
发布于 2011-07-29 09:49:55
您可能需要再次调用CComboBoxEx::SetImageList 。
发布于 2013-08-01 08:47:02
我曾经遇到过类似的问题。后来,我发现原因是我创建CImageList时的原因。
在我变了之后
m_pImgLst->Create(32,20,ILC_COLOR32,2,2);至
m_pImgLst->Create(32,20,ILC_COLOR16,2,2); 直到收到WM_KILLFOCUS才更新的现象消失了。但遗憾的是,图像没有以前那么漂亮了。
https://stackoverflow.com/questions/6862404
复制相似问题