📄 dlgtab.cpp
字号:
{
::GlobalUnlock((HGLOBAL)hBmp);
::GlobalFree((HGLOBAL)hBmp);
hBmp=NULL;
}
hBmp=(HANDLE)::GlobalAlloc(GHND,512l*512l*3l);
SetDlgItemText(IDC_LIVEFREZEE,"冻结");
//SetDlgItemText(IDC_OPENWINDOW,"关闭监控");
}
else
{
CG300Capture(hcg300,FALSE);
SetDlgItemText(IDC_LIVEFREZEE,"激活");
//SetDlgItemText(IDC_OPENWINDOW,"关闭监控");
}
//end
}
void CDlgTAB::SnapOneTomemAPI(HANDLE h)
{
// TODO: Add your control notification handler code here
int nStatus=0;
int nNum = 0;
if(h)
{
//抓取图象到内存
CG300SnapOneToMem(hcg300,PhysMemAddr,dwPage*4*1024,FRAME);
for(;;)
{
CG300GetSnappingStatus(hcg300,&nStatus);
if(nStatus==3)
break;//抓取第一幅图象后退出
}
CG300Capture(hcg300,TRUE);
CG300ReadFromMem(hcg300, lpSourceBuf, dwPage*4*1024, 0, lpvBits);
}
//end
}
void CDlgTAB::OnMemautosnap()
{
// TODO: Add your control notification handler code here
CHardWorkApp *app = (CHardWorkApp *)AfxGetApp();
SetCurrentDirectory(app->PathImg );
int a=0x0,c1=0x0;
CString PathName;
CString Ext=".bmp"; //图象保存文件的扩展名
CString Head="data"; //图象保存文件的文件名=data+图象序列号+扩展名
int i=0;
int j=0;
char num[PHOTONUM];
nSysMemLen = GetPrivateProfileInt("Video Parameter", "SysMemorySize", 240, "dhvcard.ini" );
dwPage=0; //所申请到的内存大小,以页为单位
PhysMemAddr=0; //内存的起始物理地址
MemHandle=0; //内存的句柄
LineAddr=0; //内存的起始线性地址,用户在程序中用此地址来访问内存数据
StaticMemAlloc(&dwPage, &PhysMemAddr, &MemHandle, &LineAddr);
//此函数获得通过"控制面板"中"大恒图像"程序申请到的内存的参数。
dwPage-=nSysMemLen;
PhysMemAddr+=nSysMemLen*4*1024; //物理地址+系统偏移
lpSourceBuf=(char *)LineAddr+nSysMemLen*4*1024;//线形地址+系统偏移
MSG lpMsg;
BOOL bsave=TRUE;
LiveCard(); //激活图像卡
// if(!LoadPCI7505())//电机转动,调用
// return;
for(i=0;i<PHOTONUM;i++)
{
PeekMessage(&lpMsg,NULL,0,0,PM_REMOVE); //消息队列,按ESC键退出
if( (GetKeyState(VK_ESCAPE) &0x80) == 0x80)
{
bsave=FALSE;
break;
}
if(Hbmp[i]!=NULL) //图象句柄初始化,暂定图象40幅(40*9°)
{
::GlobalUnlock(Hbmp[i]);
::GlobalFree((HGLOBAL)Hbmp[i]);
Hbmp[i]=NULL;
}
Hbmp[i]=(HANDLE)::GlobalAlloc(GHND,512l*512l*3l); //申请内存
lpvBits = (char *)GlobalLock(Hbmp[i]); //获取数组指针
SnapOneTomemAPI(Hbmp[i]);
for(j=0;j<64*5;j++)//每次走9度,采集图像
{
doo(hplx,0,false,0xf9);
ZWZDelayFun(HalfCyc);
doo(hplx,0,false,0xfb);
ZWZDelayFun(HalfCyc);
}
DigitalScreen(i); //平台显示拍摄的图象编号
UpdateWindow();
}
BeginWaitCursor();
if(bsave)
{
//close(hplx);
//图象保存程序段
for(i=0;i<PHOTONUM;i++)
{
itoa(i,num,10);
PathName=Head+num+Ext;
SnapImage(PathName,Hbmp[i]);
if(Hbmp[i])
{
::GlobalUnlock(Hbmp[i]);
::GlobalFree((HGLOBAL)Hbmp[i]);
Hbmp[i]=NULL;
}
}
}
EndWaitCursor();
CG300Capture(hcg300,FALSE);
CString str;
str.Format("图象采集保存完毕!\n");
//AfxMessageBox(str);
MessageBox(str,"数据采集完毕",MB_OK);
CG300Capture(hcg300,TRUE);
GetDlgItem(IDC_OPENWINDOW)->SetWindowText("关闭监控");
//end
}
void CDlgTAB::BackupTimeFile(CString filename1)
{
//begin
CFile file;
CString filename2="time";
if(file.Open(filename1,CFile::modeRead,0)==0)
{
AfxMessageBox("原来的时间记录文件不存在!",MB_OK,0);
return;
}
CFileStatus status;
CTime time;
file.GetStatus(filename1,status);
time=status.m_mtime;
int Year=time.GetYear();
int Month=time.GetMonth();
int Day=time.GetDay();
int Hour=time.GetHour();
int Min=time.GetMinute();
int Sec=time.GetSecond();
char year[4],mon[2],day[2],hour[2],min[2],sec[2];
_itoa(Year,year,10);
_itoa(Month,mon,10);
_itoa(Day,day,10);
_itoa(Hour,hour,10);
_itoa(Min,min,10);
_itoa(Sec,sec,10);
filename2+=year;
if(Month<10)
filename2+="0";
filename2+=mon;
if(Day<10)
filename2+="0";
filename2+=day;
if(Hour<10)
filename2+="0";
filename2+=hour;
if(Min<10)
filename2+="0";
filename2+=min;
if(Sec<10)
filename2+="0";
filename2+=sec;
filename2+=".txt";
file.Close();
::CopyFile((LPCTSTR)filename1,(LPCTSTR)filename2,0);
//end
}
void CDlgTAB::ZWZDelayFun(int numbers)
{
//这部分是用来测试高分辨率计时器
/*
BOOL pp;
LARGE_INTEGER lpFrequency;
pp=QueryPerformanceFrequency(&lpFrequency);
if (pp)
AfxMessageBox("YES");
else
AfxMessageBox("NO");
LARGE_INTEGER lpPerformanceCount1,lpPerformanceCount2;
QueryPerformanceCounter(&lpPerformanceCount1);
Sleep(1000);
QueryPerformanceCounter(&lpPerformanceCount2);
CString str;
str.Format ("%d",lpPerformanceCount2.QuadPart -lpPerformanceCount1.QuadPart );
AfxMessageBox(str);
*/
LARGE_INTEGER lpPerformanceCount1,lpPerformanceCount2;
QueryPerformanceCounter(&lpPerformanceCount1);
do
{
QueryPerformanceCounter(&lpPerformanceCount2);
}while(lpPerformanceCount2.QuadPart<lpPerformanceCount1.QuadPart+numbers);
return;
//end
}
void CDlgTAB::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CWnd *hWnd=GetDlgItem(IDC_SANPWINDOW);
CRect clientRect;
hWnd->GetClientRect(&clientRect);
CPen pen(PS_SOLID,1,RGB(255,0,0));
dc.SelectObject(&pen);
//////////垂直线///////////////////////
dc.MoveTo(int(clientRect.left+256),clientRect.bottom);
dc.LineTo(int(clientRect.left+256),clientRect.top+8);
/////////水平线////////////////////////
dc.MoveTo(clientRect.left,int(clientRect.top+8+256));
dc.LineTo(clientRect.right+8,int(clientRect.top+8+256));
//验证矩形框的范围
// dc.Rectangle(&clientRect);
// dc.Rectangle(clientRect.left,clientRect.top+8,clientRect.right,clientRect.bottom);
dc.SelectStockObject(BLACK_PEN);
pen.DeleteObject ();
// Do not call CDialog::OnPaint() for painting messages
}
void CDlgTAB::OnSelchangeComboBjccd()
{
// TODO: Add your control notification handler code here
int num=m_ctrlBJCCD.GetCurSel(); //取得组合框中第几项被选中,第一项为0
switch(num)
{
case 0:
//无操作
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);
break;
case 1:
//步进电机控制
GetDlgItem(IDC_BUTTON_TURNOK)->ShowWindow(TRUE);
GetDlgItem(IDC_RADIO_CLOCK)->ShowWindow(TRUE);
GetDlgItem(IDC_RADIO_ANTICLOCK)->ShowWindow(TRUE);
GetDlgItem(IDC_COMBO_N100)->ShowWindow(TRUE);
GetDlgItem(IDC_COMBO_N10)->ShowWindow(TRUE);
GetDlgItem(IDC_COMBO_N1)->ShowWindow(TRUE);
GetDlgItem(IDC_COMBO_N01)->ShowWindow(TRUE);
GetDlgItem(IDC_STATIC_THETA)->ShowWindow(TRUE);
GetDlgItem(IDC_EDIT_THETA)->ShowWindow(TRUE);
m_ctrlN100.SetCurSel(0);
m_ctrlN10.SetCurSel(0);
m_ctrlN1.SetCurSel(0);
m_ctrlN01.SetCurSel(0);
m_nTheta=0.0f;
m_ctrlClock.SetCheck(1);
m_ctrlAntiClock.SetCheck(0);
break;
case 2:
//采集标定基准面
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);
m_strCaliFileName="D:\\catdata\\turnpro\\caliimage\\caliimg0.bmp";
m_ctrlCaliName.SetWindowText(m_strCaliFileName);
break;
case 3:
//采集标定辅助面1
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);
m_strCaliFileName="D:\\catdata\\turnpro\\caliimage\\caliimg1.bmp";
m_ctrlCaliName.SetWindowText(m_strCaliFileName);
break;
case 4:
//采集标定辅助面2
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);
m_strCaliFileName="D:\\catdata\\turnpro\\caliimage\\caliimg2.bmp";
m_ctrlCaliName.SetWindowText(m_strCaliFileName);
break;
case 5:
//自由采集图像
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);
bFreeImage=TRUE;
m_ctrlCaliName.EnableWindow(TRUE);
break;
default:
MessageBox("No Choice!","无任何操作",MB_OK);
break;
}
//end
}
void CDlgTAB::OnButtonTurnok()
{
// TODO: Add your control notification handler code here
if(m_nTheta==0)
{
MessageBox("转动角度没有设定!","出错了!",MB_ICONERROR+MB_OK);
return;
}
int num1=(int)(m_nTheta*10.0f+0.5);
//这个地方是因为计算机计算有误差,int(1.8*10)=17
if(num1%18!=0)
{
if(hcg300!=NULL)
{
CG300Capture(hcg300,FALSE);
}
MessageBox("转动角度=步矩角*整数!","出错了!",MB_ICONERROR+MB_OK);
CG300Capture(hcg300,TRUE);
return;
}
int turn=num1/18;
int i=0,j=0;
if(m_bClock)
{
for(i=1;i<=turn;i++) //多少个步矩角
{
for(j=1;j<=64;j++) //64细分
{
//顺时针转动
doo(hplx,false,0,0xfd);
ZWZDelayFun(2000);
doo(hplx,false,0,0xff);
ZWZDelayFun(2000);
}
}
}
else
{
for(i=1;i<=turn;i++)
{
for(j=1;j<=64;j++)
{
//逆时针转动
doo(hplx,false,0,0xf9);
ZWZDelayFun(2000);
doo(hplx,false,0,0xfb);
ZWZDelayFun(2000);
}
}
}
if(hcg300!=NULL)
{
CG300Capture(hcg300,FALSE);
}
MessageBox("转动预定角度完毕!","转动完毕",MB_OK);
// close(hplx);
if(hcg300!=NULL)
{
CG300Capture(hcg300,TRUE);
}
m_ctrlN100.SetCurSel(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -