2008-09-12 4 views
2

Мне нужно обновить combobox с новым значением, чтобы он менял отраженный текст. Самый чистый способ сделать это - после инициализации combobox и с сообщением.Программно изменить combobox

Итак, я пытаюсь создать postmessage на hwnd, который содержит combobox.

Так что, если я хочу отправить ему сообщение, изменив текущий выбранный элемент на n-й элемент, как бы выглядел postmessage?

Я предполагаю, что это будет связано с ON_CBN_SELCHANGE, но я не могу заставить его работать правильно.

+0

Есть язык, в частности, вы ищете, например, в? C++? – GEOCHET 2008-09-12 15:26:20

+0

Ключ в теге MFC :) – 2008-09-12 15:39:54

ответ

8

Вы хотите ComboBox_SetCurSel:

ComboBox_SetCurSel(hWndCombo, n); 

или если это элемент управления CComboBox MFC вы, вероятно, может сделать:

m_combo.SetCurSel(2); 

Я бы себе, если вы делаете это вручную, вы также хотите SendMessage, а чем PostMessage. CBN_SELCHANGE - это уведомление о том, что управление отправляет к вам при изменении выбора.

Наконец, вы можете добавить тег C++ к этому вопросу.

1

Краткий вариант:

const int index = 0; 
m_comboBox.PostMessage(CBN_SELCHANGE, index); 
0

Что может идти не так это выбор изменяется внутри обработчика сообщений изменения выбора, которые приводят к изменению другого сообщения выбора.

Один из способов обойти эту нежелательной петли обратной связи является добавление часового к выбери обработчик изменения сообщения, как показано ниже:

void onSelectChangeHandler(HWND hwnd) 
{ 
    static bool fInsideSelectChange = 0; 

    //-- ignore the change message if this function generated it 
    if (fInsideSelectChange == 0) 
    { 
    //-- turn on the sentinel 
    fInsideSelectChange = 1; 

    //-- make the selection changes as required 
    ..... 

    //-- we are done so turn off the sentinel 
    fInsideSelectChange = 0; 
    } 
} 
-1

если вы Fx хотите изменить название - что линия показано, когда combobox закрыт, вы можете сделать следующее:

m_ComboBox.DeleteString (0); // сначала удалять предыдущее, если оно есть, 0 = визуальная строка m_ComboBox.AddString (_T («Hello there»));

положить это в fx. в OnCloseupCombo - когда событие закрыть выпадающем DropDownBox'х пожары

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo) 

Это изменение новой строки а не выбор из уже выделенных элементов COMBOBOX

Смежные вопросы