twain2/TwainUIDlg.cpp

888 lines
50 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: 在此添加控件通知处理程序代码
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<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();
}
}
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<CONFIGPARAMS> vc_tempOut;
std::vector<CONFIGINFO> temp_cfi = getConfigFiles();
for (int i = 0; i < temp_cfi.size(); i++)
{
vector<CONFIGPARAMS> 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<CTWAINContainerInt*>(ui->m_pDS->findCapability(ICAP_PIXELTYPE))))
return;
else
{
ret = pnCap->SetCurrent(configItem->Pixtype);
}
if (0 == (pnCap = dynamic_cast<CTWAINContainerInt*>(ui->m_pDS->findCapability(ICAP_SUPPORTEDSIZES))))
return;
else
{
ret = pnCap->SetCurrent(configItem->PaperSize);
}
if (0 == (pnCap = dynamic_cast<CTWAINContainerInt*>(ui->m_pDS->findCapability(ICAP_ORIENTATION))))
return;
else
{
ret = pnCap->SetCurrent(configItem->Orentation == 4 ? TWOR_AUTOTEXT : configItem->Orentation);
}
if (0 == (pfCap = dynamic_cast<CTWAINContainerFix32*>(ui->m_pDS->findCapability(ICAP_XRESOLUTION))))
return;
else
{
ret = pfCap->SetCurrent(configItem->Resolution);
}
// Y resolution the same.
if (0 == (pfCap = dynamic_cast<CTWAINContainerFix32*>(ui->m_pDS->findCapability(ICAP_YRESOLUTION))))
return;
else
{
ret = pfCap->SetCurrent(configItem->Resolution);
}
if (0 == (pfRCap = dynamic_cast<CTWAINContainerFix32Range*>(ui->m_pDS->findCapability(ICAP_CONTRAST))))
return;
else
{
float value_Contrast = GetContrast(configItem->Contrast);
ret = pfRCap->SetCurrent(value_Contrast);
}
if (0 == (pfRCap = dynamic_cast<CTWAINContainerFix32Range*>(ui->m_pDS->findCapability(ICAP_BRIGHTNESS))))
return;
else
{
ret = pfRCap->SetCurrent(configItem->Brightness);
}
// Y resolution the same.
if (0 == (pfRCap = dynamic_cast<CTWAINContainerFix32Range*>(ui->m_pDS->findCapability(ICAP_GAMMA))))
return;
else
{
ret = pfRCap->SetCurrent(configItem->Gamma / 10);
}
if (0 == (pbCap = dynamic_cast<CTWAINContainerBool*>(ui->m_pDS->findCapability(ICAP_AUTOMATICCROPUSESFRAME))))
return;
else
{
bool temp = (configItem->PaperSize) == 90;
ret = pbCap->SetCurrent(temp);
}
if (0 == (pbCap = dynamic_cast<CTWAINContainerBool*>(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<CTWAINContainerBool*>(ui->m_pDS->findCapability(0x8091))))
return;
else
{
bool temp = (configItem->Duplex) == 3;
configItem->EnDiscardBlankVince = temp;
ret = pbCap->SetCurrent(temp);
}
//填充黑框
if (0 == (pbCap = dynamic_cast<CTWAINContainerBool*>(ui->m_pDS->findCapability(0x8004))))
return;
else
{
ret = pbCap->SetCurrent(configItem->EnFillBlack);
}
if (0 == (pbCap = dynamic_cast<CTWAINContainerBool*>(ui->m_pDS->findCapability(ICAP_AUTOMATICDESKEW))))
return;
else
{
ret = pbCap->SetCurrent(configItem->EnAutoDescrew);
}
if (0 == (pbCap = dynamic_cast<CTWAINContainerBool*>(ui->m_pDS->findCapability(0x8005))))//背面旋转180
return;
else
{
ret = pbCap->SetCurrent(configItem->EnBackRotate180);
}
if (0 == (pbCap = dynamic_cast<CTWAINContainerBool*>(ui->m_pDS->findCapability(0x8006))))//歪斜检测
return;
else
{
ret = pbCap->SetCurrent(configItem->EnScrewDetect);
}
if (0 == (pfRCap = dynamic_cast<CTWAINContainerFix32Range*>(ui->m_pDS->findCapability(0x8021))))//歪斜检测等级
return;
else
{
ret = pfRCap->SetCurrent((float)configItem->ScrewDetectLevel);
}
if (0 == (pbCap = dynamic_cast<CTWAINContainerBool*>(ui->m_pDS->findCapability(0x8090))))//装订检测
return;
else
{
ret = pbCap->SetCurrent(configItem->EnBindingDetect);
}
if (0 == (pbCap = dynamic_cast<CTWAINContainerBool*>(ui->m_pDS->findCapability((CAP_DOUBLEFEEDDETECTION)))))
return;
else
{
ret = pbCap->SetCurrent(configItem->EnUltrasonicDetect);
}
if (0 == (pnCap = dynamic_cast<CTWAINContainerInt*>(ui->m_pDS->findCapability(CAP_XFERCOUNT))))
return;
else
{
ret = pnCap->SetCurrent(configItem->ScanCount);
}
if (0 == (pbCap = dynamic_cast<CTWAINContainerBool*>(ui->m_pDS->findCapability(CAP_DUPLEXENABLED))))
{
return;
}
else
{
ret = pbCap->SetCurrent(configItem->Duplex == 0 ? FALSE : TRUE);
}
if (0 == (pnCap = dynamic_cast<CTWAINContainerInt*>(ui->m_pDS->findCapability(ICAP_FILTER))))
{
return;
}
else
{
ret = pnCap->SetCurrent(configItem->Filter);
}
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)
{
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<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]);
}
}
}