⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 settings.cpp

📁 又VC++实现的基于TWAIN的扫描仪图像输入处理软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//设置对话框
#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 + -