MFC集合类的使用

CStringArray用法:

 

列表框:m_list

单选按钮:m_radio  int(指其中一个属性设置为:组)

文本框:m_pos  int 、m_str  CString

按钮:OnCheck()

1、创建基于对话框的工程StringArray.

2、在CStringArrayDlg构造函数中添加:

public:

CStringArray m_array;

3、按钮单击事件:OnCheck代码

void CStringArray1Dlg::OnCheck()

{

    UpdateData(true);

    switch(m_radio)

    {

       int i;

       case 0:

           if(m_pos < 0 || m_pos > m_array.GetSize())

           {

              AfxMessageBox("数组位置不正确!");

              return;

           }

           if(m_str.IsEmpty())

           {

              AfxMessageBox("输入信息不能为空!");

              return;

           }

           m_array.InsertAt(m_pos,m_str);

           m_list.ResetContent();//清空列表框

           for(i = 0; i<m_array.GetSize(); i++)

           {

              m_list.AddString(m_array.GetAt(i));

           }

           m_str = "";

           m_pos = m_array.GetSize();

           UpdateData(false);

           break;

       case 1:

           if(m_pos < 0 || m_pos >= m_array.GetSize())

           {

              AfxMessageBox("数组位置不正确!");

              return;

           }

           m_array.RemoveAt(m_pos);

           m_list.ResetContent();

           for( i = 0; i<m_array.GetSize(); i++)

           {

              m_list.AddString(m_array.GetAt(i));

           }

           m_str = "";

           m_pos = m_array.GetSize();

           UpdateData(false);

           break;

    }

}

CPtrList的使用:

 

列表框:m_list

单选按钮:m_radio

文本框:m_name   CString , m_price  double , m_sum   double

按钮:OnCheck()

1、创建基于对话框的工程PtrList

2、在CCPtrListDlg文件顶部定义结构体:CGoods

struct CGoods

{

CString m_name;

double m_price;

};

3、构造函数中添加:

CPtrList m_goodslist;

4、通过类向导添加成员函数:

void  Reflesh();

5、OnCheck()代码:

void CCPtrListDlg::OnCheck()

{

    UpdateData(true);

    CGoods* m_pGoods = new CGoods();

    switch(m_radio)

    {

    case 0:

       if(m_name.IsEmpty() || m_price <= 0)

       {

           AfxMessageBox("输入商品信息不正确!");

           return;

       }

       m_pGoods->m_name = m_name;

       m_pGoods->m_price = m_price;

       m_goodslist.AddTail(m_pGoods);

       m_name = "";

       m_price = 0.0;

       Reflesh();//函数调用

       break;

    case 1:

       if(m_goodslist.GetCount())//链表不为空

       {

           m_goodslist.RemoveHead();

       }

       m_name = "";

       m_price = 0.0;

       Reflesh();

       break;

    case 2:

       if(m_goodslist.GetCount())

       {

           m_goodslist.RemoveTail();

       }

       m_name = "";

       m_price = 0.0;

       Reflesh();

       break;

    }  

}

6、Reflesh()代码:

void CCPtrListDlg::Reflesh()

{

    int i;

    m_sum = 0;

    CString str,str1;

    m_list.ResetContent();//清空列表框

    if(!m_goodslist.IsEmpty())

    {

       POSITION pos = m_goodslist.GetHeadPosition();

       for( i = 0; i<m_goodslist.GetCount(); i++)

       {

           CGoods* m_pGoods = (CGoods*)m_goodslist.GetNext(pos);

           str1.Format("%.2f",m_pGoods->m_price);

           str = "品名:"+m_pGoods->m_name+",单价:"+str1;

           m_list.AddString(str);

           m_sum += m_pGoods->m_price;

       }

    }

    UpdateData(false);//把更新放在这里,适合。

}

注:

与数组不同,链表的位置用POSITION来标识。

向链表中添加元素:

CStringList m_list;

POSITION pos = m_list.AddHead(“Head”);

pos = m_list.InsertAfter(pos,”note1”);

原文地址:https://www.cnblogs.com/lxshanye/p/3088582.html