📄 dlgtab.cpp
字号:
// DlgTAB.cpp : implementation file
//
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "time.h"
//#include "cg300-32.h"
#include "CardMem.h"
#include "HardWork.h"
#include "HardWorkDoc.h"
#include "MainFrm.h"
#include "DlgTAB.h"
#include "DlgCaliImageSave.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define PHOTONUM 40
/////////////////////////////////////////////////////////////////////////////
// CDlgTAB dialog
HINSTANCE pci7505dll=NULL;
typedef int(*pci7505check)(DWORD dwVendorID, DWORD dwDeviceID, BOOL fUseInt,DWORD cardNO);
typedef int(*pci7505di)(long hPlx, BOOL fLocalAddr,int ch);
typedef void(*pci7505do)(long hPlx, BOOL fLocalAddr,int ch,int dodata);
typedef int(*pci7505close)(long hPlx);
pci7505check check;
pci7505di dii;
pci7505do doo;
pci7505close close;
int hplx;
CDlgTAB::CDlgTAB(CWnd* pParent /*=NULL*/)
: CDialog(CDlgTAB::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgTAB)
m_nTheta = 0.0f;
m_strCaliFileName = _T("");
//}}AFX_DATA_INIT
}
void CDlgTAB::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgTAB)
DDX_Control(pDX, IDC_EDIT_CALIFILENAME, m_ctrlCaliName);
DDX_Control(pDX, IDC_COMBO_N01, m_ctrlN01);
DDX_Control(pDX, IDC_COMBO_N1, m_ctrlN1);
DDX_Control(pDX, IDC_COMBO_N10, m_ctrlN10);
DDX_Control(pDX, IDC_COMBO_N100, m_ctrlN100);
DDX_Control(pDX, IDC_COMBO_BJCCD, m_ctrlBJCCD);
DDX_Control(pDX, IDC_RADIO_CLOCK, m_ctrlClock);
DDX_Control(pDX, IDC_RADIO_ANTICLOCK, m_ctrlAntiClock);
DDX_Text(pDX, IDC_EDIT_THETA, m_nTheta);
DDX_Text(pDX, IDC_EDIT_CALIFILENAME, m_strCaliFileName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgTAB, CDialog)
//{{AFX_MSG_MAP(CDlgTAB)
ON_BN_CLICKED(IDC_OPENWINDOW, OnOpenwindow)
ON_BN_CLICKED(IDC_CALIBRATIONIMAGE, OnCalibrationimage)
ON_BN_CLICKED(IDC_LIVEFREZEE, OnLivefrezee)
ON_BN_CLICKED(IDC_MEMAUTOSNAP, OnMemautosnap)
ON_WM_PAINT()
ON_CBN_SELCHANGE(IDC_COMBO_BJCCD, OnSelchangeComboBjccd)
ON_BN_CLICKED(IDC_BUTTON_TURNOK, OnButtonTurnok)
ON_BN_CLICKED(IDC_RADIO_CLOCK, OnRadioClock)
ON_BN_CLICKED(IDC_RADIO_ANTICLOCK, OnRadioAnticlock)
ON_CBN_SELCHANGE(IDC_COMBO_N100, OnSelchangeComboN100)
ON_CBN_SELCHANGE(IDC_COMBO_N10, OnSelchangeComboN10)
ON_CBN_SELCHANGE(IDC_COMBO_N1, OnSelchangeComboN1)
ON_CBN_SELCHANGE(IDC_COMBO_N01, OnSelchangeComboN01)
ON_WM_CLOSE()
ON_WM_MOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgTAB message handlers
void CDlgTAB::LiveCard()
{
//begin
hcg300=BeginCG300(1);
CG300SetADParam(hcg300,AD_SOURCE,0);
CRect ClientRect;
GetDlgItem(IDC_SANPWINDOW)->GetWindowRect(&ClientRect);
CG300SetColorSpace(hcg300,RGB8888);
CG300SetInpVideoWindow(hcg300,128,32,512,512);
CG300SetDispMode(hcg300,FRAME);
CG300SetDispWindow(hcg300,ClientRect.left,ClientRect.top+8,512,512);
CG300Capture(hcg300,TRUE);
//end
}
BOOL CDlgTAB::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
hcg300=NULL;
hBmp=NULL;
tablbflag=0;
bFreeImage=FALSE;
BMIInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
BMIInfo.bmiHeader.biWidth =512L;
BMIInfo.bmiHeader.biHeight =512L;
BMIInfo.bmiHeader.biPlanes = 1;
BMIInfo.bmiHeader.biBitCount = 24;
BMIInfo.bmiHeader.biCompression = BI_RGB;
BMIInfo.bmiHeader.biSizeImage = 0;
BMIInfo.bmiHeader.biXPelsPerMeter = 0;
BMIInfo.bmiHeader.biYPelsPerMeter = 0;
BMIInfo.bmiHeader.biClrUsed = 0;
BMIInfo.bmiHeader.biClrImportant = 0;
m_bClock=TRUE;
m_nN100=0;
m_nN10=0;
m_nN1=0;
m_nN01=0;
m_nTheta=0;
m_ctrlClock.SetCheck(1);
m_ctrlAntiClock.SetCheck(0);
/*
//用来定位转台控制窗口位置
CRect pr;
GetWindowRect(&pr);
MoveWindow(0,0,pr.Width(),pr.Height(),TRUE);
*/
///////////按钮状态控制区////////////////////
GetDlgItem(IDC_BUTTON_TURNOK)->ShowWindow(FALSE);
GetDlgItem(IDC_RADIO_CLOCK)->ShowWindow(FALSE);
GetDlgItem(IDC_RADIO_ANTICLOCK)->ShowWindow(FALSE);
GetDlgItem(IDC_COMBO_N100)->ShowWindow(FALSE);
GetDlgItem(IDC_COMBO_N10)->ShowWindow(FALSE);
GetDlgItem(IDC_COMBO_N1)->ShowWindow(FALSE);
GetDlgItem(IDC_COMBO_N01)->ShowWindow(FALSE);
GetDlgItem(IDC_STATIC_THETA)->ShowWindow(FALSE);
GetDlgItem(IDC_EDIT_THETA)->ShowWindow(FALSE);
////////掩码设置区//////////////////
hMask=NULL;
CDC* pDC = GetDC();
nScrnWidth = pDC->GetDeviceCaps(HORZRES);
nScrnHeight = pDC->GetDeviceCaps(VERTRES);
pDC->DeleteDC();
/////步进电机设置区/////////////
HalfCyc=2000;
LoadPCI7505();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgTAB::SnapImage(CString FileName,HANDLE h)
{
//begin
CFile file;
CFileException fe;
if (!file.Open(FileName, CFile::modeCreate |
CFile::modeReadWrite | CFile::shareExclusive, &fe))
{
MessageBox("创建文件失败!",MB_OK,0);
return;
}
SaveBMP(h,file);
file.Close();
//end
}
void CDlgTAB::SaveBMP(HANDLE hDIB, CFile &file)
{
//begin
ScrnBMP.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
ScrnBMP.bmiHeader.biWidth=512L;
ScrnBMP.bmiHeader.biHeight=512L;
ScrnBMP.bmiHeader.biPlanes=1;
ScrnBMP.bmiHeader.biBitCount=24;
ScrnBMP.bmiHeader.biCompression=BI_RGB;
ScrnBMP.bmiHeader.biSizeImage = 0;
ScrnBMP.bmiHeader.biXPelsPerMeter=0;
ScrnBMP.bmiHeader.biYPelsPerMeter=0;
ScrnBMP.bmiHeader.biClrUsed=0;
ScrnBMP.bmiHeader.biClrImportant=0;
char *lpdib=(char *)GlobalLock((HGLOBAL)hDIB);
int iPaletteEntries = 0;
BITMAPFILEHEADER bmFH;
bmFH.bfType = 19778;
bmFH.bfSize = (DWORD) ( sizeof(BITMAPFILEHEADER) +
sizeof(BITMAPINFOHEADER) +
iPaletteEntries * sizeof(RGBQUAD)) +
(ScrnBMP.bmiHeader.biHeight * ScrnBMP.bmiHeader.biWidth * 3L);
bmFH.bfReserved1 = bmFH.bfReserved2 = 0;
bmFH.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) +
sizeof(BITMAPINFOHEADER) +
iPaletteEntries * sizeof(RGBQUAD);
DWORD lsize=ScrnBMP.bmiHeader.biHeight * ScrnBMP.bmiHeader.biWidth * 3L;
file.Write(&bmFH,sizeof(BITMAPFILEHEADER));
file.Write(&ScrnBMP.bmiHeader, sizeof(BITMAPINFOHEADER));
file.WriteHuge(lpdib,lsize);
//end
}
void CDlgTAB::RedrawVideoScrn(HANDLE hBMP, HDC hdc, BOOL bIfLivetoFrez, CRect WndRect)
{
//begin
unsigned char *lpdib;
ScrnBMP.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
ScrnBMP.bmiHeader.biWidth=WndRect.Width();
ScrnBMP.bmiHeader.biHeight=WndRect.Height();
ScrnBMP.bmiHeader.biPlanes=1;
ScrnBMP.bmiHeader.biBitCount=24;
ScrnBMP.bmiHeader.biCompression=BI_RGB;
ScrnBMP.bmiHeader.biSizeImage = 0;
ScrnBMP.bmiHeader.biXPelsPerMeter=0;
ScrnBMP.bmiHeader.biYPelsPerMeter=0;
ScrnBMP.bmiHeader.biClrUsed=0;
ScrnBMP.bmiHeader.biClrImportant=0;
lpdib = (unsigned char *)GlobalLock((HGLOBAL)hBMP);
if( bIfLivetoFrez)
{
//注释部分为测试运行时间用
//time_t start,finish;
//time(&start);
ReadDispWindow(hdc,WndRect.left,WndRect.top,WndRect.Width(),WndRect.Height(),lpdib);
//time(&finish);
//CString str;
//str.Format("运行时间差为%f\n",difftime(finish,start));
//AfxMessageBox(str);
}
::GlobalUnlock((HGLOBAL)hBMP);
//end
}
void CDlgTAB::OnOK()
{
// TODO: Add extra validation here
if(hcg300!=NULL)
{
CG300Capture(hcg300,FALSE);
EndCG300(hcg300);
hcg300=NULL;
}
if(hBmp!=NULL)
{
::GlobalUnlock((HGLOBAL)hBmp);
::GlobalFree((HGLOBAL)hBmp);
hBmp=NULL;
}
if(hMask!=NULL)
{
::GlobalUnlock((HGLOBAL)hMask);
::GlobalFree((HGLOBAL)hMask);
hMask=NULL;
}
if(pci7505dll!=NULL)
{
close(hplx);
pci7505dll=NULL;
}
CDialog::OnOK();
//end
}
void CDlgTAB::OnOpenwindow()
{
// TODO: Add your control notification handler code here
CString dlgtext;
GetDlgItemText(IDC_OPENWINDOW,dlgtext);
if(dlgtext=="启动监控")
{
hcg300=BeginCG300(1);
CG300SetADParam(hcg300,AD_SOURCE,0);
CRect ClientRect;
GetDlgItem(IDC_SANPWINDOW)->GetWindowRect(&ClientRect);
CG300SetColorSpace(hcg300,RGB8888);
// left=(768-512)/2=128 // top=(576-512)/2=32
CG300SetInpVideoWindow(hcg300,128,32,512,512);
CG300SetDispMode(hcg300,FRAME);
CG300SetDispWindow(hcg300,ClientRect.left,ClientRect.top+8,512,512);
if(hBmp!=NULL)
{
::GlobalUnlock((HGLOBAL)hBmp);
::GlobalFree((HGLOBAL)hBmp);
hBmp=NULL;
}
hBmp=(HANDLE)::GlobalAlloc(GHND,512l*512l*3l);
nSizeMask = nScrnWidth*nScrnHeight/8;
hMask = ::GlobalAlloc(GHND, nSizeMask);
if(!hMask )
{
MessageBox("Insufficient Memory available for Mask.", NULL, MB_OK | MB_ICONEXCLAMATION);
}
else
{
BYTE *pMask = (BYTE *)::GlobalLock(hMask);
pMask1 = (DWORD *)pMask;
pMask2 = (DWORD *)(pMask + nSizeMask/2);
}
BOOL TestMaskOn=TRUE;
SetMaskMap1();
SetMaskMap2();
CG300EnableOverlay(hcg300,TestMaskOn);
//pPhyMask1: 物理地址
CG300SetMask(hcg300,TopField,pMask1);
CG300SetMask(hcg300,BottomField,pMask2);
CG300Capture(hcg300,TRUE);
SetDlgItemText(IDC_OPENWINDOW,"关闭监控");
}
else
{
if(hcg300!=NULL)
{
CG300Capture(hcg300,FALSE);
EndCG300(hcg300);
hcg300=NULL;
}
if(hBmp!=NULL)
{
::GlobalUnlock(hBmp);
::GlobalFree((HGLOBAL)hBmp);
hBmp=NULL;
}
Invalidate();
SetDlgItemText(IDC_OPENWINDOW,"启动监控");
SetDlgItemText(IDC_LIVEFREZEE,"激活");
}
//end
}
void CDlgTAB::OnCalibrationimage()
{
// TODO: Add your control notification handler code here
CG300Capture(hcg300,FALSE);
// clock_t st,ed;
BeginWaitCursor();
CClientDC dc(this);
CRect snaprect;
GetClientRect(&snaprect);
CRect saverect;
saverect.left=snaprect.left;
saverect.top=snaprect.top+8;
saverect.right=snaprect.left+512l;
saverect.bottom=snaprect.top+512l+8l;
RedrawVideoScrn(hBmp,dc.m_hDC,TRUE,saverect);
if(bFreeImage)
{
UpdateData(TRUE);
if(m_strCaliFileName.GetLength()<=0)
{
MessageBox("请先输入保存图象文件名","操作失败",MB_OK);
return;
}
if(m_strCaliFileName.Right(4)!=".bmp")
{
m_strCaliFileName=m_strCaliFileName+".bmp";
}
if(m_strCaliFileName.Find("/")==-1)
{
m_strCaliFileName="D:\\catdata\\turnpro\\"+m_strCaliFileName;
}
bFreeImage=FALSE;
}
CString filename=m_strCaliFileName;
UpdateData(FALSE);
SnapImage(filename,hBmp);
EndWaitCursor();
//end
}
void CDlgTAB::OnLivefrezee()
{
// TODO: Add your control notification handler code here
CString dlgtext;
GetDlgItemText(IDC_LIVEFREZEE,dlgtext);
if(dlgtext=="激活")
{
hcg300=BeginCG300(1);
CG300SetADParam(hcg300,AD_SOURCE,0);
CRect ClientRect;
GetDlgItem(IDC_SANPWINDOW)->GetWindowRect(&ClientRect);
CG300SetInpVideoWindow(hcg300,128,32,512,512);
CG300SetDispMode(hcg300,FRAME);
CG300SetDispWindow(hcg300,ClientRect.left,ClientRect.top+8,512,512);
CG300SetColorSpace(hcg300,RGB8888);
CG300Capture(hcg300,TRUE);
if(hBmp!=NULL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -