正如你可能知道一個CComboBox(DropDownList樣式)只能通過鍵入正確選擇,如果你不讓它autosort它的內容。這裏是我的意思的一個例子: 您鍵入A然後B鍵。如果它不是自動排序,它將首先選擇以A開頭的下一個條目,然後選擇以B開頭的下一個條目。如果排序它將選擇下一個用A輸入,然後用AB輸入下一個。MFC CComboBox OnKillFocus/ShowDropDown Windows 7上的SetCurSel後
我有一個繼承自CComboBox的類,它的內容沒有按內置的排序機制排序。我想要一個正確的按鍵輸入行爲,所以我自己實現了。我使用SetCurSel選擇條目,然後將CBN_SELCHANGE消息發送到父窗口。
在Windows XP上,這工作得很好。我們現在正在使用Windows 7,並且現在出現以下問題: 如果我使用鼠標打開下拉列表,請通過鍵入它來選擇一個條目,然後使用Tab跳轉到下一個控件,即開始時選擇的值會自動重新選擇。
如果我覆蓋OnKillFocus並執行以下操作:
int index = GetCurSel();
CComboBox::OnKillFocus();
SetCurSel(index);
一般工作,但一會兒老選定值仍然會閃爍發光,這是醜陋的。
如果我不調用CComboBox :: OnKillFocus()正確的條目保持選中,但組合框仍然下降。
所以我的下一個嘗試是手動調用SetDropDown(FALSE)(並沒有任何其他的OnKillFocus()),但隨後問題再次出現。
所以我的猜測是,如果你打開下拉列表,當前選擇內部存儲。調用SetCurSel不會更新此內部值。如果你標出內部值再次被重新選擇。
任何想法如何我可以解決這個問題?