动态创建的组合框中的CBN_SELCHANGE
CBN_SELCHANGE in Dynamically created ComboBoxes
如何在动态创建的ccombobox中获得CBN_SELCHANGE ?我使用了一个ccombobox数组
MyCComboBox * p_ComboBoxes = new MyCComboBox[numberOcComboBoxes]; //numberOcComboBoxes determined at rumtime
MyCComboBox的message 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宏——每个子组合都有一个条目,每个子组合都有一个单独的处理程序,这样你就可以知道是哪个发送了消息。
您也可以覆盖OnCommand(WPARAM wParam, LPARAM lParam)
在父对话框窗口中。如果是HIWORD(wParam) == CBN_SELCHANGE
,则比较LOWORD(wParam)
对应控件的id
BOOL CMyDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
if(HIWORD(wParam) == CBN_SELCHANGE) { //A combo box selection changed
int ID = LOWORD(wParam); //The ID of the corresponding ComboBox
//Perform additional handling...
}
return CDialog::OnCommand(wParam, lParam);
}
相关文章:
- 没有找到相关文章