2

comboboxに反映されたテキストを変更するために、を新しい値で更新する必要があります。これを行う最もクリーンな方法は、comboboxが初期化された後、メッセージを表示することです。

だから私はpostmessageを含むhwndにを作成しようとしていますcombobox

それで、現在選択されているアイテムをn番目のアイテムに変更してメッセージを送信したい場合、どのpostmessageようになりますか?

関係があると思いますがON_CBN_SELCHANGE、うまく動作させることができません。

4

4 に答える 4

8

ComboBox_SetCurSelが必要です:

ComboBox_SetCurSel(hWndCombo, n);

または、MFC CComboBox コントロールの場合は、おそらく次のことができます。

m_combo.SetCurSel(2);

手動で行っている場合は、PostMessage ではなく SendMessage も必要になると思います。CBN_SELCHANGE は、選択が変更されたときにコントロールが送り返す通知です。

最後に、この質問に c++ タグを追加することをお勧めします。

于 2008-09-12T15:33:27.720 に答える
1

簡潔なバージョン:

const int index = 0;
m_comboBox.PostMessage(CBN_SELCHANGE, index);
于 2008-09-12T15:41:03.427 に答える
0

間違っている可能性があるのは、選択変更メッセージ ハンドラー内で選択が変更され、別の選択変更メッセージが表示されることです。

この不要なフィードバック ループを回避する 1 つの方法は、次に示すように、選択変更メッセージ ハンドラーにセンチネルを追加することです。

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;
  }
}
于 2008-09-19T00:05:49.233 に答える