CPosPrinter.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #pragma once
  2. #include "../pch/pch.h"
  3. #include "../order/CWaimaiOrder.h"
  4. //SetupDiGetInterfaceDeviceDetail所需要的输出长度,定义足够大
  5. #define INTERFACE_DETAIL_SIZE 1024
  6. //设备数量上限,假设16台上限
  7. #define MAX_DEVICE 16
  8. //USB类的GUID,通过这个去找USB打印机
  9. const GUID USB_GUID = {0x28d78fad, 0x5a12, 0x11d1, {0xae, 0x5b, 0x00, 0x00, 0xf8, 0x03, 0xa8, 0xc2 }};
  10. //存储打印端口句柄的结构
  11. class PrinterHandle
  12. {
  13. public:
  14. HANDLE hPort;
  15. int type; //句柄类型 1:usb 2:并口 3:串口
  16. };
  17. class CPosPrinter
  18. {
  19. public:
  20. CPosPrinter();
  21. ~CPosPrinter();
  22. void PrintWaimaiOrderShouyin(CWaimaiOrder& order);
  23. void PrintWaimaiOrderBiaoqian(CWaimaiOrder& order);
  24. void PrintWaimaiOrderChufang(CWaimaiOrder& order);
  25. //usb打印机的类型 1:收银小票打印机 2:标签打印机
  26. void InitUsb(int usbType = 1);
  27. std::vector<std::wstring> getUsbDevices();
  28. private:
  29. void InitBingkou();
  30. void InitCom();
  31. void InitShouyin();
  32. //打开某一个指定的usb端口
  33. void InitOneUsb(wstring usb_path);
  34. //usb打印机的类型 1:收银小票打印机 2:标签打印机
  35. int GetDevicePath(LPGUID lpGuid, int usbType);
  36. //判断usb打印机是小票打印机还是标签打印机
  37. int GetPrinterType(wstring vid, wstring pid);
  38. int WriteData(string meg);
  39. int WriteBuf(const unsigned char* buf, int len);
  40. //端口连通性测试
  41. bool PortTest(HANDLE hPort);
  42. //小票打印机和厨房打印的处理方法
  43. int POS_Reset(void);
  44. int POS_FeedLine(void);
  45. int POS_Feed(void);
  46. int POS_SetMotionUnit(int x, int y);
  47. int POS_SET_MOVE_X();
  48. int POS_MOVE_X();
  49. int POS_SET_ABS_X(int x, int y);
  50. int POS_SET_PRINT_AREA(int x, int y);
  51. int POS_TextOut(string abc, bool is_double_width = false, bool is_double_height = false, int align_type = 0);
  52. int POS_CutPaper();
  53. int POS_OutQRCode(std::string data);
  54. void PrintBmp(Bitmap* bmp);
  55. //标签打印机的处理方法
  56. void BIAOQIAN_Reset();
  57. void BIAOQIAN_FORMFEED();
  58. void BIAOQIAN_TEXTOUT(std::string content, int x, int y, int x_multiplication, int y_multiplication);
  59. void BIAOQIAN_PRINT();
  60. void BIAOQIAN_CLS();
  61. //字符空格计算的辅助函数
  62. void CalWord(string s, int& nHanzi, int& nZimu);
  63. //对小票打印和厨房打印的名字进行换行处理
  64. std::vector<std::string> HandleFoodname(std::string oldname, int guige = 1);
  65. std::string HandleFoodItemPrice(std::string oldprice, int guige = 1);
  66. std::string HandleFoodQuantity(std::string oldquantity, int guige = 1);
  67. std::string HandleFoodTotalPrice(std::string oldprice, int guige = 1);
  68. //对标签打印的名字进行换行处理
  69. std::vector<std::string> HandleBiaoqianFoodname(std::string oldname);
  70. private:
  71. //收银小票打印的句柄组合
  72. std::vector<PrinterHandle> m_hPorts;
  73. //用于厨房打印机和网口类型的收银小票打印
  74. boost::asio::io_service m_io;
  75. boost::asio::ip::tcp::socket m_socket;
  76. //这个是当前的输出模式,是CreateFile模式,还是socket模式
  77. int m_type;
  78. //usb打印机的描述
  79. std::vector<std::wstring> m_usb_devices;
  80. };