twain2/hugaotwainds/TwainUIDlg.cpp

1042 lines
56 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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<CONFIGPARAMS> 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<cfi.size();i++)
{
DeleteFile(cfi[i].SavePath.c_str());
}
cfi.clear();
if (IDOK==ofd.DoModal())
{
std::string path=ofd.GetPathName().GetBuffer();
vector<CONFIGPARAMS> vc=js.ReadJsonArrayFromFile(path);
for (int i=0;i<vc.size();i++)
{
// js.WriteJsonArrayToFile(vc[i],vc[i].SavePath);
vector<CONFIGPARAMS> 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<CONFIGPARAMS> vc_tempOut;
std::vector<CONFIGINFO> temp_cfi = getConfigFiles();
for (int i=0;i<temp_cfi.size();i++)
{
vector<CONFIGPARAMS> 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<CTWAINContainerInt*>(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<CTWAINContainerInt*>(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<CTWAINContainerInt*>(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<CTWAINContainerFix32*>(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<CTWAINContainerFix32*>(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<CTWAINContainerFix32Range*>(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<CTWAINContainerFix32Range*>(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<CTWAINContainerFix32Range*>(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<CTWAINContainerBool*>(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<CTWAINContainerBool*>(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<CTWAINContainerBool*>(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<CTWAINContainerBool*>(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<CTWAINContainerBool*>(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<CTWAINContainerBool*>(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<CTWAINContainerBool*>(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<CTWAINContainerFix32Range*>(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<CTWAINContainerBool*>(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<CTWAINContainerBool*>(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<CTWAINContainerInt*>(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<CTWAINContainerBool*>(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<CTWAINContainerInt*>(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<CTWAINContainerBool*>(ui->m_pDS->findCapability(0x8018))))
{
return;
}
else
{
ret=pbCap->SetCurrent(configItem->EnOutHole);
}
if (0==(pfRCap=dynamic_cast<CTWAINContainerFix32Range*>(ui->m_pDS->findCapability(0x8092))))
{
return;
}
else
{
ret=pfRCap->SetCurrent((float)(configItem->OutHoleRatio));
}
if (0==(pbCap=dynamic_cast<CTWAINContainerBool*>(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)
{
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<CONFIGINFO> TwainUIDlg::getConfigFiles()
{
vector<CONFIGINFO> 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<CONFIGPARAMS> vc_temp;
vc_temp=js.ReadJsonArrayFromFile(cfi[index].SavePath);
if (vc_temp.size()>0)
{
UpdateUI(vc_temp[0]);
}
}
}