#pragma once // CDlgScanner 对话框 #include "./scanner/scanner_handler.h" #include #include "scanner/opt_ui/DlgSetting.h" class CDlgScanner; namespace usb { typedef struct _end_point { BYTE iface = -1; BYTE type = -1; BYTE addr = -1; size_t packet = 0; }USBEP; typedef struct _usb_pnp { libusb_context* ctx = NULL; libusb_device* device = NULL; libusb_device_handle* handle = NULL; CDlgScanner* dlg = NULL; WORD vid = 0; WORD pid = 0; bool arrive = true; std::vector eps; }USBPNP, * LPUSBPNP; std::wstring now(void); const wchar_t* error_name(int err, wchar_t* unk = NULL); std::wstring a2u(const char* ansi); std::string u2a(const wchar_t* unic); void enum_endpoints(libusb_device* device, std::vector& eps); const wchar_t* ep_type(BYTE type); BYTE ep_type(const wchar_t* str); } enum { WM_USB_PNP = WM_USER + 1001, WM_RCV_MSG, WM_OPENNING_DLG_CLOSED, WM_TRAY_MSG, WM_TIMER_CANCEL_TOPMOST, }; class CDlgScanner : public CDialogEx { DECLARE_DYNAMIC(CDlgScanner) HWND parent_; scanner_handler* scanner_; thread_pool *threads_; volatile bool auto_tx_; uint32_t auto_tx_file_; HANDLE auto_wait_; dlg_setting *setting_ui_; SANEAPI sane_api_; std::wstring img_root_; uint32_t img_cnt_; public: CDlgScanner(CWnd* pParent = nullptr); // 标准构造函数 virtual ~CDlgScanner(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_SCANNER }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 virtual BOOL OnInitDialog(); virtual BOOL PreTranslateMessage(MSG* pMsg); DECLARE_MESSAGE_MAP() int refresh_bulk_status(void); void thread_auto_tx_file(void); void enable_buttons(bool enable); void set_text(UINT id, const wchar_t* text); bool is_checked(UINT id); void set_check(UINT id, bool checked); void click_repeat(bool enable_buttons = false, bool enable = true); public: void set_device(usb::LPUSBPNP pnp); void get_option(const char* name, void* value, size_t size); int set_option(const char* name, void* value, int type, size_t len, size_t max_len, int* after); public: CTabCtrl tab_opt_; CTabCtrl tab_oper_; afx_msg void OnTcnSelchangeTabOper(NMHDR* pNMHDR, LRESULT* pResult); afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedButtonResetBulk(); afx_msg void OnBnClickedButtonBrowseSavingPath(); afx_msg void OnBnClickedButtonScan(); afx_msg void OnBnClickedButtonBrowseFile(); afx_msg void OnBnClickedButtonSendFile(); afx_msg void OnBnClickedButtonRecvFile(); afx_msg void OnBnClickedButtonStartProgram(); afx_msg void OnBnClickedButtonSendEp0(); afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnBnClickedCheckAuto(); afx_msg void OnBnClickedButtonRefresh(); afx_msg void OnBnClickedCheckRepeat(); afx_msg LRESULT OnSetText(WPARAM wp, LPARAM lp); afx_msg LRESULT OnIsButtonChecked(WPARAM wp, LPARAM lp); afx_msg LRESULT OnSetButtonChecked(WPARAM wp, LPARAM lp); afx_msg LRESULT OnEnableCtrls(WPARAM wp, LPARAM lp); afx_msg LRESULT OnDeviceStatus(WPARAM wp, LPARAM lp); };