// 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(); this->ShowWindow(HIDE_WINDOW); } } //取消按钮事件 void TwainUIDlg::OnBnClickedCancel() { // TODO: 在此添加控件通知处理程序代码 //CDialog::OnCancel(); //disableDS ui->m_pDS->DoCloseDSRequestEvent(); this->ShowWindow(HIDE_WINDOW); } //默认值设定按钮事件 void TwainUIDlg::OnBnClickedDefault() { // TODO: 在此添加控件通知处理程序代码 JsonConfig js; CONFIGPARAMS cf=js.GetDefaultConfigParams(); UpdateUI(cf); } //帮助按钮事件 void TwainUIDlg::OnBnClickedHelp() { // TODO: 在此添加控件通知处理程序代码 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; } } } //保存用户首选项按钮 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: 在此添加控件通知处理程序代码 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 vc=js.ReadJsonArrayFromFile(path); for (int i=0;i vc_item; vc_item.push_back(vc[i]); js.WriteJsonArrayToFile(vc_item,vc[i].SavePath); } UpdateListConfig(); } } } //备份一个用户首选项组 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 vc_item=js.ReadJsonArrayFromFile(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.GetFileName().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: 在此添加额外的初始化 if(SCANNERNAME == "XS8100") { SetWindowText("ZhibenScan XS8100 TWAIN"); } else { #ifdef G200 SetWindowText("HUAGOSCAN Hi-5100 TWAIN"); #elif defined G300 SetWindowText("HUAGOSCAN G300 TWAIN"); #elif defined G400 SetWindowText("HUAGOSCAN G400 TWAIN"); #endif } 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) { 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();//旋转方向 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(); 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();//穿孔搜索范围比例系数 configItem->EnMultiOutPutR=((CButton*)imageProcess.GetDlgItem(IDC_CKMULTIOUTPUT))->GetCheck();//多流除红 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)))) { //XdPrint("Could not get ICAP_PIXELTYPE\n"); return; } else { ret=pnCap->SetCurrent(configItem->Pixtype); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_PIXELTYPE Error"); //} } if (0 == (pnCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_SUPPORTEDSIZES)))) { //XdPrint("Could not get ICAP_SUPPORTEDSIZES\n"); return; } else { ret=pnCap->SetCurrent(configItem->PaperSize); //CString sss; //sss.Format("m_HardWareParams.PaperType is %d",configItem->PaperSize); //std::string sbuffer = sss.GetBuffer(); //FileTools::write_log("D:/1.txt","set " + sbuffer); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_SUPPORTEDSIZES Error"); //} } if (0 == (pnCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_ORIENTATION)))) { //XdPrint("Could not get ICAP_ORIENTATION\n"); return; } else { ret=pnCap->SetCurrent(configItem->Orentation==4?TWOR_AUTOTEXT:configItem->Orentation); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_ORIENTATION Error"); //} } if (0 == (pfCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_XRESOLUTION)))) { //XdPrint("Could not get ICAP_XRESOLUTION\n"); return; } else { ret=pfCap->SetCurrent(configItem->Resolution); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_XRESOLUTION Error"); //} } // Y resolution the same. if (0 == (pfCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_YRESOLUTION)))) { //XdPrint("Could not get ICAP_YRESOLUTION\n"); return; } else { ret=pfCap->SetCurrent(configItem->Resolution); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_YRESOLUTION Error"); //} } if (0 == (pfRCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_CONTRAST)))) { //XdPrint("Could not get ICAP_CONTRAST\n"); return; } else { float value_Contrast=GetContrast(configItem->Contrast); ret=pfRCap->SetCurrent(value_Contrast); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_CONTRAST Error"); //} } if (0 == (pfRCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_BRIGHTNESS)))) { //XdPrint("Could not get ICAP_BRIGHTNESS\n"); return; } else { ret=pfRCap->SetCurrent(configItem->Brightness); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_BRIGHTNESS Error"); //} } // Y resolution the same. if (0 == (pfRCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_GAMMA)))) { //XdPrint("Could not get ICAP_GAMMA\n"); return; } else { ret=pfRCap->SetCurrent(configItem->Gamma/10); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_GAMMA Error"); //} } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_AUTOMATICCROPUSESFRAME)))) { //XdPrint("Could not get ICAP_AUTOMATICCROPUSESFRAME\n"); return; } else { bool temp = (configItem->PaperSize) == TWSS_NONE; ret=pbCap->SetCurrent(temp); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_AUTOMATICCROPUSESFRAME Error"); //} } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_AUTODISCARDBLANKPAGES)))) { //XdPrint("Could not get ICAP_AUTODISCARDBLANKPAGES\n"); return; } else { bool temp = (configItem->Duplex) == 2; configItem->EnDiscardBlank=temp; ret=pbCap->SetCurrent(temp); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_AUTODISCARDBLANKPAGES Error"); //} } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8091)))) { //XdPrint("Could not get ICAP_AUTODISCARDBLANKPAGES\n"); return; } else { bool temp = (configItem->Duplex) == 3; configItem->EnDiscardBlankVince=temp; ret=pbCap->SetCurrent(temp); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set 0x8091 Error"); //} } //填充黑框 if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8004)))) { cerr << "Could not get ICAP_AUTOMATICCROPUSESFRAME" << endl; return; } else { ret=pbCap->SetCurrent(configItem->EnFillBlack); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set 0x8004 Error"); //} } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_AUTOMATICDESKEW)))) { //XdPrint("Could not get ICAP_AUTOMATICDESKEW\n"); return; } else { ret=pbCap->SetCurrent(configItem->EnAutoDescrew); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_AUTOMATICDESKEW Error"); //} } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8005))))//背面旋转180 { //XdPrint("Could not get 歪斜检测\n"); return; } else { ret=pbCap->SetCurrent(configItem->EnBackRotate180); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set 0x8005 Error"); //} } #ifdef G200 if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8006))))//歪斜检测 { //XdPrint("Could not get 歪斜检测\n"); return; } else { ret=pbCap->SetCurrent(configItem->EnScrewDetect); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set 0x8006 Error"); //} } if (0 == (pfRCap = dynamic_cast(ui->m_pDS->findCapability(0x8021))))//歪斜检测等级 { //XdPrint("Could not get 歪斜检测等级\n"); return; } else { ret=pfRCap->SetCurrent((float)configItem->ScrewDetectLevel); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set 0x8021 Error"); //} } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(0x8090))))//装订检测 { //XdPrint("Could not get 装订检测\n"); return; } else { ret=pbCap->SetCurrent(configItem->EnBindingDetect); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set 0x8090 Error"); //} } #endif // G200 if (0==(pbCap=dynamic_cast(ui->m_pDS->findCapability((CAP_DOUBLEFEEDDETECTION))))) { cerr << "Could not get CAP_DOUBLEFEEDDETECTION" << endl; } else { ret=pbCap->SetCurrent(configItem->EnUltrasonicDetect); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set CAP_DOUBLEFEEDDETECTION Error"); //} } if (0 == (pnCap = dynamic_cast(ui->m_pDS->findCapability(CAP_XFERCOUNT)))) { //XdPrint("Could not get ICAP_SUPPORTEDSIZES\n"); return; } else { ret=pnCap->SetCurrent(configItem->ScanCount); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set CAP_XFERCOUNT Error"); //} } if (0 == (pbCap = dynamic_cast(ui->m_pDS->findCapability(CAP_DUPLEXENABLED)))) { //XdPrint("Could not get CAP_DUPLEX\n"); return; } else { ret= pbCap->SetCurrent(configItem->Duplex==0?FALSE:TRUE); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set CAP_DUPLEXENABLED Error"); //} } if (0 == (pnCap = dynamic_cast(ui->m_pDS->findCapability(ICAP_FILTER)))) { //XdPrint("Could not get ICAP_FILTER\n"); return; } else { ret=pnCap->SetCurrent(configItem->Filter); //if (!ret) //{ // FileTools::write_log("D:/1.txt","set ICAP_FILTER Error"); //} } 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;iAddString(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) { tempcount= configParams.ScanCount; } else { tempcount= configParams.ScanCount/2; } 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 if (index >= papersizelist.size()) return result; result = papersizelist[index]; //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_NONE; // break; //case 17: // result = TWSS_MAXSIZE; // 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) { for (auto it = papersizelist.begin(); it!=papersizelist.end(); it++) { if (it->second == papersize) return it->first; } return 1; //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]); } } }