Modifica la casella combinata a livello di codice
-
09-06-2019 - |
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.
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