質問

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

だから私はクラフトしようとしています postmessage を含む hwnd に combobox.

したがって、現在選択されている項目を n 番目の項目に変更してメッセージを送信したい場合、どうすればよいでしょうか? postmessage のように見える?

それに関わるのではないかと推測しています ON_CBN_SELCHANGE, 、しかし、うまく動作させることができません。

役に立ちましたか?

解決

あなたが欲しいのは ComboBox_SetCurSel:

ComboBox_SetCurSel(hWndCombo, n);

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

m_combo.SetCurSel(2);

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

最後に、この質問に c++ タグを追加するとよいでしょう。

他のヒント

簡潔なバージョン:

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

問題が発生している可能性があるのは、選択変更メッセージ ハンドラー内で選択が変更されており、その結果、別の選択変更メッセージが表示されることです。

これを回避する 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;
  }
}

タイトル (コンボボックスを閉じたときに表示される行) を変更したい場合は、次の操作を行うことができます。

m_ComboBox.DeleteString(0);//最初に削除前の場合、0 = Visual String M_ComboBox.AddString(_T( "Hello there"));

これをFXに入れます。OnCloseupCombo - ドロップダウンボックスを閉じるイベントが発生したとき

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)

この変更は、すでに割り当てられているコンボボックス要素の選択ではなく、新しい文字列です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top