以编程方式更改组合框

时间:2020-03-05 18:52:18  来源:igfitidea点击:

我需要用新值更新combobox,以便它更改其中的反射文本。最简单的方法是在初始化" combobox"并显示一条消息之后。

因此,我正在尝试向包含combobox的hwnd编写postmessage

因此,如果我想向其发送消息,将当前选择的项目更改为第n个项目,那么" postmessage"会是什么样?

我猜想它会涉及ON_CBN_SELCHANGE,但是我无法使其正常工作。

解决方案

回答

我们想要ComboBox_SetCurSel:

ComboBox_SetCurSel(hWndCombo, n);

或者,如果它是MFC CComboBox控件,则可以执行以下操作:

m_combo.SetCurSel(2);

我可以想象,如果我们手动进行操作,则还需要SendMessage而不是PostMessage。 CBN_SELCHANGE是更改选择时控件发送回给通知。

最后,我们可能想将c ++标记添加到此问题。

回答

简洁的版本:

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

回答

可能出问题的是,在选择更改消息处理程序中更改了选择,这导致了另一个选择更改消息。

解决这种不必要的反馈循环的一种方法是,将哨兵添加到选择更改消息处理程序中,如下所示:

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