2 hy17003 hy17003 于 2014.11.27 23:38 提问

几个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个回答

caozhy
caozhy   Ds   Rxr 2014.11.28 07:01

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

hy17003
hy17003 检查了DoDataExchange函数,问题应该不是这里,我很想传附件上来,但是不知道怎么传
3 年多之前 回复
hy17003
hy17003 void CComboboxTestDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBOBOXEX1, m_ComboBox); DDX_Text(pDX, IDC_STATIC1, m_str1); DDX_Text(pDX, IDC_STATIC2, m_str2); }
3 年多之前 回复
hy17003
hy17003   2014.11.28 09:23

这是DoDataExChange函数:
void CComboboxTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_COMBOBOXEX1, m_ComboBox);
DDX_Text(pDX, IDC_STATIC1, m_str1);
DDX_Text(pDX, IDC_STATIC2, m_str2);
}
看样子问题不是在这里

oyljerry
oyljerry   Ds   Rxr 2014.11.28 09:37

看上去还是应该检查所有用到m_str1,m_str2两个变量的地方

lx624909677
lx624909677   Ds   Rxr 2014.11.30 10:04

获取CString的内容,要用GetBuffer来做,直接强转赋值会错

eagleyan
eagleyan   Rxr 2014.12.01 03:13

你在OnCbnSelchangeComboboxex1里调用UpdateData(FALSE)是重新初始化dialog而不是进行DDE,应该改成UpdateData(TRUE)或者UpdateData()

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
CString 累积赋值注意事项
CString累加赋值 注意以\0结尾的字符 CString szTarget = R.GetAt(i).Target_address; CString szLink = R.GetAt(i).Link_address; CString szType = R.GetAt(i).szType; 这些变量中有可能有\0结尾的字符。 CString 在遇到\0后自动截断后面的字符,只保
2.4G信号干扰原因
转自:http://wenku.baidu.com/link?url=iw-8wLsNphcELx-J7artsLTdIKtCLGO7X-PAgQG6BYXuG-GPHzYh8xrhkRVzJo2HL1LvI2p4RlgfxCuVBSwt9VG2uPFiM3Fpo9tZjFI8PGC 参考:http://www.321mx.com/blog/366.html ? ? 下,速度可以达
CString之间赋值出现错误
近期在做MFC开发过程中,时不时的出现两个CStringd
Zigbee 2.4G频段中不与WIFI相互干扰的几个信道。
Zigbee 的2.4GHz频段是非常拥挤的,非常容易受到干扰,比如WIFI、蓝牙等,但15、16、21、22 这几个信道是不会受到干扰的。今天正好遇到了,做下标记。
大功率无线网卡两个的时候出现干扰的解决办法
买了一个大功率的,很好用,然后脑残,又买了一个同样型号的. 回来测试发现,一个可以用,另一个只要,一开,那么之前的网络也不好使了,想了想,,,,大概好几天了,突然来了灵感解决了我的问题 白天老婆在用那个上网不敢搞,夜里我测试了下,发现问题所在,也许不正确,但是确实可以有效的解决干扰问题 A无线网卡我放机器机箱上的 B网卡我原来是放机箱附近地上的,这样发现干扰的两个网卡都无法正常工作
VC 和 Halcon 之间的互相赋值
最近在学习 Halcon、VC 的混合编程,整理了一些两者变量互相访问的方法。 示例代码如下: 复制代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
unicode环境下,CString 变量的定义和比较
UNICODE环境下,CString定义比较特殊,例如: 定义如下(编译环境vs2010): CString uniStr1=_T(“FuShanE”);// uniStr1.GetLength()=43 CString uniStr2=_T(“FuShanE”);;// uniStr1.GetLength()=51 uniStr1!=uniStr2,因为按照UNICODE去解释,一个
ZigBee为什么能抗干扰?
ZigBee为什么能抗干扰? ZigBee是一项新兴的短距离无线通信技术(IEEE 802.15.4 标准),主要面向的应用领域是低速率无线个人区域网,主要特征是近距离、低功耗、低成本、低传输速率。其工作方式是:在数千个微小的传感器之间以接力的方式通过无线电波将数据从一个传感器传到另一个传感器,最后这些数据可进入计算机分析或者被另一种无线技术(如:WiMax)收集。工作频段分为:2.4G——全球
防止同一个账户异地登陆AND多用户同时登陆操作互不干扰
防止同一个账户异地登陆 1.给user 表添加字段 多用户同时登陆操作互不干扰 1.http://topic.csdn.net/u/20080916/15/aca27386-911e-411a-bf2b-77b554f9fb77.html
为什么WiFi和USB3.0会互相干扰?
补充:关于基准频率的问题,根据评论里的说法有一定争议,USB3.0规范里给出过基准频率是2.5GHz的说法(up to the fundamental frequency of 2.5 GHz),但规范里给出的信号图里换算过来是5GHz,至少可以得知的是,USB3.0芯片里有2.5GHz的东西,是这东西产生的干扰,总线上是否以 2.5GHz传输还存疑。 原回答: 首先,需要