2008-09-12 66 views
2

我需要更新combobox一个新值,以便它改变它反射的文本。最简单的方法是在combobox已经初始化并且有消息之后。编程方式更改组合框

所以我想制作一个postmessage到包含combobox的hwnd。

所以,如果我想将消息发送给它,改变当前所选项目到第n个元素,会是什么postmessage样子?

我猜测它会涉及ON_CBN_SELCHANGE,但我不能让它的工作权利。

+0

是否有特别语言你正在寻找一个例子吗? C++? – GEOCHET 2008-09-12 15:26:20

+0

线索是在MFC标签:) – 2008-09-12 15:39:54

回答

8

你想ComboBox_SetCurSel

ComboBox_SetCurSel(hWndCombo, n); 

,或者如果它是一个MFC CComboBox控制你也许可以这样做:

m_combo.SetCurSel(2); 

我可以想象,如果你这样做手工,你也想SendMessage函数,而比PostMessage。 CBN_SELCHANGE是当选择发生变化时,控制系统将发送回的通知。

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

1

简明版本:

const int index = 0; 
m_comboBox.PostMessage(CBN_SELCHANGE, index); 
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; 
    } 
} 
-1

如果FX要更改标题 - 这是行所示,当组合框被关闭时,则可以执行以下操作:

m_ComboBox.DeleteString(0); //首先删除前面的内容,如果有的话,0 =可视字符串 m_ComboBox.AddString(_T(“Hello there”));

把这个在fx中。在OnCloseupCombo - 当事件关闭dropdownbox火灾

ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo) 

这种变化是一个新的字符串不是一个选择已经分配的组合框元素