以编程方式更改组合框

时间:2008-09-12 15:25:03

标签: c++ winapi mfc combobox postmessage

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

所以我正在尝试为包含postmessage的hwnd制作一个combobox

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

我猜它会涉及ON_CBN_SELCHANGE,但我无法让它正常工作。

4 个答案:

答案 0 :(得分:8)

您想要ComboBox_SetCurSel

ComboBox_SetCurSel(hWndCombo, n);

或者如果它是MFC CComboBox控件,你可以这么做:

m_combo.SetCurSel(2);

我想如果你手动完成它,你也会想要SendMessage而不是PostMessage。 CBN_SELCHANGE是当选择发生变化时控件将发送给您的通知。

最后,您可能希望将c ++标记添加到此问题中。

答案 1 :(得分:1)

简明版:

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

答案 2 :(得分:0)

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

解决此无用反馈循环的一种方法是将一个标记添加到选择更改消息处理程序,如下所示:

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

答案 3 :(得分:-1)

如果您想要更改标题 - 这是组合框关闭时显示的行,那么您可以执行以下操作:

m_ComboBox.DeleteString(0); //首先删除前一个(如果有),0 =可视字符串 m_ComboBox.AddString(_T(" Hello there"));

把它放在fx中。在OnCloseupCombo中 - 当事件关闭时,下拉框会触发

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)

此更改是一个新字符串,而不是已分配的组合框元素的选择