// TwainUIDlg.cpp: 实现文件 // #include "stdafx.h" #include "TwainUIDlg.h" #include "afxdialogex.h" #include "Resource.h" #include "scn_config.h" #include "PublicFunc.h" #include "filetools.h" //extern CUI_INI* m_pUI_INI; // TwainUIDlg 对话框 IMPLEMENT_DYNAMIC(TwainUIDlg, CDialog) TwainUIDlg::TwainUIDlg(MFC_UI* pUI, CWnd* pParent /*=nullptr*/) : CDialog(IDD_DIALOG_TWAINUI, pParent) { ui = pUI; //m_serialNum=ui->m_pDS->GetSerialNum(); //m_FwVersion=ui->m_pDS->GetFWVerison(); basicSetting.m_pBrightWin = &brightSetting; basicSetting.m_pFeedWin = &feederPaper; basicSetting.m_pImagePrcWin = &imageProcess; } TwainUIDlg::~TwainUIDlg() { } void TwainUIDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_TAB, m_tabCtrl); } BEGIN_MESSAGE_MAP(TwainUIDlg, CDialog) //ON_BN_CLICKED(IDOK, &TwainUIDlg::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &TwainUIDlg::OnBnClickedCancel) ON_BN_CLICKED(IDC_BTNDEFAULT, &TwainUIDlg::OnBnClickedDefault) ON_BN_CLICKED(IDC_BTNHELP, &TwainUIDlg::OnBnClickedHelp) ON_BN_CLICKED(IDC_BTNSAVECONFIG, &TwainUIDlg::OnBnClickedSaveItem) ON_BN_CLICKED(IDC_BTNDELETCONFIG, &TwainUIDlg::OnBnClickedDeletItem) ON_BN_CLICKED(IDC_BTNRECOVERYCONFIG, &TwainUIDlg::OnBnClickedRecovery) ON_BN_CLICKED(IDC_BTNBACKUPCONFIG, &TwainUIDlg::OnBnClickedBackUp) ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, &TwainUIDlg::OnSelchangeTab) ON_BN_CLICKED(IDC_CONFIRM, &TwainUIDlg::OnBnClickedConfirm) ON_LBN_SELCHANGE(IDC_LSTCONFIG, &TwainUIDlg::OnLbnSelchangeLstconfig) END_MESSAGE_MAP() // TwainUIDlg 消息处理程序 void TwainUIDlg::OnBnClickedConfirm() { // TODO: 在此添加控件通知处理程序代码 CString str_caption; GetDlgItemText(IDC_CONFIRM, str_caption); CONFIGPARAMS configItem = { 0 }; UpDateScanParam(&configItem); TCHAR szIniFile[MAX_PATH] = { 0 }; SHGetSpecialFolderPath(NULL, szIniFile, CSIDL_LOCAL_APPDATA, TRUE); _tcscat(szIniFile, HUAGAO_SCAN); _tcscat(szIniFile, TWAIN_INIPATH); _tcscat(szIniFile, TEXT("\\")); _tcscat(szIniFile, TWAIN_JSON_NAME); JsonConfig js; vector vc; vc.push_back(configItem); std::string savepath(szIniFile); js.WriteJsonArrayToFile(vc, savepath); if (str_caption.Compare(_T("扫描")) == 0)//内容为扫描时 { ui->Scan(); } else { ui->m_pDS->DoCloseDSOkEvent(); } } //取消按钮事件 void TwainUIDlg::OnBnClickedCancel() { // TODO: 在此添加控件通知处理程序代码 ui->m_pDS->DoCloseDSRequestEvent(); } //默认值设定按钮事件 void TwainUIDlg::OnBnClickedDefault() { // TODO: 在此添加控件通知处理程序代码 JsonConfig js; CONFIGPARAMS cf = js.GetDefaultConfigParams(); UpdateUI(cf); } //帮助按钮事件 void TwainUIDlg::OnBnClickedHelp() { // TODO: 在此添加控件通知处理程序代码 this->SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); TCHAR chmPath[MAX_PATH] = { 0 }; SHGetSpecialFolderPath(NULL, chmPath, CSIDL_WINDOWS, TRUE); _tcscat(chmPath, CHM_DEFAULT_PATH); HINSTANCE ret = ShellExecute(NULL, "Open", chmPath, NULL, NULL, SW_SHOWMAXIMIZED); //MessageBox(chmPath,"Path",MB_OK); int cvt = (int)ret; if (cvt < 32) { switch (cvt) { case ERROR_FILE_NOT_FOUND: MessageBox("未找到帮助文档!", "提示", MB_OK | MB_ICONINFORMATION); break; default: MessageBox("打开帮助文档异常!", "提示", MB_OK | MB_ICONINFORMATION); break; } } this->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } //保存用户首选项按钮 void TwainUIDlg::OnBnClickedSaveItem() { // TODO: 在此添加控件通知处理程序代码 SaveConfigDlg sfd(this); sfd.DoModal(); } //删除一个用户首选项按钮 void TwainUIDlg::OnBnClickedDeletItem() { // TODO: 在此添加控件通知处理程序代码 if (MessageBox(TEXT("确认要删除此用户首选项配置吗?"), TEXT("用户首选项"), MB_YESNO | MB_ICONQUESTION) == IDYES) { int cursel = -1; cursel = ((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->GetCurSel(); if (cursel != -1) { CFile file; file.Remove(cfi[cursel].SavePath.c_str()); UpdateListConfig(); } } } //恢复一个用户首选项组 void TwainUIDlg::OnBnClickedRecovery() { // TODO: 在此添加控件通知处理程序代码 this->SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); if (MessageBox(TEXT("如果恢复,当前所有已保存配置将丢失。是否继续?"), TEXT("恢复"), MB_YESNO | MB_ICONQUESTION) == IDYES) { JsonConfig js; CFileDialog ofd(TRUE, ".json", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _TEXT("Json Files (*.json)|*.json||)"), NULL); for (int i = 0; i < cfi.size(); i++) { DeleteFile(cfi[i].SavePath.c_str()); } cfi.clear(); if (IDOK == ofd.DoModal()) { std::string path = ofd.GetPathName().GetBuffer(); vector vc = js.ReadJsonArrayFromFile(path); for (int i = 0; i < vc.size(); i++) { // js.WriteJsonArrayToFile(vc[i],vc[i].SavePath); vector vc_item; vc_item.push_back(vc[i]); js.WriteJsonArrayToFile(vc_item, vc[i].SavePath); } UpdateListConfig(); } } this->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } //备份一个用户首选项组 void TwainUIDlg::OnBnClickedBackUp() { // TODO: 在此添加控件通知处理程序代码 char szFilters[] = "Json file(*.json)\0"; CFileDialog cfd(FALSE, "json", _T("另存为")); cfd.m_ofn.lpstrTitle = ""; cfd.m_ofn.lpstrFilter = szFilters; this->SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); JsonConfig js; if (IDOK == cfd.DoModal()) { vector vc_tempOut; std::vector temp_cfi = getConfigFiles(); for (int i = 0; i < temp_cfi.size(); i++) { vector vc_item = js.ReadJsonArrayFromFile(temp_cfi[i].SavePath.c_str()); if (vc_item.size() > 0) { vc_tempOut.push_back(vc_item[0]); } } if (vc_tempOut.size() > 0) { std:: string path = cfd.GetPathName().GetBuffer(); js.WriteJsonArrayToFile(vc_tempOut, path); } } this->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } /*初始化TwainUI,包括基本选项卡、*/ /*亮度、图像处理、送纸选项卡的初始化*/ BOOL TwainUIDlg::OnInitDialog() { CDialog::OnInitDialog(); m_tabCtrl.InsertItem(0, "基本"); m_tabCtrl.InsertItem(1, "亮度"); m_tabCtrl.InsertItem(2, "图像处理"); m_tabCtrl.InsertItem(3, "送纸"); basicSetting.Create(IDD_DIALOG_PAGEBASIC, &m_tabCtrl); brightSetting.Create(IDD_DIALOG_PAGEBRIGHTNESS, &m_tabCtrl); imageProcess.Create(IDD_DIALOG_PAGEIMGPROC, &m_tabCtrl); feederPaper.Create(IDD_DIALOG_PAGEFEEDPAPER, &m_tabCtrl); CRect rect; m_tabCtrl.GetClientRect(&rect); rect.top += 22; rect.bottom -= 4; rect.left += 4; rect.right -= 6; basicSetting.MoveWindow(&rect); brightSetting.MoveWindow(&rect); imageProcess.MoveWindow(&rect); feederPaper.MoveWindow(&rect); basicSetting.ShowWindow(TRUE); m_tabCtrl.SetCurSel(0); // TODO: 在此添加额外的初始化 JsonConfig cfg; CONFIGPARAMS configParams = cfg.ReadDefaultConfig(); UpdateUI(configParams); UpdateListConfig(); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } void TwainUIDlg::OnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 CRect tabRect; // 标签控件客户区的Rect // 获取标签控件客户区Rect,并对其调整,以适合放置标签页 m_tabCtrl.GetClientRect(&tabRect); tabRect.left += 1; tabRect.right -= 2; tabRect.top += 23; tabRect.bottom -= 4; switch (m_tabCtrl.GetCurSel()) { case 0: basicSetting.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); brightSetting.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); imageProcess.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); feederPaper.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); break; case 1: basicSetting.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); brightSetting.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); imageProcess.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); feederPaper.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); break; case 2: basicSetting.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); brightSetting.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); imageProcess.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); feederPaper.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); break; case 3: basicSetting.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); brightSetting.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); imageProcess.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); feederPaper.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); break; default: break; } *pResult = 0; } ////////////////////////////////////////////////////////////////////// /*从UI获取参数*/ void TwainUIDlg::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs) { //brightSetting.m_hWnd //CWnd* hwd= brightSetting.GetDlgItem(IDC_CHKSELFCONTRAST); configItem->EnAutoContrast = ((CButton*)(brightSetting.GetDlgItem(IDC_CHKSELFCONTRAST)))->GetCheck();//自动亮度对比度 configItem->EnBackRotate180 = ((CButton*)(feederPaper.GetDlgItem(IDC_CKBACKROTATION)))->GetCheck();//背面旋转180 configItem->EnBindingDetect = ((CButton*)(feederPaper.GetDlgItem(IDC_CKBINDINGDETECT)))->GetCheck();//装订检测 configItem->EnUltrasonicDetect = ((CButton*)(feederPaper.GetDlgItem(IDC_CKULTRSONICDETECT)))->GetCheck();//双张检测 configItem->EnFillBlack = ((CButton*)(imageProcess.GetDlgItem(IDC_CKFILLBLACKRECT)))->GetCheck();//填充黑框 configItem->EnAutoDescrew = ((CButton*)(imageProcess.GetDlgItem(IDC_CKAUTODESKREW)))->GetCheck();//自动纠偏 configItem->EnScrewDetect = ((CButton*)(feederPaper.GetDlgItem(IDC_CKSKEWDETECT)))->GetCheck();//歪斜检测 configItem->Brightness = ((CSliderCtrl*)brightSetting.GetDlgItem(IDC_SLDBRIGTHNESS))->GetPos() - 128;//亮度 int indexColorModel = ((CComboBox*)basicSetting.GetDlgItem(IDC_CMBCOLORTYPE))->GetCurSel(); configItem->Pixtype = getColorModel(indexColorModel);//颜色模式 configItem->Contrast = ((CSliderCtrl*)brightSetting.GetDlgItem(IDC_SLDCONTRAST))->GetPos() - 4;//对比度 int index = ((CComboBox*)basicSetting.GetDlgItem(IDC_CMBRESLUTION))->GetCurSel(); configItem->Resolution = getResolution(index);//分辨率 configItem->Duplex = ((CComboBox*)(basicSetting.GetDlgItem(IDC_CMBDUPLEX)))->GetCurSel();//单双面 configItem->Filter = ((CComboBox*)imageProcess.GetDlgItem(IDC_CMBFILTER))->GetCurSel();//除色 configItem->Gamma = ((CSliderCtrl*)brightSetting.GetDlgItem(IDC_SLDGAMMA))->GetPos();//gamma int index_ss = ((CComboBox*)basicSetting.GetDlgItem(IDC_CMBSS))->GetCurSel(); configItem->PaperSize = getPaparSize(index_ss);//纸张类型 configItem->Orentation = ((CComboBox*)feederPaper.GetDlgItem(IDC_CMBORENTATION))->GetCurSel();//旋转方向 configItem->EnMultiOutPutR = ((CButton*)imageProcess.GetDlgItem(IDC_CKMULTIOUTPUT))->GetCheck();//多流除红 CString str_count; ((CEdit*)feederPaper.GetDlgItem(IDC_EDSCANNUM))->GetWindowText(str_count); int count = atoi(str_count); if (count == 0) { ((CEdit*)feederPaper.GetDlgItem(IDC_EDSCANNUM))->SetWindowTextA("1"); count = 1; } str_count.ReleaseBuffer(); if (configItem->EnMultiOutPutR) count *= 2; configItem->ScanCount = ((CButton*)feederPaper.GetDlgItem(IDC_RDCONSISTSCAN))->GetCheck() ? -1 : (configItem->Duplex == 0 ? count : count * 2);//扫描张数 configItem->ScrewDetectLevel = ((CSliderCtrl*)feederPaper.GetDlgItem(IDC_SLDDETECTLEVEL))->GetPos();//歪斜检测等级 configItem->EnOutHole = ((CButton*)imageProcess.GetDlgItem(IDC_CKREMOVEHOLE))->GetCheck();//除穿孔可用性 configItem->OutHoleRatio = ((CSliderCtrl*)imageProcess.GetDlgItem(IDC_SLDOUTHOLE))->GetPos();//穿孔搜索范围比例系数 if (!updateDs) return; CTWAINContainerInt *pnCap = 0; CTWAINContainerBool *pbCap = false; CTWAINContainerFix32 *pfCap = 0; CTWAINContainerFix32Range *pfRCap = 0; CTWAINContainerFrame *pframeCap = 0; bool ret = false; if (0 == (pnCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_PIXELTYPE)))) return; else { ret = pnCap->SetCurrent(configItem->Pixtype); } if (0 == (pnCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_SUPPORTEDSIZES)))) return; else { ret = pnCap->SetCurrent(configItem->PaperSize); } if (0 == (pnCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_ORIENTATION)))) return; else { ret = pnCap->SetCurrent(configItem->Orentation == 4 ? TWOR_AUTOTEXT : configItem->Orentation); } if (0 == (pfCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_XRESOLUTION)))) return; else { ret = pfCap->SetCurrent(configItem->Resolution); } // Y resolution the same. if (0 == (pfCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_YRESOLUTION)))) return; else { ret = pfCap->SetCurrent(configItem->Resolution); } if (0 == (pfRCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_CONTRAST)))) return; else { float value_Contrast = GetContrast(configItem->Contrast); ret = pfRCap->SetCurrent(value_Contrast); } if (0 == (pfRCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_BRIGHTNESS)))) return; else { ret = pfRCap->SetCurrent(configItem->Brightness); } // Y resolution the same. if (0 == (pfRCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_GAMMA)))) return; else { ret = pfRCap->SetCurrent(configItem->Gamma / 10); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_AUTOMATICCROPUSESFRAME)))) return; else { bool temp = (configItem->PaperSize) == 90; ret = pbCap->SetCurrent(temp); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_AUTODISCARDBLANKPAGES)))) return; else { bool temp = (configItem->Duplex) == 2; configItem->EnDiscardBlank = temp; ret = pbCap->SetCurrent(temp); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8091)))) return; else { bool temp = (configItem->Duplex) == 3; configItem->EnDiscardBlankVince = temp; ret = pbCap->SetCurrent(temp); } //填充黑框 if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8004)))) return; else { ret = pbCap->SetCurrent(configItem->EnFillBlack); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_AUTOMATICDESKEW)))) return; else { ret = pbCap->SetCurrent(configItem->EnAutoDescrew); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8005))))//背面旋转180 return; else { ret = pbCap->SetCurrent(configItem->EnBackRotate180); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8006))))//歪斜检测 return; else { ret = pbCap->SetCurrent(configItem->EnScrewDetect); } if (0 == (pfRCap = dynamic_cast(ui->m_pDS->findCapability(0x8021))))//歪斜检测等级 return; else { ret = pfRCap->SetCurrent((float)configItem->ScrewDetectLevel); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8090))))//装订检测 return; else { ret = pbCap->SetCurrent(configItem->EnBindingDetect); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability((CAP_DOUBLEFEEDDETECTION))))) return; else { ret = pbCap->SetCurrent(configItem->EnUltrasonicDetect); } if (0 == (pnCap = dynamic_cast(ui->m_pDS->findCapability(CAP_XFERCOUNT)))) return; else { ret = pnCap->SetCurrent(configItem->ScanCount); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(CAP_DUPLEXENABLED)))) { return; } else { ret = pbCap->SetCurrent(configItem->Duplex == 0 ? FALSE : TRUE); } if (0 == (pnCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_FILTER)))) { return; } else { ret = pnCap->SetCurrent(configItem->Filter); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8018)))) { return; } else { ret = pbCap->SetCurrent(configItem->EnOutHole); } if (0 == (pfRCap = dynamic_cast(ui->m_pDS->findCapability(0x8092)))) { return; } else { ret = pfRCap->SetCurrent((float)(configItem->OutHoleRatio)); } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8026)))) { return; } else { ret = pbCap->SetCurrent(configItem->EnMultiOutPutR); } } void TwainUIDlg::UpdateListConfig() { ((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->ResetContent(); if (cfi.size() > 0) { cfi.clear(); } cfi = getConfigFiles(); for (int i = 0; i < cfi.size(); i++) { ((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->AddString(cfi[i].Caption.c_str()); } if (cfi.size() <= 0) { ((CButton*)(GetDlgItem(IDC_BTNDELETCONFIG)))->EnableWindow(FALSE); ((CButton*)(GetDlgItem(IDC_BTNBACKUPCONFIG)))->EnableWindow(FALSE); } else { ((CButton*)(GetDlgItem(IDC_BTNDELETCONFIG)))->EnableWindow(TRUE); ((CButton*)(GetDlgItem(IDC_BTNBACKUPCONFIG)))->EnableWindow(TRUE); } } std::string TwainUIDlg::getSerialNum() { return ui->m_pDS->GetSerialNum(); } std::string TwainUIDlg::getHardVersion() { return ui->m_pDS->GetFWVerison(); } ////////////////////////////////////////////////////////////////////// /*更新UI*/ void TwainUIDlg::UpdateUI(CONFIGPARAMS configParams) { ((CComboBox*)basicSetting.GetDlgItem(IDC_CMBCOLORTYPE))->SetCurSel(getColorModelIndex(configParams.Pixtype)); basicSetting.OnCbnSelchangeCmbcolortype(); ((CButton*)brightSetting.GetDlgItem(IDC_CHKSELFCONTRAST))->SetCheck(configParams.EnAutoContrast); ((CButton*)imageProcess.GetDlgItem(IDC_CKAUTODESKREW))->SetCheck(configParams.EnAutoDescrew); ((CButton*)(imageProcess.GetDlgItem(IDC_CKFILLBLACKRECT)))->SetCheck(configParams.EnFillBlack); ((CButton*)feederPaper.GetDlgItem(IDC_CKBACKROTATION))->SetCheck(configParams.EnBackRotate180); ((CButton*)feederPaper.GetDlgItem(IDC_CKBINDINGDETECT))->SetCheck(configParams.EnBindingDetect); ((CButton*)feederPaper.GetDlgItem(IDC_CKULTRSONICDETECT))->SetCheck(configParams.EnUltrasonicDetect); imageProcess.SetOutHoleValue(configParams.OutHoleRatio); imageProcess.EnableOutHoleCheckChanged(configParams.EnOutHole); imageProcess.SetMultiOutputEnable(configParams.Pixtype, configParams.EnMultiOutPutR); int br_value = configParams.Brightness + 128; ((CSliderCtrl*)brightSetting.GetDlgItem(IDC_SLDBRIGTHNESS))->SetPos(br_value); sprintf(strB, "%d", br_value); ((CStatic*)brightSetting.GetDlgItem(IDC_LBBRIGHTNESS))->SetWindowTextA(strB); ((CSliderCtrl*)brightSetting.GetDlgItem(IDC_SLDCONTRAST))->SetPos(configParams.Contrast + 4); sprintf(strC, "%d", (configParams.Contrast + 4)); ((CStatic*)brightSetting.GetDlgItem(IDC_LBCONTRAST))->SetWindowTextA(strC); ((CComboBox*)basicSetting.GetDlgItem(IDC_CMBRESLUTION))->SetCurSel(getResolutionIndex(configParams.Resolution)); ((CComboBox*)basicSetting.GetDlgItem(IDC_CMBDUPLEX))->SetCurSel(configParams.Duplex); if (configParams.Duplex == 0) { ((CButton*)feederPaper.GetDlgItem(IDC_CKBACKROTATION))->SetCheck(FALSE); ((CButton*)feederPaper.GetDlgItem(IDC_CKBACKROTATION))->EnableWindow(FALSE); } ((CComboBox*)imageProcess.GetDlgItem(IDC_CMBFILTER))->SetCurSel(configParams.Filter); if (configParams.Pixtype == 2) { ((CComboBox*)imageProcess.GetDlgItem(IDC_CMBFILTER))->SetCurSel(0); ((CComboBox*)imageProcess.GetDlgItem(IDC_CMBFILTER))->EnableWindow(FALSE); } ((CSliderCtrl*)brightSetting.GetDlgItem(IDC_SLDGAMMA))->SetPos(configParams.Gamma); sprintf(strG, "%0.1f", configParams.Gamma / 10.0); ((CStatic*)brightSetting.GetDlgItem(IDC_LBGAMMA))->SetWindowTextA(strG); ((CComboBox*)basicSetting.GetDlgItem(IDC_CMBSS))->SetCurSel(getPaparSizeIndex(configParams.PaperSize)); if (configParams.ScanCount <= 0)//连续扫描 { ((CButton*)feederPaper.GetDlgItem(IDC_RDCONSISTSCAN))->SetCheck(TRUE); ((CButton*)feederPaper.GetDlgItem(IDC_RDSPECIFYSCANNUM))->SetCheck(FALSE); ((CEdit*)feederPaper.GetDlgItem(IDC_EDSCANNUM))->SetWindowTextA(_T("1")); ((CEdit*)feederPaper.GetDlgItem(IDC_EDSCANNUM))->EnableWindow(FALSE); } else//指定数目 { ((CEdit*)feederPaper.GetDlgItem(IDC_EDSCANNUM))->EnableWindow(TRUE); ((CButton*)feederPaper.GetDlgItem(IDC_RDCONSISTSCAN))->SetCheck(FALSE); ((CButton*)feederPaper.GetDlgItem(IDC_RDSPECIFYSCANNUM))->SetCheck(TRUE); CString str_count; int tempcount; if (configParams.Duplex == 0) { if (configParams.EnMultiOutPutR) tempcount = configParams.ScanCount / 2; else tempcount = configParams.ScanCount; tempcount = tempcount == 0 ? 1 : tempcount; } else { if (configParams.EnMultiOutPutR) tempcount = configParams.ScanCount / 4; else tempcount = configParams.ScanCount; tempcount = tempcount == 0 ? 1 : tempcount; } str_count.Format("%d", tempcount); ((CEdit*)feederPaper.GetDlgItem(IDC_EDSCANNUM))->SetWindowTextA(str_count); } ((CButton*)feederPaper.GetDlgItem(IDC_CKSKEWDETECT))->SetCheck(configParams.EnScrewDetect); ((CSliderCtrl*)feederPaper.GetDlgItem(IDC_SLDDETECTLEVEL))->SetPos(configParams.ScrewDetectLevel); feederPaper.OnBnClickedCkskewdetect(); ((CComboBox*)feederPaper.GetDlgItem(IDC_CMBORENTATION))->SetCurSel(configParams.Orentation); //brightSetting.FlashWindow(TRUE); } int TwainUIDlg::getResolution(int index) { int result = 200;//默认分辨率 switch (index) { case 0: result = 100; break; case 1: result = 150; break; case 2: result = 200; break; case 3: result = 240; break; case 4: result = 300; break; default: break; } return result; } ////////////////////////////////////////////////////////////////////// int TwainUIDlg::getPaparSize(int index) { int result = TWSS_A4;//默认A4 switch (index) { case 0: result = TWSS_A3; break; case 1: result = TWSS_A4; break; case 2: result = TWSS_A4R; break; case 3: result = TWSS_A5; break; case 4: result = TWSS_A5R; break; case 5: result = TWSS_A6; break; case 6: result = TWSS_A6R; break; case 7: result = TWSS_B4; break; case 8: result = TWSS_B5; break; case 9: result = TWSS_B5R; break; case 10: result = TWSS_B6; break; case 11: result = TWSS_B6R; break; case 12: result = TWSS_USLETTER; break; case 13: result = LETTERR; break; case 14: result = DOUBLELETTER; break; case 15: result = TWSS_USLEGAL; break; case 16: result = TWSS_AUTOCROP; break; case 17: result = TWSS_LONGDOCMENT; break; default: break; } return result; } int TwainUIDlg::getResolutionIndex(int resolution) { int result = 0; int resulotions[RESOLUTIONCOUNT] = { RESOLUTION }; for (size_t i = 0; i < RESOLUTIONCOUNT; i++) { if (resulotions[i] == resolution) { result = i; break; } } return result; } int TwainUIDlg::getPaparSizeIndex(int papersize) { int result = 1; int ss[TOTALPAPARTYPE] = { PAPARTYPE }; for (size_t i = 0; i < TOTALPAPARTYPE; i++) { if (ss[i] == papersize) { result = i; break; } } return result; } int TwainUIDlg::getColorModel(int index) { int result = TWPT_GRAY; switch (index) { case 0: result = TWPT_RGB; break; case 2: result = TWPT_BW; default: break; } return result; } int TwainUIDlg::getColorModelIndex(int pixtype) { return pixtype == 2 ? 0 : (pixtype == 1 ? 1 : 2); } vector TwainUIDlg::getConfigFiles() { vector vc_cfi; CFileFind find; TCHAR cfFilePath[MAX_PATH] = { 0 }; SHGetSpecialFolderPath(NULL, cfFilePath, CSIDL_LOCAL_APPDATA, TRUE); _tcscat(cfFilePath, HUAGAO_SCAN); _tcscat(cfFilePath, TWAIN_DATA_PATH); CString filePath(cfFilePath); BOOL isFind = find.FindFile(filePath + _TEXT("/*.json")); while (isFind) { isFind = find.FindNextFileA(); if (find.IsDots()) { continue; } else { CONFIGINFO cfi; cfi.Caption = find.GetFileTitle(); cfi.SavePath = find.GetFilePath(); vc_cfi.push_back(cfi); } } return vc_cfi; } /* **列表选择项变更事件** */ void TwainUIDlg::OnLbnSelchangeLstconfig() { // TODO: 在此添加控件通知处理程序代码 int index = -1; index = ((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->GetCurSel(); if (index != -1) { JsonConfig js; //std::string savepath= cfi[index].SavePath; std::vector vc_temp; vc_temp = js.ReadJsonArrayFromFile(cfi[index].SavePath); if (vc_temp.size() > 0) { UpdateUI(vc_temp[0]); } } }