在CBN_SELCHANGE C ++ WIN32

时间:2019-06-18 13:33:15

标签: c++ winapi

我有一个组合框,其中有3个选项可用于启动菜单。在这些选项中,其中三分之二会对其他启动菜单选项产生某种影响。例如,如果我选择选项1,它将选择另一个选项的复选框,以便用户在启动程序之前可以看到组合框中的每个选项实际执行的操作。

我现在的问题是我在消息映射中使用了“ ON_CBN_SELCHANGE”来检测组合框中的选项更改,该更改将执行一个函数,但是,此函数无法访问我的组合框的值。因此,如果我尝试使用“ GetCurSel()”函数,它将始终返回0值。我该如何解决这个问题?

//Message map
BEGIN_MESSAGE_MAP(COptionsDlg, CDialog)
     ON_CBN_SELCHANGE(600, COptionsDlg::OnOptionSelect)
END_MESSAGE_MAP()

//This is the constructor for my combo box
for(int i = 0; i < m_OptionsList.size(); i++)
{
    CComboBox* ComboBox = new CComboBox();
    ComboBox->Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWN, CRect(Left + 10, *Top, Right - 10, *Top + 300), this, 600);
    ComboBox->SetFont(DialogFont);

    for(int j = 0; j < m_OptionsList[i]->Labels.size(); j++)
    {
        ComboBox->AddString(m_OptionsList[i]->Labels[j]);
    }

}

//This is the function which executes after an option change occurs in the combo box
void COptionsDlg::OnOptionSelect(void)
{
    for(int i = 0; i < m_ComboBoxList.size(); i++)
    {
        int Index = m_ComboBoxList[i]->TheControl->GetCurSel();

        if(Index == 1 || Index == 0)
        {
            //Code that should run if those options are selected
        }
    }
}

1 个答案:

答案 0 :(得分:0)

选择内容必须存储在成员变量中。 MFC为此提供了一种DataExchange机制。

看看这个answer

有关DataExchange的更多信息 希望这对您有帮助!