// CImageProcPage.cpp: 实现文件 // #include "stdafx.h" #include "CImageProcPage.h" #include "afxdialogex.h" #include "resource.h" #include static std::vector filters = { _T("不除色"), _T("除红色"), _T("除绿色"), _T("除蓝色"), _T("红色增强"), _T("绿色增强"), _T("蓝色增强") }; static std::vector sharpens = { _T("无"), _T("锐化"), _T("进一步锐化"), _T("模糊"), _T("进一步模糊") }; static std::vector multiout = { _T("彩色+灰度+黑白"), _T("彩色+灰度"), _T("彩色+黑白"), _T("灰度+黑白") }; // CImageProcPage 对话框 IMPLEMENT_DYNAMIC(CImageProcPage, CTabPageSSL) CImageProcPage::CImageProcPage(CWnd* pParent /*=nullptr*/) : CTabPageSSL(IDD_PAGEIMGPROC, pParent) , m_ckbFillBlack(FALSE) , m_ckbAutoDeskrew(FALSE) , m_ckbMultioutput(FALSE) , m_ckbRemoveHole(FALSE) , m_ckbDetachNoise(FALSE) , m_ckbHSVCorrect(FALSE) , indent(5) , noise(8) ,threshold(40) ,is_bw(false) { } CImageProcPage::~CImageProcPage() { } void CImageProcPage::ImageProcPageUpdate(int val,int twss, int cmduplexsel,bool is_Crop,int dpi) { this->colormode_index = val; this->dpi = dpi; this->twss = twss; this->cmduplexsel = cmduplexsel; CComboBox* m_temp = (CComboBox*)(GetDlgItem(IDC_CMBFILTER)); CButton* t_chMultiOutput = (CButton*)(GetDlgItem(IDC_CKMULTIOUTPUT)); CComboBox* m_temp_sharpen = (CComboBox*)(GetDlgItem(IDC_CMBSHARPEN)); is_bw = val == 2 ? true : false; this->is_crop = is_Crop; if (((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck() || is_crop) ((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(true); else { ((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false); } if (val == 0) { GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(TRUE); GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(TRUE); if (dpi >= 500) { GetDlgItem(IDC_CHMULTIPUT)->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CHMULTIPUT))->SetCheck(FALSE); GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CMBMULTIOUT))->SetCheck(FALSE); } else { GetDlgItem(IDC_CHMULTIPUT)->EnableWindow(TRUE); GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(((CButton*)GetDlgItem(IDC_CHMULTIPUT))->GetCheck()); } t_chMultiOutput->EnableWindow(TRUE); } else { GetDlgItem(IDC_CKHSVCORRECT)->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CKHSVCORRECT))->SetCheck(FALSE); GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CKBACKGROUNDSMOOTH))->SetCheck(FALSE); GetDlgItem(IDC_CHMULTIPUT)->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CHMULTIPUT))->SetCheck(FALSE); GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CMBMULTIOUT))->SetCheck(FALSE); t_chMultiOutput->SetCheck(FALSE); t_chMultiOutput->EnableWindow(FALSE); } if (0 == val||val==3)//彩色 { m_temp->SetCurSel(0); m_temp->EnableWindow(FALSE); //t_chMultiOutput->SetCheck(TRUE); } else { m_temp->EnableWindow(TRUE); GetDlgItem(IDC_CKBACKGROUNDSMOOTH)->EnableWindow(FALSE); } if (val == 2) { ((CButton*)GetDlgItem(IDC_CHECKDETACHNOISE))->EnableWindow(true); //m_temp->SetCurSel(4); } else { ((CButton*)GetDlgItem(IDC_CHECKDETACHNOISE))->SetCheck(false); ((CButton*)GetDlgItem(IDC_CHECKDETACHNOISE))->EnableWindow(false); m_edit_detachnoise.EnableWindow(false); m_slider_detachnoise.EnableWindow(false); } #ifndef G300 if (twss == 19 || twss == 20 || twss == 21 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck()) #else if (twss == 8 || twss == 9 || twss == 10 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck()) #endif // !G300 { ((CButton*)GetDlgItem(IDC_CKCROPMODEL))->SetCheck(false); ((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(false); } else ((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(true); } void CImageProcPage::ImageAutoDescrewUpdate(int val) { //CButton* t_chAutoDeskrew = (CButton*)(GetDlgItem(IDC_CKAUTODESKREW)); //if (16 == val) //{ // t_chAutoDeskrew->SetCheck(TRUE); //} } void CImageProcPage::DoDataExchange(CDataExchange* pDX) { CTabPageSSL::DoDataExchange(pDX); DDX_Control(pDX, IDC_SLDOUTHOLE, m_slider_hole); DDX_Control(pDX, IDC_EDIT_HOLE, m_edit_hole); DDX_Control(pDX, IDC_EDITDETACHNOISE, m_edit_detachnoise); DDX_Control(pDX, IDC_SLIDERDETACHNOISE, m_slider_detachnoise); DDX_Control(pDX, IDC_SLIDERFADEBACKRANGE, m_slider_faderange); DDX_Control(pDX, IDC_EDITFADEBACKRANGE, m_edit_faderange); DDX_Control(pDX, IDC_CMBFILTER, m_cmBoxFilter); DDX_Control(pDX, IDC_CMBSHARPEN, m_cmBoxSharpen); DDX_Check(pDX, IDC_CKBACKGROUNDSMOOTH, m_ckbfadeback); DDX_Check(pDX, IDC_CKFILLBLACKRECT, m_ckbFillBlack); DDX_Check(pDX, IDC_CKAUTODESKREW, m_ckbAutoDeskrew); DDX_Check(pDX, IDC_CKMULTIOUTPUT, m_ckbMultioutput); DDX_Check(pDX, IDC_CKREMOVEHOLE, m_ckbRemoveHole); DDX_Check(pDX, IDC_CHECKDETACHNOISE,m_ckbDetachNoise); DDX_Check(pDX, IDC_CKHSVCORRECT, m_ckbHSVCorrect); } BOOL CImageProcPage::OnInitDialog() { CTabPageSSL::OnInitDialog(); m_edit_hole.SetSlideLink(this, IDC_SLDOUTHOLE); m_edit_hole.SetParams(0.01, 0.50, 10, _T("%0.2f"),20); m_edit_hole.SetValue(0.10); m_edit_faderange.SetSlideLink(this, IDC_SLIDERFADEBACKRANGE); m_edit_faderange.SetParams(1, 128, 1); m_edit_faderange.SetValue(40); m_edit_detachnoise.SetSlideLink(this, IDC_SLIDERDETACHNOISE); m_edit_detachnoise.SetParams(10, 50, 10); m_edit_detachnoise.SetValue(detachnoise); ((CButton*)GetDlgItem(IDC_CHECKDETACHNOISE))->SetCheck(is_detachnoise); for (int i = 0; i < filters.size(); i++) { m_cmBoxFilter.InsertString(i, filters[i]); } for (int i = 0; i < sharpens.size(); i++) { m_cmBoxSharpen.InsertString(i, sharpens[i]); } for (int i = 0; i < multiout.size(); i++) { ((CComboBox*)GetDlgItem(IDC_CMBMULTIOUT))->InsertString(i, multiout[i]); } return true; } BEGIN_MESSAGE_MAP(CImageProcPage, CTabPageSSL) ON_BN_CLICKED(IDC_CKREMOVEHOLE, &CImageProcPage::OnCtrlChange) ON_BN_CLICKED(IDC_ADVANCEDSET, &CImageProcPage::OnBnClickedAdvancedset) ON_BN_CLICKED(IDC_CKFILLBLACKRECT, &CImageProcPage::OnBnClickedCkfillblackrect) ON_BN_CLICKED(IDC_CKAUTODESKREW, &CImageProcPage::OnBnClickedCkautodeskrew) ON_BN_CLICKED(IDC_CHECKDETACHNOISE, &CImageProcPage::OnBnClickedCheckdetachnoise) ON_BN_CLICKED(IDC_CKBACKGROUNDSMOOTH, &CImageProcPage::OnBnClickedCkbackgroundsmooth) ON_BN_CLICKED(IDC_CHMULTIPUT, &CImageProcPage::OnBnClickedChmultiput) ON_BN_CLICKED(IDC_CKMULTIOUTPUT, &CImageProcPage::OnBnClickedCkmultioutput) END_MESSAGE_MAP() void CImageProcPage::EnableOutHoleCheckChanged(BOOL enable) { UpdateData(); ((CButton*)GetDlgItem(IDC_EDIT_HOLE))->SetCheck(enable); GetDlgItem(IDC_EDIT_HOLE)->EnableWindow(enable); GetDlgItem(IDC_SLDOUTHOLE)->EnableWindow(enable); GetDlgItem(IDC_EDIT_HOLE)->EnableWindow(enable); } void CImageProcPage::SetOutHoleValue(int value) { m_edit_hole.SetValue(value); } void CImageProcPage::SetMultiOutputEnable(int pixtype, bool enable) { switch (pixtype) { case 2://彩色 if (colormode_index == 0) { ((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->SetCheck(enable); ((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->EnableWindow(TRUE); } break; case 0://灰度 黑白 case 1: ((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->SetCheck(FALSE); ((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->EnableWindow(FALSE); break; default: break; } } void CImageProcPage::OnCtrlChange() { // TODO: 在此添加控件通知处理程序代码 UpdateData(); m_edit_hole.EnableWindow(m_ckbRemoveHole); m_slider_hole.EnableWindow(m_ckbRemoveHole); } void CImageProcPage::OnBnClickedAdvancedset() { // TODO: 在此添加控件通知处理程序代码 CAdvancedDLG cb(indent, noise, threshold,is_convex,((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck(),this); cb.DoModal(); noise= cb.m_Slider_noise.m_iPosition; indent = cb.m_Slider_indent.m_iPosition; threshold = cb.m_Slider_threshold.m_iPosition; is_convex = cb.is_convex; } void CImageProcPage::OnBnClickedCkfillblackrect() { // TODO: 在此添加控件通知处理程序代码 if(((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck()|| ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck()||is_crop) ((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(true); else { ((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false); } #ifndef G300 if (twss == 19 || twss == 20|| twss == 21 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck()) #else if (twss == 8 || twss == 9 || twss == 10 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck()) #endif // !G300 { ((CButton*)GetDlgItem(IDC_CKCROPMODEL))->SetCheck(false); ((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(false); } else ((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(true); } void CImageProcPage::OnBnClickedCkautodeskrew() { // TODO: 在此添加控件通知处理程序代码 if (((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck() || is_crop) ((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(true); else { ((CButton*)GetDlgItem(IDC_ADVANCEDSET))->EnableWindow(false); } #ifndef G300 if (twss == 19 || twss == 20 || twss == 21|| (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck()) #else if (twss == 8 || twss == 9 || twss == 10 || (cmduplexsel == 4) || ((CButton*)GetDlgItem(IDC_CKFILLBLACKRECT))->GetCheck() || ((CButton*)GetDlgItem(IDC_CKAUTODESKREW))->GetCheck()) #endif // !G300 { ((CButton*)GetDlgItem(IDC_CKCROPMODEL))->SetCheck(false); ((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(false); } else ((CButton*)GetDlgItem(IDC_CKCROPMODEL))->EnableWindow(true); } void CImageProcPage::OnBnClickedCheckdetachnoise() { // TODO: 在此添加控件通知处理程序代码 UpdateData(); m_ckbDetachNoise = m_ckbDetachNoise && is_bw; m_edit_detachnoise.EnableWindow(m_ckbDetachNoise); m_slider_detachnoise.EnableWindow(m_ckbDetachNoise); } void CImageProcPage::OnBnClickedCkbackgroundsmooth() { // TODO: 在此添加控件通知处理程序代码 UpdateData(); m_ckbfadeback = m_ckbfadeback && (!is_bw); GetDlgItem(IDC_SLIDERFADEBACKRANGE)->EnableWindow(m_ckbfadeback); GetDlgItem(IDC_EDITFADEBACKRANGE)->EnableWindow(m_ckbfadeback); } void CImageProcPage::OnBnClickedChmultiput() { // TODO: 在此添加控件通知处理程序代码 if (((CButton*)GetDlgItem(IDC_CHMULTIPUT))->GetCheck()) { GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(TRUE); GetDlgItem(IDC_CKMULTIOUTPUT)->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->SetCheck(FALSE); } else { GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(FALSE); ((CComboBox*)GetDlgItem(IDC_CMBMULTIOUT))->SetCurSel(0); if (colormode_index == 0) { GetDlgItem(IDC_CKMULTIOUTPUT)->EnableWindow(TRUE); } } } void CImageProcPage::OnBnClickedCkmultioutput() { // TODO: 在此添加控件通知处理程序代码 if (((CButton*)GetDlgItem(IDC_CKMULTIOUTPUT))->GetCheck()) { GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(FALSE); GetDlgItem(IDC_CHMULTIPUT)->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CHMULTIPUT))->SetCheck(FALSE); ((CComboBox*)GetDlgItem(IDC_CMBMULTIOUT))->SetCurSel(0); } else { if (dpi < 500) { GetDlgItem(IDC_CMBMULTIOUT)->EnableWindow(FALSE); GetDlgItem(IDC_CHMULTIPUT)->EnableWindow(TRUE); } } }