twain3.0/huagao/CTwainUI.cpp

653 lines
21 KiB
C++
Raw Normal View History

// CTwainUI.cpp: 实现文件
//
#include "stdafx.h"
#include "CTwainUI.h"
#include "afxdialogex.h"
#include "resource.h"
#include "TabCtrlSSL.h"
#include "CBasicPage.h"
#include "CBrightnessPage.h"
#include "CFeedPaperPage.h"
#include "CImageProcPage.h"
#include "Device/PaperSize.h"
#include <list>
#include "filetools.h"
#include "GscanJsonConfig.h"
// CTwainUI 对话框
IMPLEMENT_DYNAMIC(CTwainUI, CDialogEx)
CTwainUI::CTwainUI(TwGlue glue, GScanCap caps, std::string confirmtitle, std::string hardwareversion, std::string serialnum, CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_TWAINUI, pParent)
, m_tabCtrl(new CTabCtrlSSL())
, m_pageBrightness(new CBrightnessPage)
, m_pageFeedPaper(new CFeedPaperPage)
, m_pageImageProc(new CImageProcPage)
, m_glue(glue)
, settings(new GScanCap(caps))
, m_confirmtitle(confirmtitle)
{
m_hardwareVersion = hardwareversion;
m_serialnum = serialnum;
//memset(settings.get(), 0, sizeof(GScanCap));
}
CTwainUI::~CTwainUI()
{
}
void CTwainUI::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TAB, *m_tabCtrl);
}
BOOL CTwainUI::OnInitDialog()
{
CDialogEx::OnInitDialog();
// Setup the tab control
int nPageID = 0;
auto dataChangeFunction = [this]() {
m_pageImageProc->ImageProcPageUpdate(m_pageBasic->m_cmBoxColorMode->GetCurSel());
m_pageFeedPaper->FeedPaperPageUpdate(m_pageBasic->m_cmBoxDuplex->GetCurSel());
m_pageImageProc->ImageAutoDescrewUpdate(m_pageBasic->m_cmBoxSS->GetCurSel());
//m_pageFeedPaper->FeedAutoDescrewUpdate(m_pageBasic->m_cmBoxSS->GetCurSel());
UpdateUi();
};
m_pageBasic.reset(new CBasicPage(dataChangeFunction));
m_pageBasic->Create(IDD_PAGEBASIC, this);
m_pageBasic->SetScannerInfo(m_hardwareVersion, m_serialnum);
m_tabCtrl->AddSSLPage(_T("基本"), nPageID++, m_pageBasic.get());
m_pageBrightness->Create(IDD_PAGEBRIGHTNESS, this);
m_tabCtrl->AddSSLPage(_T("亮度"), nPageID++, m_pageBrightness.get());
m_pageImageProc->Create(IDD_PAGEIMGPROC, this);
m_tabCtrl->AddSSLPage(_T("图像处理"), nPageID++, m_pageImageProc.get());
m_pageFeedPaper->Create(IDD_PAGEFEEDPAPER, this);
m_tabCtrl->AddSSLPage(_T("送纸"), nPageID++, m_pageFeedPaper.get());
CString title(m_confirmtitle.c_str());
this->GetDlgItem(IDC_CONFIRM)->SetWindowText(title);
UpdateUI();
UpdateListConfig();
UpdateUi();
return true;
}
BEGIN_MESSAGE_MAP(CTwainUI, CDialogEx)
ON_BN_CLICKED(IDC_CONFIRM, &CTwainUI::OnBnClickedConfirm)
ON_BN_CLICKED(IDC_BTNDEFAULT, &CTwainUI::OnBnClickedBtndefault)
ON_BN_CLICKED(ID_CANCEL, &CTwainUI::OnBnClickedCancel)
ON_BN_CLICKED(IDC_BTNHELP, &CTwainUI::OnBnClickedBtnhelp)
ON_BN_CLICKED(IDC_BTNBACKUPCONFIG, &CTwainUI::OnBnClickedBtnbackupconfig)
ON_BN_CLICKED(IDC_BTNSAVECONFIG, &CTwainUI::OnBnClickedBtnsaveconfig)
ON_BN_CLICKED(IDC_BTNDELETCONFIG, &CTwainUI::OnBnClickedBtndeletconfig)
ON_BN_CLICKED(IDC_BTNRECOVERYCONFIG, &CTwainUI::OnBnClickedBtnrecoveryconfig)
ON_LBN_SELCHANGE(IDC_LSTCONFIG, &CTwainUI::OnLbnSelchangeLstconfig)
ON_WM_CLOSE()
END_MESSAGE_MAP()
void CTwainUI::OnBnClickedConfirm()
{
// TODO: 在此添加控件通知处理程序代码
CONFIGPARAMS cfg = { 0 };
UpDateScanParam(&cfg);
m_glue.m_scan(*settings);
}
void CTwainUI::OnBnClickedBtndefault()
{
// TODO: 在此添加控件通知处理程序代码
GscanJsonConfig js;
GScanCap cf = js.GetDefaultGscancapValue();
settings.reset(new GScanCap(cf));
UpdateUI();
}
void CTwainUI::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
m_glue.m_cancel();
}
void CTwainUI::OnBnClickedBtnhelp()
{
// 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);
int ret = (int)ShellExecute(NULL, _T("Open"), chmPath, NULL, NULL, SW_SHOWMAXIMIZED);
if (ret < 32)
MessageBox(ret == ERROR_FILE_NOT_FOUND ? _T("未找到帮助文档!") : _T("打开帮助文档异常!"),
_T("提示"), MB_OK | MB_ICONINFORMATION);
this->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
void CTwainUI::UpdateUI()
{
//!< basic page
m_pageBasic->m_cmBoxColorMode->SetCurSel(get_map_key_by_value(colorModes, settings->pixtype));//!< 颜色模式
m_pageBasic->m_cmBoxResultion->SetCurSel(get_map_key_by_value(resolutions, settings->resolution_dst));//!< 分辨率
m_pageBasic->m_cmBoxDuplex->SetCurSel(getCmbDuplexIndex());//!< 单双面
m_pageBasic->m_cmBoxSS->SetCurSel(getPaparSizeIndex(settings->papertype, settings->paperAlign)); //!< 纸张类型
m_pageBasic->m_bswitchfrontback = settings->is_switchfrontback ? TRUE : FALSE; //!< 交换正反面
m_pageBasic->UpdateData(FALSE);
//!< Page Breghtness
m_pageBrightness->m_cbAutoContrast = settings->is_autocontrast==TRUE?TRUE:FALSE; //!< 自动亮度对比度
int brt = GetMappingBrightnessValue(settings->brightness);
m_pageBrightness->m_Edit_Brightness.SetValue(brt); //!< 亮度
int crt = GetContrastLevel(settings->contrast);
m_pageBrightness->m_Edit_Contrast.SetValue(crt);//!<对比度
m_pageBrightness->m_Edit_Gamma.SetValue(settings->gamma); //!< gamma
m_pageBrightness->UpdateData(FALSE);
//!< Page Proc
m_pageImageProc->m_ckbFillBlack = settings->fillbackground==TRUE ? TRUE : FALSE;//填充黑框
m_pageImageProc->m_ckbAutoDeskrew = settings->autodescrew ? TRUE : FALSE;//自动纠偏
UpdateFilterCmbx();
UpdateSharpenCmbx();
m_pageImageProc->m_ckbRemoveHole = settings->fillhole.is_fillhole==TRUE?TRUE:FALSE;//除穿孔可用性
m_pageImageProc->m_edit_hole.SetValue(settings->fillhole.fillholeratio/ 100.0);//穿孔搜索范围比例系数
m_pageImageProc->m_edit_hole.EnableWindow(settings->fillhole.is_fillhole == TRUE ? TRUE : FALSE);
if (settings->pixtype == 2)
m_pageImageProc->m_ckbMultioutput = settings->multi_output_red == TRUE ? TRUE : FALSE;//多流除红
else
m_pageImageProc->m_ckbMultioutput = FALSE;//多流除红
m_pageImageProc->m_ckbHSVCorrect = settings->hsvcorrect == TRUE ? TRUE : FALSE;//答题卡除红
m_pageImageProc->GetDlgItem(IDC_CKMULTIOUTPUT)->EnableWindow(settings->pixtype == 2);//彩色可用
m_pageImageProc->UpdateData(FALSE);
//!< Page feed paper
if(settings->is_duplex==TRUE)
m_pageFeedPaper->m_cbRotation = settings->is_backrotate180==TRUE ? TRUE : FALSE;//背面旋转180
else
{
m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)->EnableWindow(FALSE);
m_pageFeedPaper->m_cbRotation = FALSE;
}
m_pageFeedPaper->m_cbStaple = settings->hardwarecaps.en_stapledetect==TRUE ? TRUE : FALSE;//装订检测
m_pageFeedPaper->m_cbDoublePaper = settings->hardwarecaps.en_doublefeed==TRUE ? TRUE : FALSE;//双张检测
m_pageFeedPaper->m_cbSkew = settings->hardwarecaps.en_skrewdetect==TRUE ? TRUE : FALSE;//歪斜检测
m_pageFeedPaper->m_cmBoxOrentation.SetCurSel(getRotateCmbIndex(settings->imageRotateDegree));//旋转方向;
m_pageFeedPaper->m_sldSkrewDetecttion.SetPos(settings->hardwarecaps.skrewdetectlevel);//歪斜检测等级
if (settings->scannum == 65535)//连续扫描
{
m_pageFeedPaper->m_radioGroupScanMode = 0;
m_pageFeedPaper->GetDlgItem(IDC_EDSCANNUM)->SetWindowText(_T("1"));
m_pageFeedPaper->GetDlgItem(IDC_EDSCANNUM)->EnableWindow(FALSE);
}
else//指定数目
{
m_pageFeedPaper->GetDlgItem(IDC_EDSCANNUM)->EnableWindow(TRUE);
m_pageFeedPaper->m_radioGroupScanMode = 1;
int tempcount = settings->scannum;
CString csCount;
csCount.Format(_T("%d"), settings->is_duplex==TRUE?tempcount/2: tempcount);
m_pageFeedPaper->GetDlgItem(IDC_EDSCANNUM)->SetWindowText(csCount);
}
m_pageFeedPaper->UpdateData(FALSE);
m_pageBasic->updateCmbDuplex(TRUE);
}
void CTwainUI::UpdateFilterCmbx()
{
if (settings->pixtype == TWPT_RGB)
{
m_pageImageProc->m_cmBoxFilter.SetCurSel(0);
m_pageImageProc->m_cmBoxFilter.EnableWindow(FALSE);
}
else
{
m_pageImageProc->m_cmBoxFilter.EnableWindow(TRUE);
int selectindex = 0;
if (settings->filter != 3)
{
selectindex = settings->filter == 0 ? 1 : (settings->filter == 1 ? 2 : 3);
}
else if(settings->enhance_color != Enchace_Color::Enhance_None)
{
selectindex = settings->enhance_color == Enchace_Color::Enhance_Red ? 4:(settings->enhance_color == Enchace_Color::Enhance_Green?5:6);
}
m_pageImageProc->m_cmBoxFilter.SetCurSel(selectindex);
}
}
void CTwainUI::UpdateSharpenCmbx()
{
m_pageImageProc->m_cmBoxSharpen.EnableWindow(settings->pixtype != 0);
m_pageImageProc->m_cmBoxSharpen.SetCurSel(settings->pixtype == 0?0: settings->sharpen);
}
int CTwainUI::getCmbDuplexIndex()
{
int ret = 1;
if (settings->is_autodiscradblank_normal)
ret = 2;
else if (settings->is_autodiscradblank_vince)
ret = 3;
else if(settings->is_duplex==FALSE)
ret = 0;
return ret;
}
int CTwainUI::getResolutionIndex(int resolution)
{
int result = 0;
for (size_t i = 0; i < SUPPORTRESNUMS; i++)
{
if (Resolutions[i] == resolution)
{
result = i;
break;
}
}
return result;
}
int CTwainUI::getPaparSizeIndex(int papersize, int orentation)
{
PaperStatus ps((unsigned int)papersize, (unsigned int)orentation);
int result = 0;
for (std::map<int, PaperStatus>::iterator it = paperStatusMap.begin(); it != paperStatusMap.end(); it++) {
if (it->second.Paper == ps.Paper && it->second.Orentate == ps.Orentate) {
return it->first;
}
}
return 0;
}
int CTwainUI::getColorModelIndex(int pixtype)
{
return pixtype == 2 ? 0 : (pixtype == 1 ? 1 : 2);
}
int CTwainUI::getRotateCmbIndex(float res)
{
int ret = 0;
if (res == 90.0f)
ret = 1;
else if (res == 180.0f)
ret = 2;
else if (res == 270.0f)
ret = 3;
return ret;
}
vector<CONFIGINFO> CTwainUI::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.FindNextFile();
if (find.IsDots())
{
continue;
}
else
{
CONFIGINFO cfi;
cfi.Caption = CW2A(find.GetFileTitle());
cfi.SavePath = CW2A(find.GetFilePath());
vc_cfi.push_back(cfi);
}
}
return vc_cfi;
}
static int WndCtrl2i(const CWnd* wnd)
{
CString valText;
wnd->GetWindowText(valText);
return _ttoi(valText);
}
static float WndCtrl2f(const CWnd* wnd)
{
CString valText;
wnd->GetWindowText(valText);
return (float)_ttof(valText);
}
template<typename T>
static T* GetCtrl(const CWnd* wnd, int nID)
{
return wnd->GetDlgCtrlID(nID);
}
//////////////////////////////////////////////////////////////////////
/*从UI获取参数*/
void CTwainUI::UpDateScanParam(PCONFIGPARAMS configItem, bool updateDs)
{
//!< Page Basic
m_pageBasic->UpdateData();
configItem->Pixtype = m_pageBasic->m_cmBoxColorMode->GetCurSel();//!< 颜色模式 index
configItem->Resolution = m_pageBasic->m_cmBoxResultion->GetCurSel();//!< 分辨率 index
configItem->Duplex = m_pageBasic->m_cmBoxDuplex->GetCurSel();//!< 单双面
configItem->PaperSize = m_pageBasic->m_cmBoxSS->GetCurSel();//!< 纸张类型 index
configItem->EnSwitchFrontBack = m_pageBasic->m_bswitchfrontback == TRUE ? true : false;
PaperStatus page = paperStatusMap[configItem->PaperSize];
configItem->EnAutoCrop = page.Paper == TwSS::None;
configItem->EnDiscardBlank = configItem->Duplex == 2;//自动跳骨空白页通用
configItem->EnDiscardBlankVince = configItem->Duplex == 3;//自动跳骨空白页发票
configItem->EnFlod = configItem->Duplex == 4;
//configItem->DBlank_AreaNum = m_pageBasic->AreaNum;//!< 分区数
//configItem->DBlank_DevnMax = m_pageBasic->DevnMax;//!< 跳过阈值
//!< Page Breghtness
m_pageBrightness->UpdateData();
configItem->EnAutoContrast = m_pageBrightness->m_cbAutoContrast; //!< 自动亮度对比度
configItem->Brightness = (WndCtrl2i(&(m_pageBrightness->m_Edit_Brightness)) - 128)*(2000.0 / 254.0); //!< 亮度
int crtvalue = WndCtrl2i(&(m_pageBrightness->m_Edit_Contrast)) - 4;
configItem->Contrast = GetContrast(crtvalue);//!<对比度
configItem->Gamma = WndCtrl2f(&(m_pageBrightness->m_Edit_Gamma)); //!< gamma
//!< Page Proc
m_pageImageProc->UpdateData();
configItem->EnFillBlack = m_pageImageProc->m_ckbFillBlack;//填充黑框
configItem->EnAutoDescrew = m_pageImageProc->m_ckbAutoDeskrew;//自动纠偏
configItem->Filter = m_pageImageProc->m_cmBoxFilter.GetCurSel();//除色
configItem->Sharpen = m_pageImageProc->m_cmBoxSharpen.GetCurSel();//锐化
configItem->EnOutHole = m_pageImageProc->m_ckbRemoveHole;//除穿孔可用性
configItem->OutHoleRatio = WndCtrl2f(&(m_pageImageProc->m_edit_hole)) * 100;//穿孔搜索范围比例系数
configItem->EnMultiOutPutR = m_pageImageProc->m_ckbMultioutput;//多流除红
configItem->EnHsvCorrect = m_pageImageProc->m_ckbHSVCorrect;//答题卡除红
//!< Page feed paper
m_pageFeedPaper->UpdateData();
configItem->EnBackRotate180 = m_pageFeedPaper->m_cbRotation;//背面旋转180
configItem->EnBindingDetect = m_pageFeedPaper->m_cbStaple;//装订检测
configItem->EnUltrasonicDetect = m_pageFeedPaper->m_cbDoublePaper;//双张检测
configItem->EnScrewDetect = m_pageFeedPaper->m_cbSkew;//歪斜检测
configItem->Orentation = m_pageFeedPaper->m_cmBoxOrentation.GetCurSel();//旋转方向
int count = WndCtrl2i(&(m_pageFeedPaper->m_editNum));
if (count == 0)
{
m_pageFeedPaper->GetDlgItem(IDC_EDSCANNUM)->SetWindowText(_T("1"));
count = 1;
}
configItem->ScanCount = (m_pageFeedPaper->m_radioGroupScanMode == 0) ? -1 : count;
configItem->ScrewDetectLevel = m_pageFeedPaper->m_sldSkrewDetecttion.GetPos();//歪斜检测等级
if (!updateDs)
return;
settings->pixtype = colorModes[configItem->Pixtype];
settings->hardwarecaps.capturepixtype = settings->pixtype;
PaperStatus paper = paperStatusMap[configItem->PaperSize];
settings->papertype = paper.Paper;
settings->paperAlign = (PaperAlign)paper.Orentate;
settings->resolution_dst = Resolutions[configItem->Resolution];
settings->resolution_native = 200.0f;
settings->is_switchfrontback = configItem->EnSwitchFrontBack ? 1 : 0;
//float value_Contrast = GetContrast(configItem->Contrast);
settings->contrast = configItem->Contrast;
settings->brightness = (configItem->Brightness);
settings->gamma = (configItem->Gamma);
settings->is_autocrop = paper.Paper == TwSS::None;
settings->is_duplex = configItem->Duplex >= 1;
settings->is_autodiscradblank_normal = configItem->Duplex == 2;
settings->is_autodiscradblank_vince = configItem->Duplex == 3;
//settings->areanum = configItem->DBlank_AreaNum;
//settings->devnmax = configItem->DBlank_DevnMax;
//填充黑框
settings->fillbackground = configItem->EnFillBlack;
settings->autodescrew = configItem->EnAutoDescrew;
if (configItem->Orentation <= 3) {
settings->imageRotateDegree = rotateDegrees[configItem->Orentation];
}
else {
settings->imageRotateDegree = 0.0f;
}
settings->is_autotext = configItem->Orentation == 4;
settings->is_backrotate180 =configItem->EnBackRotate180;
settings->hardwarecaps.en_skrewdetect = configItem->EnScrewDetect;
settings->hardwarecaps.skrewdetectlevel = (float)configItem->ScrewDetectLevel;
settings->hardwarecaps.en_stapledetect = configItem->EnBindingDetect;
settings->hardwarecaps.en_doublefeed = configItem->EnUltrasonicDetect;
settings->en_fold = configItem->EnFlod ? 1 : 0;
if (configItem->ScanCount == -1)
settings->scannum = configItem->ScanCount;
else {
if (configItem->Duplex == 0)//单面
settings->scannum = configItem->ScanCount;
else {
settings->scannum = configItem->ScanCount * 2;
}
}
if (configItem->Filter) {
if (configItem->Filter <= 3) {
settings->filter = (byte)filterMaps[configItem->Filter];
settings->enhance_color = (byte)EnchaceColor::Enhance_None;
}
else {
settings->filter = 3;//不除色
settings->enhance_color = (byte)filterMaps[configItem->Filter];
}
}
else {
settings->filter = 3;
settings->enhance_color = (byte)EnchaceColor::Enhance_None;
}
settings->sharpen = configItem->Sharpen;
if (configItem->Filter != 0 || configItem->EnMultiOutPutR)
settings->hardwarecaps.capturepixtype = TWPT_RGB;
settings->fillhole.is_fillhole = configItem->EnOutHole;
settings->fillhole.fillholeratio = configItem->OutHoleRatio;
settings->multi_output_red = configItem->EnMultiOutPutR;
settings->hsvcorrect = configItem->EnHsvCorrect;
2020-04-03 01:31:18 +00:00
#ifdef REAL300DPI
settings->resolution_native = settings->resolution_dst > 240.0f ? 300.0f : 200.0f;
#else // REAL300DPI
settings->resolution_native = 200.0f;
#endif
UpdateUi();
}
void CTwainUI::UpdateListConfig()
{
((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->ResetContent();
if (cfi.size() > 0)
{
cfi.clear();
}
cfi = getConfigFiles();
for (int i = 0; i < cfi.size(); i++)
{
CString a;
a = cfi[i].Caption.c_str();
((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->AddString(a);
}
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);
}
}
void CTwainUI::GetGScanCap(GScanCap & cap)
{
cap = *settings;
}
void CTwainUI::UpdateUi()
{
m_pageImageProc->m_cmBoxFilter.EnableWindow(m_pageBasic->m_cmBoxColorMode->GetCurSel() != 0);
INT dupindex = m_pageBasic->m_cmBoxDuplex->GetCurSel();
BOOL enableback = dupindex == 0 || dupindex == 4;
if (enableback)
{
((CButton*)(m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)))->SetCheck(!enableback);
if (dupindex == 4) {
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKAUTODESKREW))->SetCheck(dupindex == 4 ? TRUE : FALSE);
}
}
((CButton*)m_pageImageProc->GetDlgItem(IDC_CKAUTODESKREW))->EnableWindow(!(dupindex == 4));
m_pageFeedPaper->GetDlgItem(IDC_CKBACKROTATION)->EnableWindow(!enableback);
m_pageImageProc->GetDlgItem(IDC_SLDOUTHOLE)->EnableWindow(((CButton*)m_pageImageProc->GetDlgItem(IDC_CKREMOVEHOLE))->GetCheck() == TRUE);
m_pageFeedPaper->GetDlgItem(IDC_SLDDETECTLEVEL)->EnableWindow(((CButton*)m_pageFeedPaper->GetDlgItem(IDC_CKSKEWDETECT))->GetCheck() == TRUE);
m_pageImageProc->GetDlgItem(IDC_CKMULTIOUTPUT)->EnableWindow(m_pageBasic->m_cmBoxColorMode->GetCurSel() == 0);
}
void CTwainUI::EnableID_OKorID_Cancel(bool enable)
{
GetDlgItem(IDC_CONFIRM)->EnableWindow(enable);
GetDlgItem(ID_CANCEL)->EnableWindow(enable);
GetDlgItem(IDC_BTNHELP)->EnableWindow(enable);
GetDlgItem(IDC_BTNDEFAULT)->EnableWindow(enable);
GetDlgItem(IDC_TAB)->EnableWindow(enable);
GetDlgItem(IDC_GROUP)->EnableWindow(enable);
}
void CTwainUI::OnBnClickedBtnbackupconfig()
{
// TODO: 在此添加控件通知处理程序代码
CString csFilters = _T("Json file(*.json)\0");
CFileDialog cfd(FALSE, _T("json"), _T("另存为"));
cfd.m_ofn.lpstrTitle = _T("");
cfd.m_ofn.lpstrFilter = csFilters;
this->SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
GscanJsonConfig js;
if (IDOK == cfd.DoModal())
{
vector<GScanCap> vc_tempOut;
std::vector<CONFIGINFO> temp_cfi = getConfigFiles();
for (int i = 0; i < temp_cfi.size(); i++)
{
vector<GScanCap> vc_item = js.ReadGscanCapsVector(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 = (CW2A)cfd.GetPathName();
js.WriteJsonArrayToFile(vc_tempOut, path);
}
}
this->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
void CTwainUI::OnBnClickedBtnsaveconfig()
{
// TODO: 在此添加控件通知处理程序代码
CSaveConfigDlg sfd(this);
sfd.DoModal();
}
void CTwainUI::OnBnClickedBtndeletconfig()
{
// TODO: 在此添加控件通知处理程序代码
if (MessageBox(TEXT("确认要删除此用户首选项配置吗?"), TEXT("用户首选项"), MB_YESNO | MB_ICONQUESTION) == IDYES)
{
int cursel = -1;
cursel = ((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->GetCurSel();
if (cursel != -1)
{
CFile file;
CString csFile;
csFile = cfi[cursel].SavePath.c_str();
file.Remove(csFile);
UpdateListConfig();
}
}
}
void CTwainUI::OnBnClickedBtnrecoveryconfig()
{
// TODO: 在此添加控件通知处理程序代码
this->SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
if (MessageBox(TEXT("如果恢复,当前所有已保存配置将丢失。是否继续?"), TEXT("恢复"), MB_YESNO | MB_ICONQUESTION) == IDYES)
{
GscanJsonConfig js;
CFileDialog ofd(TRUE,
_T(".json"),
NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_TEXT("Json Files (*.json)|*.json||)"),
NULL);
for (int i = 0; i < cfi.size(); i++)
{
DeleteFile((LPCWSTR)cfi[i].SavePath.c_str());
}
cfi.clear();
if (IDOK == ofd.DoModal())
{
std::string path = (CW2A)ofd.GetPathName();
vector<GScanCap> vc = js.ReadGscanCapsVector(path);
for (int i = 0; i < vc.size(); i++)
{
// js.WriteJsonArrayToFile(vc[i],vc[i].SavePath);
vector<GScanCap> 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 CTwainUI::OnLbnSelchangeLstconfig()
{
// TODO: 在此添加控件通知处理程序代码
int index = -1;
index = ((CListBox*)(GetDlgItem(IDC_LSTCONFIG)))->GetCurSel();
if (index != -1)
{
GscanJsonConfig js;
//std::string savepath= cfi[index].SavePath;
std::vector<GScanCap> vc_temp;
vc_temp = js.ReadGscanCapsVector(cfi[index].SavePath);
if (vc_temp.size() > 0)
{
settings.reset(new GScanCap(vc_temp[0]));
UpdateUI();
}
}
}
void CTwainUI::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_glue.m_cancel();
}