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

📄 setscanner.cpp

📁 又VC++实现的基于TWAIN的扫描仪图像输入处理软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//CSetScanner类,用来确定主对话框的参数设置和预览图像信息设置
#include "stdafx.h"

#include "functions.h"
#include "source10.h"
#include "Ganguang.h"
#include "Pingqi.h"
#include "Position.h"
#include "postionInfo.h"
#include "Settings.h"
#include "SetScanner.h"
#include "Scanningprogress.h"
#include "testtime.h"
#include "twd_type.h"
#include "string.h"
#include "Dibapi.h"
//#include "method.h"
#include "JiaoZheng.h"

#include "Scanner.h"
#include "AboutDlg.h"
#include "Conwnd.h"
#include "MOVE2.h"

#include "wnaspi32.h"
#include "scsidefs.h"
#include <process.h>
#include "ChooseRulerDlg.h"
#include "Const.h"
#include "data.h"
#include "viewWnd.h"
#include "MATH.h"
#include "TitleDlg.h"
#include "ButtonST.h"

#include "stepcali.h"
extern unsigned char Def_Stp_Para[300];	//下传缺省参数150B+分步校正参数150B存储缓冲区

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////
//定义窗口信息常量                                            ///
/////////////////////////////////////////////////////////////////
#define WORK_ZOOM_LEFT   	25
#define WORK_ZOOM_TOP	    45	
#define WORK_ZOOM_RIGHT	    635
#define WORK_ZOOM_BOTTOM	485 

#define A0_H 594      //单位为象素
#define A0_V 419
#define A1_H 420 
#define A1_V 296
#define A2_H 297
#define A2_V 209
#define A3_H 210 
#define A3_V 147

#define RULER_WIDTH		25 
#define RULER_HIGHTH	60

#define RECT_WIDTH	4
#define RECT_LENGTH	4

#define MTI_LEFT	594
#define MTI_RIGHT	633
#define MTI_TOP		7
#define MTI_BOTTOM	30
static char BASED_CODE szFilter[] = "BitMap Files (*.bmp) | *.bmp| All Files (*.*) | *.* |";

/////////////////////////////////////////////////////////////////
//定义指向自定义类的指针                                      ///
/////////////////////////////////////////////////////////////////
extern CScanner *pScanner=NULL;
extern CContainerWnd *pContainerWnd=NULL;
CPosition     *m_pPositionWindow;
CpostionInfo   *m_pPositionInfo;
CJiaoZheng     *m_pGanWindow;
CPingqi     *m_pPingqiWindow;
CSettings   *m_pSettingsWindow;
CMOVE2       *m_pMove;

extern Ctesttime   *pTesttime;
extern CData       *pData;
extern CViewWnd    *pViewWnd;
extern CTitleDlg* pTitleDlg;

extern char  InitDir2[100];
extern char  DisplayFileName[80];

#define WM_MYINITIALIZATION WM_USER+10

DWORD ASPI32Status;	
SRB_ExecSCSICmd mySRBEIO;
DWORD ASPIEventStatus;
/////////////////////////////////////////////////////////////////////////////
//关于CSetScanner对话框类                                                  //                
/////////////////////////////////////////////////////////////////////////////
CSetScanner::CSetScanner(CWnd* pParent )
	: CDialog(CSetScanner::IDD, pParent)
{

    CString str2;
   
    GetWindowsDirectory(InitDir2,sizeof(InitDir2));
	lstrcat(InitDir2,"\\twain_32\\MTIScanner\\jiaose.ini"); 

	//初始化各个自定义的对象指针
	m_pSettingsWindow =NULL;
	m_pPositionWindow =NULL;
    m_pGanWindow      =NULL;
    m_pPingqiWindow   =NULL;
    //初始化电机前进或者后退方向,目前没有用到
	m_nGo   =FALSE;
	m_nBack =FALSE;
	
	pScanner=new CScanner;
    pViewWnd=new CViewWnd;
    
    //{{AFX_DATA_INIT(CSetScanner)

   	//}}AFX_DATA_INIT
}

//人机信息交互
void CSetScanner::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetScanner)
       
	//}}AFX_DATA_MAP
}

