Question

J'ai besoin de mettre à jour un combobox avec une nouvelle valeur afin de modifier le texte réfléchi.La façon la plus propre de procéder est après le comboboxa été initialisé et avec un message.

J'essaie donc de créer un postmessage au hwnd qui contient le combobox.

Donc, si je veux lui envoyer un message, en changeant l'élément actuellement sélectionné par le nième élément, quel serait le postmessage ressembler?

Je suppose que cela impliquerait ON_CBN_SELCHANGE, mais je n'arrive pas à le faire fonctionner correctement.

Était-ce utile?

La solution

Tu veux ComboBox_SetCurSel:

ComboBox_SetCurSel(hWndCombo, n);

ou s'il s'agit d'un contrôle MFC CComboBox, vous pouvez probablement le faire :

m_combo.SetCurSel(2);

J'imagine que si vous le faites manuellement, vous voudriez également SendMessage plutôt que PostMessage.CBN_SELCHANGE est la notification que le contrôle envoie je reviens à toi lorsque la sélection est modifiée.

Enfin, vous souhaiterez peut-être ajouter la balise c++ à cette question.

Autres conseils

Une version concise :

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

Ce qui pourrait ne pas fonctionner, c'est que la sélection est modifiée dans le gestionnaire de messages de changement de sélection, ce qui entraîne un autre message de changement de sélection.

Une façon de contourner ce problème boucle de rétroaction indésirable consiste à ajouter une sentinelle au gestionnaire de messages de modification de sélection, comme indiqué ci-dessous :

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 vous souhaitez modifier le titre - qui est la ligne affichée lorsque la liste déroulante est fermée, vous pouvez procéder comme suit :

m_ComboBox.DeleteString(0);// Supprimer d'abord le cas échéant, 0 = chaîne visuelle m_combobox.addString (_t ("bonjour"));

mets ça dans FX.dans OnCloseupCombo - lorsque l'événement se ferme, une liste déroulante se déclenche

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)

Ce changement est une nouvelle chaîne et non une sélection d'éléments combobox déjà attribués

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top