我需要combobox
使用新值更新 a ,以便更改其中的反射文本。最干净的方法是在combobox
初始化并带有消息之后。
所以我正在尝试为postmessage
包含combobox
.
所以如果我想向它发送一条消息,将当前选中的项目更改为第 n 个项目,postmessage
会是什么样子?
我猜它会涉及ON_CBN_SELCHANGE
,但我无法让它正常工作。
我需要combobox
使用新值更新 a ,以便更改其中的反射文本。最干净的方法是在combobox
初始化并带有消息之后。
所以我正在尝试为postmessage
包含combobox
.
所以如果我想向它发送一条消息,将当前选中的项目更改为第 n 个项目,postmessage
会是什么样子?
我猜它会涉及ON_CBN_SELCHANGE
,但我无法让它正常工作。
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;
}
}
如果您想更改标题 - 这是组合框关闭时显示的行,那么您可以执行以下操作:
m_ComboBox.DeleteString(0); // 如果有的话,首先删除前一个,0 = 视觉字符串 m_ComboBox.AddString(_T("Hello there"));
把它放在 fx 中。在 OnCloseupCombo - 当事件关闭时触发下拉框
ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)
此更改是一个新字符串,而不是已分配的组合框元素的选择