CGoodsInfo ifoDlg;
if(ifoDlg.DoModal()==IDOK)
{
CItems item;
item.m_name=ifoDlg.m_name;
item.m_weight=ifoDlg.m_weight;
//item.m_percent=CountPercent(ifoDlg.m_weight);
item.m_color=ifoDlg.m_color;
m_itemArray.Add(&item);
int nCount;
nCount=m_cGoodList.GetItemCount();
m_cGoodList.InsertItem(nCount,"");
m_cGoodList.SetItemText(nCount,0,item.m_name);
m_cGoodList.SetItemText(nCount,1,item.m_weight);
for(int i=0;i<m_itemArray.GetSize();i++)
MessageBox(((CItems*)m_itemArray.GetAt(i))->m_weight); //m_cGoodList.SetItemText(nCount,2,item.m_percent);
//m_cGoodList.SetItemText(nCount,1,);
//m_cGoodList.SetItemText(nCount,2,"test");
//m_cGoodList.SetItemText(nCount,2,"test");
}
上面m_itemArray是CObArray的对象,我每加入一项就把所有项都拿出来看看,结果却都拿到了最后一项!这是为什么啊?
if(ifoDlg.DoModal()==IDOK)
{
CItems item;
item.m_name=ifoDlg.m_name;
item.m_weight=ifoDlg.m_weight;
//item.m_percent=CountPercent(ifoDlg.m_weight);
item.m_color=ifoDlg.m_color;
m_itemArray.Add(&item);
int nCount;
nCount=m_cGoodList.GetItemCount();
m_cGoodList.InsertItem(nCount,"");
m_cGoodList.SetItemText(nCount,0,item.m_name);
m_cGoodList.SetItemText(nCount,1,item.m_weight);
for(int i=0;i<m_itemArray.GetSize();i++)
MessageBox(((CItems*)m_itemArray.GetAt(i))->m_weight); //m_cGoodList.SetItemText(nCount,2,item.m_percent);
//m_cGoodList.SetItemText(nCount,1,);
//m_cGoodList.SetItemText(nCount,2,"test");
//m_cGoodList.SetItemText(nCount,2,"test");
}
上面m_itemArray是CObArray的对象,我每加入一项就把所有项都拿出来看看,结果却都拿到了最后一项!这是为什么啊?
CItems item; 是局部变量,每次跳出if就会释放。用new动态创建CItem对象保存到COBArray。CItems *item = new CItem();
//...
m_itemArray.Add(item);
就像一楼说的。
你可以看下Add方法
_AFXCOLL_INLINE int CObArray::Add(CObject* newElement)
{ int nIndex = m_nSize;
SetAtGrow(nIndex, newElement);
return nIndex; }