Visual C++ 2019常用控件 │ 应用实例

举报
TiAmoZhang 发表于 2025/11/15 10:26:18 2025/11/15
【摘要】 编写一个简单的统计购书应付款的应用程序。该程序完成在组合框中选择要购买书籍的类别,然后再从列表框中选择要购买的书籍,并统计出应付的钱数。

Visual C++ 2019常用控件应用实例


01、实例简介


编写一个简单的统计购书应付款的应用程序。该程序完成在组合框中选择要购买书籍的类别,然后再从列表框中选择要购买的书籍,并统计出应付的钱数。


02、创建过程


1创建MFC应用程序框架

使用“MFC应用”项目模板生成一个基于对话框的应用程序SaleList,并将主窗口对话框的标题设置为“购书清单”。


2编辑对话框

(1) 打开对话框编辑器,在对话框设计模板中添加如图6.25所示的控件,为组合框添加初始列表项:建筑类、社科类、医学类,并利用类向导工具为有关控件添加关联成员变量,如表6.23所示。旋转按钮的属性设置与例6.6中相同,编辑框“只读”属性设置为true,其他均接受系统默认。

■ 图6.25 对话框控件布局


表6.23 对话框控件及成员变量

3添加结构体数组

打开SaleListDlg.cpp文件,在其顶端添加结构体数组,用于存储可购书籍的类别、名称、购买与否以及价格信息。

struct commodity
{

   CString strType;
   CString strName;
   int  bIsBuy;
   int   nPrice;
   int count;
}comm[]=
{L"建筑类",L"建筑环境学",0,36,1,
L"建筑类",L"建筑制图",0,28,1,
L"建筑类",L"建筑结构",0,45,1,
L"建筑类",L"建筑设备",0,62,1,
L"社科类",L"民法",0,55,1,
L"社科类",L"哲学",0,68,1,
L"社科类",L"社会学",0,45,1,
L"社科类",L"中国近代史",0,28,1,
L"医学类",L"内科",0,76,1,
L"医学类",L"临床医学",0,56,1,
L"医学类",L"解剖学",0,39,1,
L"医学类",L"护理学",0,90,1
};

4添加初始化代码

在对话框类CSaleListDlg的初始化成员函数OnInitDialog()中添加代码,设定书籍类别、名称的初始显示值、数量的限制范围及初始值。

BOOL CSaleListDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
  …
  // TODO: 在此添加额外的初始化代码
  m_cmbType.SetCurSel(0); //设置组合框中初始显示的书籍类别
  for(int i=0;i<4;i++) //设置列表框中初始显示的书籍名称
    m_lstName.AddString(comm[i].strName);
  m_spin.SetRange(1,100); //设置购书最高数量
  m_spin.SetPos(1); //设置购书数量初始显示值
  return TRUE;
}

5添加消息处理函数

使用利用类向导工具在对话框类CSaleListDlg中为组合框、列表框、复选框以及“应付款”按钮添加如表6.24所示消息处理函数,并在处理函数中添加代码。


表6.24 控件及消息映射

void CSaleListDlg::OnSelchangeSaleType() 
{
  CString strtype;
  int mindex=m_cmbType.GetCurSel(); //获取类别选择项位置序号
  m_lstName.ResetContent(); //清除书名列表框中所有的列表项
  m_cmbType.GetLBText(mindex,strtype);//获取类别选择项文本
  for(int i=0;i<12;i++) //将所选类别的书籍名称添加到列表框
    if(strtype==comm[i].strType)
      m_lstName.AddString(comm[i].strName);
}
void CSaleListDlg::OnDropdownSaleType()
{ //用户再次选择书籍类别时,重新设置数量、价格及购买复选框的状态
  // TODO: 在此添加控件通知处理程序代码
  m_spin.SetPos(1); //数量置1
  m_strPrice=" "; //价格置空
  m_blsBuy=0; //设置不购买状态
  UpdateData(false);
}
void CSaleListDlg::OnSelchangeSaleList()
{
  // TODO: 在此添加控件通知处理程序代码
  UpdateData( );
  for(int i=0;i<12;i++)
{
    if(m_strName==comm[i].strName)
        {
      CString str;
      str.Format("%d元",comm[i].nPrice);//获得价格
      m_strPrice=str;
      m_blsBuy=comm[i].bIsBuy; //是否已购所选书籍
      m_spin.SetPos(comm[i].count); //设置购书数量
      UpdateData(false); //更新显示
      break;
    }
  }
}
void CSaleListDlg::OnIsBuy()
{
  // TODO: 在此添加控件通知处理程序代码
  UpdateData(true);
  for(int i=0;i<12;i++)
    if(m_strName==comm[i].strName)
    {
      comm[i].bIsBuy=m_blsBuy; //获取购买信息
      comm[i].count=m_spin.GetPos(); //获得购书数量
      break;
    }
}
void CSaleListDlg::OnCalSum()
{
  // TODO: 在此添加控件通知处理程序代码
  int total=0;
  CString str;
  for(int i=0;i<12;i++)
       if(comm[i].bIsBuy==1)
       total+=comm[i].nPrice*comm[i].count; //计算应付款
  str.Format("您应当支付%d元",total);
  MessageBox(str);
}


编译、链接并运行程序,选择购买建筑类的“建筑环境学”(2本)和社科类的“民法”(3本),单击“应付款”按钮,结果如图6.26所示。程序运行时,请按照“类别”→“书名”→“数量”→“购买”的顺序进行操作,已购买的书籍不能重新购买,也不能更改其数量。

■ 图6.26 程序运行结果

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。