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 图标更新问题的主要内容,如果未能解决你的问题,请参考以下文章

MFC-CImagelist图像列表控件

用图标计算 CComboBoxEx 的最大下拉宽度

CImageList 和 CComboBoxEx 限制为 16 个透明图标

CImagelist 基本用法

如何在 MFC 自定义控件类中挂钩控件关闭

在 CComboBoxEx 和 ReleaseBuffer 中插入和项目