//消息映射过程
BEGIN_MESSAGE_MAP(CSetScanner, CDialog)
	//{{AFX_MSG_MAP(CSetScanner)
        ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipText )
		ON_BN_CLICKED(IDC_PREVIEW, OnPreview)
	    ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout)
	    ON_BN_CLICKED(IDC_SHOW_SETTINGS, OnShowSettingsWindow)
       	ON_COMMAND(ID_VIEW_HIDETHESETTINGWINDOW, OnViewHidethesettingwindow)    	
		ON_BN_CLICKED(IDC_ASPI_INITIALIZE, OnAspiInitialize)
	    ON_COMMAND(ID_HELP, OnButtonHelp) 
        ON_COMMAND(ID_HELP_CONTENT, OnHelpContent)
	    ON_COMMAND(ID_SCANNER_GETTHEINFOOFCURRENTSCANNER, OnScannerGettheinfoofcurrentscanner)
        ON_COMMAND(ID_SCANNER_GETTHEINFOOFCURRENTSCSI, OnScannerGettheinfoofcurrentscsi)
	 	ON_COMMAND(ID_SCANNER_EXIT, OnScannerExit)
	    ON_WM_SIZE()
	    ON_BN_CLICKED(IDC_READ2, OnRead2)
        ON_COMMAND(ID_GAN, OnJieMian) 
	    ON_COMMAND(ID_HAND, OnHand)
	    ON_COMMAND(ID_SELECT, OnSelect)
	    ON_COMMAND(ID_ZOOMIN, OnZoomin)
	    ON_COMMAND(ID_ZOOMOUT, OnZoomout)
	    ON_COMMAND(ID_300, On300)
	    ON_COMMAND(ID_600, On600)
	    ON_COMMAND(ID_800, On800)
	    ON_COMMAND(ID_1200, On1200)
	    ON_COMMAND(ID_1000, On1000)
	    ON_COMMAND(ID_1WHITEBLACK, On1whiteblack)
	    ON_COMMAND(ID_24COLOR, On24color)
	    ON_COMMAND(ID_8GRAY, On8gray)
        ON_COMMAND(ID_COLORB, OnColorb)
	    ON_COMMAND(ID_COLORG, OnColorg)
	    ON_COMMAND(ID_COLORR, OnColorr)
        ON_COMMAND(ID_PINGQI, OnPingqi)
        ON_COMMAND(ID_SCANTWAIN, OnTwainScan)
        ON_COMMAND(ID_SCANFILE, OnFileScan)
        ON_COMMAND(ID_HUIGUILING, OnHuiGuiL)
		ON_COMMAND(ID_HUIGUIM, OnHuiGuiM)
        ON_COMMAND(ID_HUIGUIJING, OnHuiGuiJ)
  	    ON_COMMAND(ID_MOVE, OnMove)
	    ON_COMMAND(ID_MOVEWEIZHI, OnMoveweizhi)
	ON_COMMAND(ID_JZMode0, OnJZMode0)
	ON_COMMAND(ID_JZMode1, OnJZMode1)
	ON_COMMAND(ID_JZMode2, OnJZMode2)
	ON_COMMAND(ID_JZMode3, OnJZMode3)
	ON_COMMAND(ID_JZMode4, OnJZMode4)
	ON_COMMAND(ID_JZMode5, OnJZMode5)
	ON_COMMAND(ID_JZMode6, OnJZMode6)
	ON_COMMAND(ID_JZMode7, OnJZMode7)
	ON_COMMAND(ID_100, On100)
	ON_COMMAND(ID_200, On200)
        ON_COMMAND(ID_PREVIEW, OnPreview)   
        ON_COMMAND(ID_SETTING, OnShowSettingsWindow)
	    ON_COMMAND(ID_SCAN, OnRead2)
		ON_COMMAND(ID_GANGUANG, OnJieMian)
		ON_WM_TIMER()
        ON_WM_RBUTTONDOWN()
	    ON_WM_CHAR()
	    ON_WM_CANCELMODE()
	    ON_WM_GETMINMAXINFO()
	    ON_WM_VSCROLL()
        ON_MESSAGE(WM_MYINITIALIZATION,	OnMyInitialization)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
