Pregunta

necesito actualizar un combobox con un nuevo valor por lo que cambia el texto reflejado en él.La forma más limpia de hacerlo es después de comboboxha sido inicializado y con un mensaje.

Entonces estoy tratando de crear un postmessage al hwnd que contiene el combobox.

Entonces, si quiero enviarle un mensaje, cambiando el elemento actualmente seleccionado al enésimo elemento, ¿cuál sería el postmessage ¿parece?

Supongo que implicaría ON_CBN_SELCHANGE, pero no consigo que funcione correctamente.

¿Fue útil?

Solución

Quieres ComboBox_SetCurSel:

ComboBox_SetCurSel(hWndCombo, n);

o si es un control MFC CComboBox probablemente puedas hacer:

m_combo.SetCurSel(2);

Me imagino que si lo haces manualmente también querrás SendMessage en lugar de PostMessage.CBN_SELCHANGE es la notificación que envía el control de nuevo a usted cuando se cambia la selección.

Finalmente, es posible que desees agregar la etiqueta c++ a esta pregunta.

Otros consejos

Una versión concisa:

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

Lo que podría estar yendo mal es que la selección se está cambiando dentro del controlador de mensajes de cambio de selección, lo que da como resultado otro mensaje de cambio de selección.

Una forma de solucionar esto bucle de retroalimentación no deseado es agregar un centinela al controlador de mensajes de cambio de selección como se muestra a continuación:

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

Si desea cambiar el título, que es la línea que se muestra cuando se cierra el cuadro combinado, puede hacer lo siguiente:

m_ComboBox.DeleteString(0);// primero eliminar anterior si alguno, 0 = Visual String m_comboBoBox.addString (_t ("Hola"));

pon esto en fx.en OnCloseupCombo: cuando el evento se cierra, se activa un cuadro desplegable

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)

Este cambio es una nueva cadena, no una selección de elementos del cuadro combinado ya asignados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top