📄 settings.cpp
字号:
//设置对话框
#include "stdafx.h"
#include "source10.h"
#include "wnaspi32.h"
#include "scsidefs.h"
#include "JiaoZheng.h"
#include "const.h"
#include "ViewWnd.h"
#include "Settings.h"
#include "SetScanner.h"
#include "Ganguang.h"
#include "AIEDlg.h"
#include "scanner.h"
#include "functions.h"
#include "postionInfo.h"
#include "TitleDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CpostionInfo *m_pPositionInfo;
extern CViewWnd *pViewWnd;
extern CScanner* pScanner;
extern CSetScanner* pSetScanner;
extern CJiaoZheng* m_pGanWindow;
extern char InitDir2[100];
/////////////////////////////////////////////////////////////////////////////
//设置对话框的构造体
///////////////////////////////////////////////////////////////////////////
CSettings::CSettings(CWnd* pParent )
: CDialog(CSettings::IDD, pParent)
{
//{{AFX_DATA_INIT(CSettings)
//}}AFX_DATA_INIT
char str[36];
int nR;
int channel;
//获取初值
m_sJZMode= GetPrivateProfileInt("ScanCai_Mod","ScnCaiMod",1,InitDir2);
if (m_sJZMode>7) m_sJZMode=2;
GetPrivateProfileString("file type","type","真彩色",str,36,InitDir2);
m_sType=_T(str);
GetPrivateProfileString("scan type","type","Twain扫描",str,36,InitDir2);
m_sScanType=_T(str);
GetPrivateProfileString("huigui type","type","零点位置",str,36,InitDir2);
m_sHuiGuiType=_T(str);
GetPrivateProfileString("scan unit","unit","英寸",str,36,InitDir2);
m_sUnit=_T(str);
nR= GetPrivateProfileInt("resoultion","reso",600,InitDir2);
pScanner->SetDPI(nR);
m_nResolution2=nR;
channel=GetPrivateProfileInt("xianzhen","channel",42,InitDir2);
if(channel==44)//红色通道
{
m_sChannel="红色通道";
}
if(channel==42)//绿色通道
{
m_sChannel="绿色通道";
}
if(channel==41)//蓝色通道
{
m_sChannel="蓝色通道";
}
/*if(m_sUnit=="英寸")
{
m_nZeroX=(double)((int)(pViewWnd->m_SelectZoom.left*10/FuMian*100)/100.0);
m_nZeroY=(double)((int)(pViewWnd->m_SelectZoom.top*10/FuMian*100)/100.0);
m_nWidth=(double)((int)((pViewWnd->m_SelectZoom.right-pViewWnd->m_SelectZoom.left)*10/FuMian*100)/100.0);
m_nLength=(double)((int)((pViewWnd->m_SelectZoom.bottom-pViewWnd->m_SelectZoom.top)*10/FuMian*100)/100.0);
m_nSizeImage=m_nWidth*m_nLength*(pScanner->m_nDPI)*(pScanner->m_nDPI)*3/1024;
}
if(m_sUnit=="厘米")
{
m_nZeroX=(double)((int)(pViewWnd->m_SelectZoom.left*10/FuMian*2.54*100)/100.0);
m_nZeroY=(double)((int)(pViewWnd->m_SelectZoom.top*10/FuMian*2.54*100)/100.0);
m_nWidth=(double)((int)((pViewWnd->m_SelectZoom.right-pViewWnd->m_SelectZoom.left)*10/FuMian*2.54*100)/100.0);
m_nLength=(double)((int)((pViewWnd->m_SelectZoom.bottom-pViewWnd->m_SelectZoom.top)*10/FuMian*2.54*100)/100.0);
m_nSizeImage=(m_nWidth/2.54)*(m_nLength/2.54)*(pScanner->m_nDPI)*(pScanner->m_nDPI)*3/1024;
}*/
m_nZeroX = m_pPositionInfo->m_nX10;
m_nZeroY = m_pPositionInfo->m_nY10;
m_nWidth = m_pPositionInfo->m_nWidth1;
m_nLength = m_pPositionInfo->m_nLength1;
m_nSizeImage = m_pPositionInfo->m_nSize;
int ImgEnha=GetPrivateProfileInt("Image_Enah","Enah_Enable",0,InitDir2);
if (ImgEnha==0)
{
m_Check=false;
}
else
{
m_Check=true;
}
/*
pScanner->quesheng=TRUE;
zengqiang=FALSE;
*/
m_pParent = pParent;
m_nID = CSettings::IDD;
bFirst=false;
}
/////////////////////////////////////////////////////////////////////
//数据交换
/////////////////////////////////////////////////////////////////////
void CSettings::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSettings)
DDX_CBString(pDX, IDC_COMBO_TYPE, m_sType);
DDX_CBIndex(pDX, IDC_COMBO_JZMODE, m_sJZMode);
DDX_CBString(pDX, IDC_COMBO_SAOMIAO, m_sScanType);
DDX_CBString(pDX, IDC_COMBO_HUIGUI, m_sHuiGuiType);
DDX_CBString(pDX, IDC_COMBO_CHANNEL, m_sChannel);
DDX_CBString(pDX, IDC_COMBO_UNIT, m_sUnit);
DDX_Text(pDX, IDC_ZEROX1, m_nZeroX);
DDX_Text(pDX, IDC_ZEROY1, m_nZeroY);
DDX_Text(pDX, IDC_WIDTH2, m_nWidth);
DDX_Text(pDX, IDC_LENGTH2,m_nLength);
DDX_Text(pDX, IDC_IMAGE1, m_nSizeImage);
DDX_Text(pDX, IDC_RESU, m_nResolution2);
DDX_Check(pDX, IDC_CHECK1, m_Check);
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////
//消息映射
/////////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CSettings, CDialog)
//{{AFX_MSG_MAP(CSettings)
ON_BN_CLICKED(IDC_BC, OnShowBCE)
ON_CBN_SELCHANGE(IDC_COMBO_TYPE, OnSelchangeComboType)
ON_EN_UPDATE(IDC_RESU, OnUpdateResu)
ON_BN_CLICKED(IDC_OK, OnOk)
ON_BN_CLICKED(IDC_CHECK1, OnCheck1)
ON_CBN_SELCHANGE(IDC_COMBO_SAOMIAO, OnSelchangeComboSaomiao)
ON_CBN_SELCHANGE(IDC_COMBO_JZMODE, OnSelchangeComboJZMode)
ON_CBN_SELCHANGE(IDC_COMBO_CHANNEL, OnSelchangeComboChannel)
// ON_BN_CLICKED(IDC_GANGUANG, OnGanguang)
ON_CBN_SELCHANGE(IDC_COMBO_UNIT, OnSelchangeComboUnit)
ON_CBN_SELCHANGE(IDC_COMBO_HUIGUI, OnSelchangeComboHuigui)
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//产生设置对话框
/////////////////////////////////////////////////////////////////////////////
BOOL CSettings::Create(void)
{
RECT rect_position;
CDialog::Create(m_nID,m_pParent);
GetWindowRect( &rect_position );
MoveWindow(rect_position.left, rect_position.top,290,470,TRUE );
ShowWindow(SW_SHOW);
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
//初始化对话框
/////////////////////////////////////////////////////////////////////////////
BOOL CSettings::OnInitDialog()
{
CDialog::OnInitDialog();
DWORD SectorsPerCluster=0;
DWORD BytesPerSector=0;
DWORD NumberOfFreeClusters=0;
DWORD TotalNumberOfClusters =0;
//读文件初始化图像增强方式
int ImgEnha=GetPrivateProfileInt("Image_Enah","Enah_Enable",0,InitDir2);
if (ImgEnha==0)
{
zengqiang=false;
m_Check = false;
}
else
{
zengqiang=true;
m_Check = true;
}
if(zengqiang==TRUE)
{
::EnableWindow(::GetDlgItem(this->m_hWnd,IDC_BC),TRUE);
pScanner->quesheng=FALSE;
jiaose1();
}
else
{
::EnableWindow(::GetDlgItem(this->m_hWnd,IDC_BC),FALSE);
pScanner->quesheng=TRUE;
//按照缺省参数修正预览图像显示
char IniFile[120];
GetWindowsDirectory(IniFile,sizeof(IniFile));
char* pFileName=lstrcat(IniFile,"\\twain_32\\MTIScanner\\preview.bmp");
HDIB hbmp;
hbmp=::ReadDIBFile( pFileName );
pScanner->SetHandleofPreviewBMP(hbmp);
hbmp=::ReadDIBFile( pFileName );
pScanner->SetHandleofAdjustedPreviewBMP(hbmp);
HANDLE hDIB0 = pScanner->GetHandleofPreviewBMP();
HANDLE hDIB1 = pScanner->GetHandleofAdjustedPreviewBMP();
}
return TRUE;
}
//////////////////////////////////////////////////////////////////
//调用BCE窗口,这是一个有模式窗口
//////////////////////////////////////////////////////////////////
void CSettings::OnShowBCE()
{
HDIB hbmp;
char IniFile[120];
GetWindowsDirectory(IniFile,sizeof(IniFile));
char* pFileName=lstrcat(IniFile,"\\twain_32\\MTIScanner\\preview.bmp");
hbmp=::ReadDIBFile( pFileName );
if(hbmp==NULL)
{
MessageBox("不存在预览图像文件,重新预览图像","出错",MB_OK);
return;
}
LPSTR lpDIBHdr,lpDIB0Bits;
lpDIBHdr = (LPSTR) ::GlobalLock((HGLOBAL)hbmp);
lpDIB0Bits = ::FindDIBBits(lpDIBHdr);
int cxDIB = (int) ::DIBWidth(lpDIBHdr);
int cyDIB = (int) ::DIBHeight(lpDIBHdr);
int W,L;
W=(int)(((pScanner->m_rtScanZoom).right-(pScanner->m_rtScanZoom).left)/FuMian*100);
L=(int)(((pScanner->m_rtScanZoom).bottom-(pScanner->m_rtScanZoom).top)/FuMian*100);
if(W>cxDIB||L>cyDIB)
{
MessageBox("选择框必须在预览图上,重新选择","出错",MB_OK);
return;
}
int yuandiany0 = GetPrivateProfileInt("yuandian","y0",0,InitDir2);
int yuandianx0 = GetPrivateProfileInt("yuandian","x0",0,InitDir2);
int yuandiany1 = GetPrivateProfileInt("yuandian","high",0,InitDir2);
int yuandianx1 = GetPrivateProfileInt("yuandian","width",0,InitDir2);
if ((yuandianx1*10 < (pScanner->m_rtScanZoom).right)||(yuandianx0*10 > (pScanner->m_rtScanZoom).left))
{
MessageBox("选择框必须在预览图上,重新选择","出错",MB_OK);
return;
}
if ((yuandiany1 < (pScanner->m_rtScanZoom).bottom/10)||(yuandiany0 > (pScanner->m_rtScanZoom).top/10))
{
MessageBox("选择框必须在预览图上,重新选择","出错",MB_OK);
return;
}
first1=TRUE;
CAIEDlg myAIEDlg(this,0);
myAIEDlg.DoModal();
}
//////////////////////////////////////////////////////////////////
//选择文件类型(24位,8位,2位),并显示相应的预览图像 //
//////////////////////////////////////////////////////////////////
void CSettings::OnSelchangeComboType ()
{
UpdateData(true);
if(m_sType=="真彩色")
{
pScanner->m_nColor=16777216;
}
if(m_sType=="灰度图像")
{
pScanner->m_nColor=256;
}
if(m_sType=="黑白图")
{
pScanner->m_nColor=2;
}
WritePrivateProfileString("file type", "type", m_sType, InitDir2);
SetFileType(pScanner->m_nColor);
m_nSizeImage = m_pPositionInfo->m_nSize;
UpdateData(false);
}
//////////////////////////////////////////////////////////////////
//更改扫描分辨率 //
//////////////////////////////////////////////////////////////////
void CSettings::OnUpdateResu()
{
int shuzu;
shuzu=GetPrivateProfileInt("Shuzu","shuzu",1200,InitDir2);
UpdateData(true);
if(m_nResolution2<=0||m_nResolution2>shuzu)
{
MessageBox("输入超界,重新输入,否则为缺省值");
m_nResolution2=100;
UpdateData(false);
}
SetRd(m_nResolution2);
m_nSizeImage = m_pPositionInfo->m_nSize;
UpdateData(false);
}
//////////////////////////////////////////////////////////////////
//确认设置窗口,主要是参数的回写和恢复 //
//////////////////////////////////////////////////////////////////
void CSettings::OnOk()
{
char str[36];
int n;
int channel;
int shuzu3;
int shuzu5;
// int shuzu4;
// shuzu4=GetPrivateProfileInt("Shuzu","shuzu",1200,InitDir2);
shuzu3=3310;
shuzu5=4680;
UpdateData(true);
if(m_sType=="真彩色")
n=16777216;
else if(m_sType=="灰度图像")
n=256;
else if(m_sType=="黑白图")
n=2;
sprintf(str, "%d", n);
pScanner->SetClororNum(n);
WritePrivateProfileString("color num", "color", str, InitDir2);
if(m_sChannel=="红色通道")
channel=44;
else if(m_sChannel=="绿色通道")
channel=42;
else if(m_sChannel=="蓝色通道")
channel=41;
sprintf(str, "%d", channel);
WritePrivateProfileString("xianzhen", "channel", str, InitDir2);
WritePrivateProfileString("file type", "type", m_sType, InitDir2);
//保存扫描校正方式参数到参数文件
sprintf(str, "%d", m_sJZMode);
WritePrivateProfileString("ScanCai_Mod","ScnCaiMod", str, InitDir2);
WritePrivateProfileString("scan type", "type", m_sScanType, InitDir2);
WritePrivateProfileString("huigui type", "type",m_sHuiGuiType, InitDir2);
/*
zengqiang=FALSE;
*/
first1=FALSE;
//确定扫描框位置信息
RECT r;
UpdateData(true);
if(m_nZeroX<0)
{
m_nZeroX=0;
}
if(m_nZeroY<0)
{
m_nZeroY=0;
}
if(m_sUnit=="英寸")
{
m_nX0=m_nZeroX;
m_nY0=m_nZeroY;
if((m_nWidth+m_nX0)>(shuzu3/FuMian*10.0))
{
m_nWidth=shuzu3/FuMian*10.0-m_nX0;
}
m_nWidth0=m_nWidth;
if((m_nLength+m_nY0)>(shuzu5/FuMian*10.0))
{
m_nLength=shuzu5/FuMian*10.0-m_nY0;
}
m_nLength0=m_nLength;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -