1042 lines
56 KiB
C++
1042 lines
56 KiB
C++
// 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]);
|
||
}
|
||
}
|
||
|
||
}
|