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

📄 dlgtab.cpp

📁 PCI7505的通信编程
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		{
			::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 + -