MFC CComboBoxEx 图标更新问题
Posted
技术标签:
【中文标题】MFC CComboBoxEx 图标更新问题【英文标题】:MFC CComboBoxEx icon update issue 【发布时间】:2011-07-28 16:32:14 【问题描述】:我在 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 不会让新图标在未更新时显示出来。
对此的任何经验或提示将不胜感激。非常感谢。
【问题讨论】:
【参考方案1】:您可能需要再次致电CComboBoxEx::SetImageList 。
【讨论】:
我试过了。它大部分时间都有效。但有时它仍然不更新。那会发生什么,如果我在组合内单击然后单击其他位置,图标将更新。【参考方案2】:我曾经遇到过类似的问题。后来发现原因是我创建时的CImageList。
我改变之后
m_pImgLst->Create(32,20,ILC_COLOR32,2,2);
到
m_pImgLst->Create(32,20,ILC_COLOR16,2,2);
直到收到WM_KILLFOCUS
才更新的现象消失了。不过可惜画面比以前少了一点。
【讨论】:
以上是关于MFC CComboBoxEx 图标更新问题的主要内容,如果未能解决你的问题,请参考以下文章