c++ - 动态创建的组合框中的 CBN_SELCHANGE

标签 c++ visual-studio-2008 visual-c++ mfc

如何在动态创建的 CComboBoxes 中获取 CBN_SELCHANGE??..我使用了一个 CComboBoxes 数组。

MyCComboBox * p_ComboBoxes = new MyCComboBox[numberOcComboBoxes]; //numberOcComboBoxes determined at rumtime

在MyCComboBox的消息Map中

BEGIN_MESSAGE_MAP(MyCComboBox , CComboBox)
    ON_CONTROL_REFLECT(CBN_SELCHANGE, &CTestDlg::OnCbnSelchange)
END_MESSAGE_MAP()

void CTestDlg::OnCbnSelchange()
{
this->GetDlgCtrlID(); // Get The ComboBox ID;
CString sText;
p_ComboBoxes[0].GetLBText(p_ComboBoxes[0].GetCurSel() , sText); // I can't access like this 


}

//p_ComboBoxes 数组的初始化..

for (int i = 0 ;i < iNumber ; i++)
{


p_ComboBoxes[i].Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWN,
        CRect(10 + MY_PIC_ADDITIONAL_WIDTH,iItemDrawHeight,10 + MY_PIC_ADDITIONAL_WIDTH +MY_PIC_PROPERTY_WIDTH
        ,iItemDrawHeight +MY_PIC_HEIGHT), this, pImageControlPropertyID[i]);

iItemDrawHeight += MY_PIC_PROPERTY_ADDITIONAL_HEIGHT;

}

我无法访问所选文本,它给我“访问违规读取位置 0x00000020”错误..

最佳答案

如前所述,ON_CONTROL_REFLECT 用于处理消息在控件类中,而不是在父对话框类中。您应该在 MyCComboBox 类中实现 OnCbnSelchange() 处理程序,并在 MyCComboBox 消息映射中添加一个 ON_CONTROL_REFLECT 条目。

如果你真的想在父对话框中处理消息,你应该使用 ON_CONTROL 宏 - 每个子组合都有一个条目,每个子组合都有一个单独的处理程序,这样你就可以知道是哪个发送了消息。

关于c++ - 动态创建的组合框中的 CBN_SELCHANGE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15358593/

相关文章:

c++ - Visual Studio 2019 找不到很多头文件

c++ - 在另一台计算机上运行使用 Visual Studio 构建的 EXE 文件的问题

c++ - C++ 标准中的重载与默认参数

visual-studio-2008 - 减少了 SSRS BIDS 2008 R2 "Preview"选项卡中的打印功能或错误?

c++ - 使用我自己的控件使用 MFC 创建 DialogBar

c++ - 为什么 OpenGL 雾只是不出现?

c++ - VC++ 仍然在顺序一致方面被破坏吗?

Visual Studio 2017 中的 C++ 版本 98

c++ - 根据 C++ 中的列对 csv 文件进行排序

c++ - 类静态数组字段突然改变值(C++)