Вопрос

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

Поэтому я пытаюсь создать postmessage к hwnd, содержащему combobox.

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

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

Это было полезно?

Решение

Вы хотите ComboBox_SetCurSel:

ComboBox_SetCurSel(hWndCombo, n);

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

m_combo.SetCurSel(2);

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

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

Другие советы

Краткая версия:

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

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

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

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;
  }
}

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

m_ComboBox.DeleteString(0);// сначала удалить предыдущее, если есть, 0 = Visual String M_Combobox.AddString (_t ("Привет там"));

поместите это в FX.в OnCloseupCombo - при закрытии события срабатывает раскрывающийся список

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top