//这个函数被其它对话窗口调用,用来初始化各个对话窗口对象                    //
/////////////////////////////////////////////////////////////////////////////
void CSetScanner::BoxDone(int nID)
{
	//位置窗口
	if(nID==IDC_ZOOM3)	
	{
	  m_pPositionWindow = NULL;
	}
	//设置窗口
	if(nID==IDC_SHOW_SETTINGS)
	{
	  m_pSettingsWindow = NULL;
	}
    //扫描仪CCD头感光窗口
    if(nID==IDC_GanGang)
	{
	   m_pGanWindow=NULL;
	} 
    if(nID==ID_PINGQI)
	{
	   m_pPingqiWindow=NULL;
	} 
    GetDlgItem(nID)->EnableWindow();
 }

///////////////////////////////////////////////////////////////////
//Twain扫描时,首先调用这个函数设置SCSI接口等                     //
///////////////////////////////////////////////////////////////////
void CSetScanner::OnReadPicFromFile() 
{    
	int nTop;
    nTop= (int)((pScanner->m_rtScanZoom).top/FuMian*25.4/0.01);
   	//下传SETWINDOWS命令
    SetWindow(nTop,1);
	//发送扫描启动
    SCSI_Start();
    if (TRUE)
	{   
      NotifyXferReady();
	}

	EndModalLoop( 0 );
	m_bModal = FALSE;
}

//////////////////////////////////////////////////////////////////////
//预览图像                                                          //
//////////////////////////////////////////////////////////////////////
void CSetScanner::OnPreview() 
{
	HDIB hbmp;

    char str[36];
	int m0,m1,m2,m3;
	int nTop;
	int row;
    //int nR;
  
	//测试,用于扫描起始显示时间   
    time_t date1_t;
	time(&date1_t);		
//	int Hour,Minute,Second;
	CTime time1(date1_t);

    int huigui;
   	CString	m_sHuiGuiType;

	GetPrivateProfileString("huigui type","type","零点位置",str,36,InitDir2);
    m_sHuiGuiType=_T(str); 
   
    CWaitCursor wait;

    if(m_sHuiGuiType=="零点位置")
	{
      huigui=0;
	}
    if(m_sHuiGuiType=="中间位置")
	{
      huigui=2;
	}
    if(m_sHuiGuiType=="静止不动")
	{
      huigui=1;
	}

    //扫描之前,首先检查底层是否准备好,否则查错,中止扫描.
	SCSI_TST();
	//下传校正参数;
    if(Scan_JZMode())
	{
     //向SCSI发送SETWINDOW命令
 	 nTop=(int)((pScanner->m_rtScanZoom).top/FuMian*25.4/0.01);
     row =(int)(((pScanner->m_rtScanZoom).bottom-(pScanner->m_rtScanZoom).top)/FuMian*100);
     
	 SetWindow(nTop,0);
     //存储生成的文件
     //如果没有错误,则启动扫描
	 SCSI_Start();
     cunchu(row,1);  

	 time_t date2_t;
	 time(&date2_t);		
	 int Hour1,Minute1,Second1;
	 CTime time2(date2_t);
     Hour1=time2.GetHour();
	 Minute1=time2.GetMinute();
 	 Second1=time2.GetSecond();
     pTesttime->end(Hour1,Minute1,Second1);
   	 //扫描中止时发送扫描中止命令
     SCSI_End(huigui);

	 m0=(pScanner->m_rtScanZoom).left/10;
     m1=(pScanner->m_rtScanZoom).top/10;
	 m2=(pScanner->m_rtScanZoom).bottom/10;
     m3=(pScanner->m_rtScanZoom).right/10;

     sprintf(str, "%d", m0);
     WritePrivateProfileString("yuandian", "x0", str, InitDir2);
	 sprintf(str, "%d", m1);
     WritePrivateProfileString("yuandian", "y0", str, InitDir2); 
	 sprintf(str, "%d", m2);
     WritePrivateProfileString("yuandian", "high", str, InitDir2);  
     sprintf(str, "%d", m3);
     WritePrivateProfileString("yuandian", "width", str, InitDir2);   
	
	 CFileException e;
	 char IniFile[120];
     GetWindowsDirectory(IniFile,sizeof(IniFile));
     char* pFileName=lstrcat(IniFile,"\\twain_32\\MTIScanner\\preview.bmp");  
	
	 hbmp=::ReadDIBFile( pFileName );
	 pScanner->SetHandleofPreviewBMP(hbmp);
	 hbmp=::ReadDIBFile( pFileName );
     pScanner->SetHandleofAdjustedPreviewBMP(hbmp);   

	 pViewWnd->InvalidateRect( NULL);
	}
}

