在MFC的数组类可以创建和操作一个可以处理各种数据类型的一维数组对象。
MFC数组类包含CByteArray , CDWordArray , CPtrArray , CUintArray , CWordArray和CStringArray。每个类都被设计成可以处理一个特定的数据类型。
例如:CUintArray类是一个处理无符号整数型的数组类,CObjectArray类代表对象数组类。这些数组类几乎相同,仅仅的区别在于他们存的数据类型不同。
PS: 在MFC也可以用标准类型的String 和容器类结合来处理数据 。
比如利用vector<string> 来处理字符串数组,但是vector<>的缺点在于不能从中间插入,这时候我们就可以考虑使用同其他容器类,比如:list
下面我们就采用MFC中派生的数据类来实现一个CStringArray型的数组类
首先我们需要创建如下的界面:
并为其关联成员变量
首先我们要在Dlg类中添加一个
CStringArray m_array; //用来保存字符串数组
下面我们来写关于提交操作:
void CMFCApplication1Dlg::OnBnClickedCheck()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
wchar_t str = m_pos.GetAt(0);
int m_pos1 = _ttoi(&str);
//MessageBox(_T("%d"))
switch (m_radio){
int i;
case 0:
if (m_pos1 < 0 || m_pos1> m_array.GetSize()){
AfxMessageBox(_T("数组位置不正确"));
return;
}
if (m_InsertValue.IsEmpty()){
AfxMessageBox(_T("信息不能为空!"));
return;
}
m_array.InsertAt(m_pos1, m_InsertValue);
m_ListBox1.ResetContent();
for (i = 0; i < m_array.GetSize(); i++){
m_ListBox1.AddString(m_array.GetAt(i));
}
m_InsertValue = "";
m_pos1 = m_array.GetSize();
UpdateData(false);
break;
case 1:
if (m_pos1 < 0 || m_pos1 > m_array.GetSize()){
AfxMessageBox(_T("该位置没有数组元素!"));
return;
}
m_array.RemoveAt(m_pos1);
m_ListBox1.ResetContent();
for ( i = 0; i < m_array.GetSize(); i++){
m_ListBox1.AddString(m_array.GetAt(i));
}
m_InsertValue = "";
m_pos1 = m_array.GetSize();
UpdateData(false);
break;
}
}
以前操作就完成了数据的插入或者是删除。
这课中遇到的问题就是
wchar_t str = m_pos.GetAt(0);
int m_pos1 = _ttoi(&str);
由于编译器默认的是Unicode,所以获取的字符是宽字符,所以需要用宽字符处理函数来进行处理。而不能同char类型来处理数据。那样会造成数据丢失,而出现bug