#pragma once // CDlgTwain dialog #include #include typedef struct _san_opt { std::wstring name_key; std::wstring name; std::wstring title_key; std::wstring title; }SANEOPT; typedef struct _opt_used { std::wstring name_key; // same as SANEOPT::name_key std::string id_key; int id; // ID of CAP_SANE_EX_xxx bool operator==(const wchar_t* key) { return name_key == key; } bool operator==(const char* key) { return id_key == key; } bool operator==(const int eid) { return eid == id; } bool operator<(const struct _opt_used& r) { return id < r.id; } }OPTUSED; class CDlgTwain : public CDialogEx { DECLARE_DYNAMIC(CDlgTwain) public: CDlgTwain(CWnd* pParent = NULL); // standard constructor virtual ~CDlgTwain(); // Dialog Data enum { IDD = IDD_ADD_TWAIN_ATTR }; std::vector opts_; std::vector used_; std::wstring root_; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual BOOL OnInitDialog(); void on_sln_path_changed(void); void synchronize_opt(const SANEOPT& opt); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedButtonBrowse(); afx_msg void OnBnClickedButtonAdd(); CComboBox sane_; };