extern CSource10App theApp;
/////////////////////////////////////////////////////////////////////////
//菜单中的帮助命令中的关于对话框                                       //
/////////////////////////////////////////////////////////////////////////
void CSetScanner::OnHelpAbout() 
{
	CAboutDlg myAbout;
	myAbout.DoModal();
}

/////////////////////////////////////////////////////////////////////////
//显示设置窗口                                                         //
/////////////////////////////////////////////////////////////////////////
void CSetScanner::OnShowSettingsWindow() 
{
	if(m_pSettingsWindow==NULL)
	{
      m_pSettingsWindow = new CSettings(this);
	  m_pSettingsWindow->Create( );
	}
}
void CSetScanner::OnViewHidethesettingwindow() 
{
	OnShowSettingsWindow();
}

/////////////////////////////////////////////////////////////////////////
//初始化函数                                                           //
/////////////////////////////////////////////////////////////////////////
BOOL CSetScanner::OnInitDialog() 
{
	CDialog::OnInitDialog();

	OnInitialize();

    pViewWnd->m_iCursorType=CT_CROSS;
	
	m_pPositionInfo = new CpostionInfo(this);
	m_pPositionInfo->Create( );

	ASPI32Status=0;
	unsigned char AdapterCount=0;
	char lpBuffer[40];
		
	ASPI32Status = GetASPI32SupportInfo();
	switch(HIBYTE(LOWORD(ASPI32Status)) )
	{
	  case SS_COMP:
	     AdapterCount = (LOBYTE(LOWORD(ASPI32Status)));
	     sprintf(lpBuffer,"the number of host is %d",AdapterCount);
		break;
	  default:
        MessageBox( (LPCTSTR)"ASPI for Win32 is not initialized!!",NULL,MB_ICONSTOP );
   //         return FALSE;
		;
	}
    PostMessage(WM_MYINITIALIZATION,0,0);
  	return TRUE;  
}

///////////////////////////////////////
//被初始化函数调用,用于注册窗口等
//////////////////////////////////////
void CSetScanner::OnInitialize()
{
   if(!m_wndToolBar.CreateEx( this,TBSTYLE_FLAT,
		                    WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)
		||!m_wndToolBar.LoadToolBar(IDR_TOOLBAR1))
	{
		TRACE("Error Create ToolBar!");
		return ;
	}
    m_wndToolBar.ShowWindow(SW_SHOW);
    RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
	
	WNDCLASS wndClass;  
	//注册"Container"窗口
	memset(&wndClass, 0, sizeof(wndClass));
    wndClass.style         = CS_HREDRAW | CS_VREDRAW;
    wndClass.lpfnWndProc   = AfxWndProc;
	wndClass.hInstance     = AfxGetInstanceHandle();
    wndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wndClass.lpszClassName = "Container";
      
	int tt=0;
	if( AfxRegisterClass(&wndClass)==TRUE)
	tt =100; 

    //注册"Containee"窗口
	wndClass.lpszClassName = "Containee";
	AfxRegisterClass(&wndClass);
    //注册"ViewWndClass"窗口
	wndClass.style = CS_OWNDC;
	wndClass.lpszClassName = "ViewWndClass";
	AfxRegisterClass(&wndClass);

	pContainerWnd = new CContainerWnd();

	RECT rt = {0,0,0,0};
	this->GetClientRect(&rt);
	rt.top+= HEIGHT_TOOLBAR;
	rt.right-=SET_WINDOWR;
	rt.bottom-=SET_WINDOWB;
	rt.left+=5;

	int t = 0; 
	t = pContainerWnd->Create("Container",NULL,
		 WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL,
		rt,this,100);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -