📄 setscanner.cpp
字号:
//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 + -