0

我正在使用 MFC 中的 CComboBoxEx 控件为浏览器应用程序实现一个地址框,它显示地址和相关的站点图标。

根据此链接: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 不会让新图标在不更新时显示出来。

对此的任何经验或提示将不胜感激。非常感谢。

4

2 回答 2

0

我曾经遇到过类似的问题。后来我发现原因是我创建它时的CImageList。

在我改变之后

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

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

收到才更新的现象WM_KILLFOCUS消失了。但很可惜,画面比以前少了一点美感。

于 2013-08-01T00:47:02.177 回答
0

可能您需要再次调用CComboBoxEx::SetImageList

于 2011-07-29T01:49:55.410 回答