在学习ComboBoxEx控件时遇到一个非常奇怪的问题,我写了一个小程序来说明这种情况:
1、我添加一个ComboBoxEx和两个静态文本控件:
添加为控件添加变量,分别为:
CComboBoxEx m_ComboBox;
CString m_str1;
CString m_str2;
2、在OnInitDialog()函数中,为ComboBoxEx控件添加三个项:
COMBOBOXEXITEM cbi;
CString strTemp[3];
strTemp[0]=_T("Tom");
strTemp1=_T("LiLei");
strTemp2=_T("Lucy");
cbi.mask=CBEIF_TEXT;
for (int i=0;i<3;i++)
{
cbi.iItem=i;
cbi.pszText=(LPTSTR)(LPCTSTR)strTemp[i];
cbi.cchTextMax=256;
m_ComboBox.InsertItem(&cbi);
}
3、在控件的OnCbnSelchangeComboboxex1()函数中添加以下代码,当选择ComboBoxEx上的项时,会激发这个函数:
void CComboboxTestDlg::OnCbnSelchangeComboboxex1()
{
CString str;
//CString str("Dummy_String");
COMBOBOXEXITEM cbi;
cbi.pszText=(LPTSTR)(LPCTSTR)str;
cbi.iItem=-1;
cbi.mask=CBEIF_TEXT;
cbi.cchTextMax=256;
m_ComboBox.GetItem(&cbi);
//m_str1=str;
UpdateData(FALSE);
}
注意,这里我并没有为两个静态文本控件赋任何值。
4、问题出现了:运行的效果如下:
当我选择ComboBox中的任意一项的时候,两个静态文本框的值都随着改变了,可是我没有写任何一句改变字符串str1和str2的代码呀?难道str1和str2他们和str是同一个内存地址???
5、如果我把代码中注释部分打开,改写代码如下:
void CComboboxTestDlg::OnCbnSelchangeComboboxex1()
{
CString str("Dummy_String");
COMBOBOXEXITEM cbi;
cbi.pszText=(LPTSTR)(LPCTSTR)str;
cbi.iItem=-1;
cbi.mask=CBEIF_TEXT;
cbi.cchTextMax=256;
m_ComboBox.GetItem(&cbi);
m_str1=str;
UpdateData(FALSE);
}
这样,就可以得到正确的结果,当我任选ComboBoxEx中任何一项的时候,只有静态文本框1的值随之改变了,因为我在代码中有m_str1=str这句,而静态文本框2的值没有改变。