Frage

Ich brauche einen combobox mit einem neuen Wert aktualisieren, damit sie das reflektierte Text in sie sich ändert. Der sauberste Weg, dies zu tun ist, nachdem die comboboxhas und mit einer Meldung initialisiert.

Also ich versuche, eine postmessage zum Hwnd Handwerk, das den combobox enthält.

Also, wenn ich eine Nachricht an sie senden möchte, das aktuell ausgewählte Element des n-ten Punkt zu ändern, was wäre die postmessage aussehen?

Ich vermute, dass es ON_CBN_SELCHANGE bedeuten würde, aber ich kann es nicht richtig zu arbeiten.

War es hilfreich?

Lösung

Sie wollen ComboBox_SetCurSel :

ComboBox_SetCurSel(hWndCombo, n);

oder wenn es eine MFC CComboBox Steuerung können Sie wahrscheinlich tun:

m_combo.SetCurSel(2);

Ich könnte mir vorstellen, wenn Sie es manuell tun würden Sie auch Sendmessage wollen, anstatt Postmessage. CBN_SELCHANGE ist die Benachrichtigung, dass die Steuerung sendet Sie zurück , wenn die Auswahl geändert wird.

Schließlich sollten Sie den c ++ Tag auf diese Frage hinzuzufügen.

Andere Tipps

Eine kurze Version:

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

Was könnte schief gehen wird die Auswahl in der Auswahländerung Nachrichtenhandler wird geändert, das in einer anderen Auswahl Änderungsmeldung zur Folge hat.

Eine Möglichkeit, dies unerwünschte Rückkopplungsschleife zu bekommen ist eine Sentinel an die Auswahländerungsnachrichtenhandler hinzufügen, wie unten dargestellt:

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

Wenn Sie FX wollen den Titel ändern - das ist die Linie angezeigt, wenn Combobox geschlossen ist, dann können Sie wie folgt vorgehen:

m_ComboBox.DeleteString (0); // zuerst löschen vorherige falls vorhanden, 0 = visuelle Zeichenfolge m_ComboBox.AddString (_T ( "Hallo"));

setzen diese in fx. in OnCloseupCombo - wenn ein Ereignis ein Dropdownbox Feuer schließen

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)

Diese Änderung ist eine neue Zeichenfolge nicht eine Auswahl der bereits zugewiesen Combobox Elemente

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top