Domanda

Devo aggiornare a combobox con un nuovo valore in modo da modificare il testo riflesso al suo interno.Il modo più pulito per farlo è dopo il file comboboxè stato inizializzato e con un messaggio.

Quindi sto cercando di creare un file postmessage all'hwnd che contiene il file combobox.

Quindi, se volessi inviargli un messaggio, modificando l'elemento attualmente selezionato nell'ennesimo elemento, quale sarebbe il file postmessage assomigliare?

Immagino che ciò comporterebbe ON_CBN_SELCHANGE, ma non riesco a farlo funzionare correttamente.

È stato utile?

Soluzione

Tu vuoi ComboBox_SetCurSel:

ComboBox_SetCurSel(hWndCombo, n);

o se si tratta di un controllo MFC CComboBox probabilmente puoi fare:

m_combo.SetCurSel(2);

Immagino che se lo fai manualmente vorresti anche SendMessage anziché PostMessage.CBN_SELCHANGE è la notifica inviata dal controllo indietro da te quando la selezione viene modificata.

Infine, potresti voler aggiungere il tag c++ a questa domanda.

Altri suggerimenti

Una versione concisa:

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

Ciò che potrebbe non funzionare è che la selezione viene modificata all'interno del gestore dei messaggi di modifica della selezione, il che risulta in un altro messaggio di modifica della selezione.

Un modo per aggirare questo problema ciclo di feedback indesiderato consiste nell'aggiungere una sentinella al gestore del messaggio di modifica selezionato come mostrato di seguito:

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

se vuoi cambiare il titolo, che è la riga mostrata quando la casella combinata è chiusa, puoi procedere come segue:

m_ComboBox.DeleteString(0);// prima elimina il precedente se non, 0 = Visual String m_ccombobox.addstring (_t ("ciao lì"));

mettilo in fx.in OnCloseupCombo: quando si attiva la chiusura dell'evento, viene attivato un menu a discesa

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)

Questa modifica è una nuova stringa e non una selezione di elementi della casella combinata già assegnati

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top