2011-07-28 19 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); 

私は、SetItemが呼び出された後、アイコンが更新されないことがわかりました。新しいアイコンが設定されても、前のアイコンが表示されます。イメージインデックスは決して変更されないことに注意してください。私はイメージリスト内の実際のアイコンのみを更新しています。

興味深いことに、マウスを使用してコンボボックス内をクリックしてから、コンボボックスがフォーカスを失うように他のコントロールをクリックすると、アイコンが更新されることがわかりました。私はプログラムでそれを行うことができますが、私はそれが厄介な回避策だと感じています。

それ以外の場合、コンボボックスでInvalidateまたはRedrawWindowを呼び出すと、更新されないときに新しいアイコンが表示されません。

これに関するあらゆる経験やヒントをお待ちしております。どうもありがとう。

答えて

0

おそらくCComboBoxEx::SetImageListに電話する必要があります。

+0

私はそれを試みました。それはほとんどの時間に働きます。しかし、事実、それはまだ更新されません。それが起こった場合、コンボをクリックして別の場所をクリックすると、アイコンが更新されます。 – Stephen

0

私はかつて同様の問題に遭遇しました。後で私はそれを作成したときの原因がCImageListであることを発見しました。

私は

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

WM_KILLFOCUSが消失受信されるまで、更新の現象に

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

を変更した後。しかし、イメージが以前よりも少し美しくないことは残念です。