设为首页 加入收藏

TOP

3.6.5 商品信息键盘消息处理
2013-10-07 14:50:43 来源: 作者: 【 】 浏览:58
Tags:3.6.5 商品 信息 键盘 消息 处理

3.6.5  商品信息键盘消息处理

这里将介绍编辑框数据输入时动态显示商品信息的方法,也讨论对键盘各个消息的处理方法,实现键盘易用性,具体代码如下:

代码位置:见光盘中本章源代码的CForeMange类。

  1. 1  BOOL CForeMange::PreTranslateMessage(MSG* pMsg)  
  2. 2  {  
  3. 3   if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_RETURN)  //判断是否按下回车键  
  4. 4   {  
  5. 5       if(::GetFocus()==m_mercnum)                         //判断当前焦点  
  6. 6       {  
  7. 7           UpdateData();                                   //保存输入的数据  
  8. 8           CString sqlstr;                             //构造查询语句  
  9. 9           sqlstr.Format("select * from tb_merchangiseinfo where id='%s'",m_id);  
  10. 10              if(GetRecord(sqlstr)==0)                        //查询结果为空  
  11. 11                  return false;  
  12. 12              CString str=(LPCSTR)(_bstr_t)m_record->Fields->GetItem("number")->Value;  
  13. 13              if(double(atof(str))<m_num)                     //取商品数量比较  
  14. 14              {                                           //数据清空  
  15. 15                  MessageBox("数量不够!");  
  16. 16                  m_id="";  
  17. 17                  m_singlediscount="";  
  18. 18                  m_num=0;  
  19. 19                  m_mercid.SetFocus();  
  20. 20                  m_mercid.querystr="";  
  21. 21                  m_mercnum.num=0;  
  22. 22                  return false;  
  23. 23              }  
  24. 24              else                                            //商品数量充足  
  25. 25              {  
  26. 26                  m_id="";  
  27. 27                  m_singlediscount="";  
  28. 28                  m_mercid.SetFocus();  
  29. 29                  m_mercid.querystr="";  
  30. 30                  m_mercnum.num=0;  
  31. 31                  m_alreadynum=m_list.GetItemCount();  
  32. 32                  m_mercid.InsertItem=m_alreadynum;  
  33. 33                  m_mercnum.SetWindowText("");  
  34. 34                  m_mercid.m_querystr="";  
  35. 35                  m_num=0;  
  36. 36                  m_enter=true;  
  37. 37                  GetAllMoney();                          //结账找零  
  38. 38              }  
  39. 39              return true;  
  40. 40          }  
  41. 41          else if(::GetFocus()==m_editrealmoneyctrl)          //判断当前焦点  
  42. 42          {  
  43. 43              SetBackMoney();                             //设置金额显示的模式  
  44. 44              m_backenter=true;  
  45. 45              return false;  
  46. 46          }  
  47. 47          else return false;  
  48. 48      }  
  49. 49      return CDialog::PreTranslateMessage(pMsg);  
  50. 50  }  

第3行代码是对键盘按下消息和回车消息的处理。在输入商品信息后,按下回车键可实现购买的商品价格统计,输入实付金额后按下回车键可直接给出找零。

第5~40行代码实现了当前焦点是商品数量编辑框时的操作。

第41~46行代码实现了当前焦点是实际付款编辑框时的操作。

第5、41行代码中GetFocus()是获取当前控件的焦点,实现了键盘易用性设置。所谓键盘易用性,是指在需要输入很多不同信息的界面中,在一种信息输入完成后,按下【Enter】键,输入焦点自动跳转到下一个要输入信息的控件。为了提高工作效率,提高键盘易用性十分必要。故本系统中就实现了这种人性化的功能。上述代码中函数GetAllMoney()实现了结账找零处理,具体代码如下:

代码位置:见光盘中本章源代码的CForeMange类。

  1. 1  void CForeMange::GetAllMoney()  
  2. 2  {  
  3. 3    float allmoney=0;  
  4. 4    CString strmoney;  
  5. 5    int itemcount=m_list.GetItemCount();                   //获取列表控件中行数  
  6. 6    if(itemcount==0)                                       //没有购买商品  
  7. 7    {  
  8. 8   ::AfxMessageBox("没有购入商品!");  
  9. 9   GetDlgItem(IDC_MERCID)->SetFocus();                 //设置控件焦点  
  10. 10      allmoney=0;  
  11. 11      m_allmoney.Format("累计\r\n金额:%.2f",allmoney);  
  12. 12      m_floatallmoney=allmoney;  
  13. 13      SetAllMoneyStyle();                                 //设置金额显示风格  
  14. 14      return;  
  15. 15    }  
  16. 16    for(int i=0;i<itemcount;i++)  
  17. 17    {  
  18. 18      strmoney=m_list.GetItemText(i,6);                       //获取价格  
  19. 19      allmoney+=atof(strmoney);                               //商品价格累计  
  20. 20    }  
  21. 21    m_allmoney.Format("累计\r\n金额:%.2f",allmoney);  
  22. 22    m_floatallmoney=allmoney;  
  23. 23    SetAllMoneyStyle();                                   //设置金额显示风格  
  24. 24    UpdateData(false);                                    //显示金额数量  
  25. 25  }  

第6~15行代码实现对没有购买商品的处理。

第16~20行代码实现购买商品价格的求和处理。

第21~24行代码实现设置金额显示风格,并显示详细的各个金额数量。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.5.1 登录模块功能分析 下一篇3.6.4 编号信息的动态获取

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: