hy17003 2014-11-27 15:38 采纳率: 0%
浏览 1862

几个CString变量会相互干扰吗?

在学习ComboBoxEx控件时遇到一个非常奇怪的问题,我写了一个小程序来说明这种情况:
1、我添加一个ComboBoxEx和两个静态文本控件:
alt text
添加为控件添加变量,分别为:
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、问题出现了:运行的效果如下:
alt text
当我选择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的值没有改变。

  • 写回答

5条回答

  • threenewbee 2014-11-27 23:01
    关注

    检查下你将Static映射到m_Str1、m_Str2的时候有没有错误,按理说不会。

    评论

报告相同问题?

悬赏问题

  • ¥15 链接问题 C++LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接