以编程方式更改组合框
时间: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; } }