2011-07-28 53 views
0

我正在使用MFC中的CComboBoxEx控件來爲顯示地址和相關站點圖標的瀏覽器應用程序實現地址框。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); 

我發現ocassionally SetItem被稱爲圖標後不更新。新圖標設置後,它仍然顯示上一個圖標。請注意圖像索引從不改變。我只更新圖像列表中的實際圖標。

有趣的是,我發現如果我用鼠標點擊組合框內部,然後點擊一些其他控件內部,使組合框失去焦點,圖標將更新。我可以通過編程的方式來做到這一點,但我覺得這是一個棘手的解決方法。

除此之外,在組合框調用Invalidate或RedrawWindow時,不會在不更新時顯示新圖標。

任何經驗或技巧將不勝感激。非常感謝。

回答

0

可能您需要再次致電CComboBoxEx::SetImageList

+0

我試過了。它大部分時間都在工作。但有些時候它仍然不會更新。然後會發生什麼,如果我在組合框中點擊,然後點擊其他地方,圖標就會更新。 – Stephen

0

我曾經遇到類似的問題。後來我發現原因是我創建它時的CImageList。

後,我改變了

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

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

更新的現象,直到收到消失WM_KILLFOCUS。但遺憾的是這張圖像比以前少了一點美麗。