1.8.3 无人广角自动监控实现过程(1)
无人广角自动监控实现过程步骤如下:
(1)创建一个对话框,打开对话框属性窗口,将对话框的ID设置为IDD_AUTOMATISM_ DIALOG,将对话框标题设置为"无人广角自动监控"。
(2)向对话框中添加1个群组控件、1个图形控件、1个复选框控件、2个静态文本控件、2个时间控件、3个单选按钮控件和1个按钮控件,各控件的属性设置如表1.7所示。
表1.7 控件的属性设置
|
控件ID< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
控 件 属 性 |
对 应 变 量 |
|
IDC_TIMECHECK |
取消选择Auto属性 |
无 |
|
IDC_DATETIMEPICKER1 |
Format:Time |
CDateTimeCtrl m_StartTime |
|
IDC_DATETIMEPICKER2 |
Format:Time |
CDateTimeCtrl m_Log |
|
IDC_AMPLITUDE |
取消选择Auto属性 |
无 |
|
IDC_HORIZONTAL |
取消选择Auto属性 |
无 |
|
IDC_VERTICAL |
取消选择Auto属性 |
无 |
|
IDC_OK |
Caption:开始 |
无 |
(3)在对话框的头文件中声明变量,代码如下:
- CCaptureDlg* m_pMain; //主窗口指针
- HANDLE m_hThread; //线程句柄
- UINT m_Num; //监控方向
- BOOL m_Time; //定时监控
- BOOL m_Count; //记录复选框是否选中
- CString m_UserName ; //用户名
- CString m_LogPath; //日志文件路径
- CTime starttime; //开始时间
- CTime stoptime; //结束时间
(4)向对话框中添加OnInitDialog方法,在对话框初始化时设置单选按钮的状态,使时间控件不可用,并设置定时器。代码如下:
- BOOL CAutodlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- CButton* pButton = (CButton*)GetDlgItem(IDC_AMPLITUDE);
- pButton->SetCheck(1);
//设置“广角监控”单选按钮为选中状态 - m_Num = 0;
- m_Time = FALSE;
- m_Count = FALSE;
- //设置时间控件不可用
- GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(FALSE);
- GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(FALSE);
- SetTimer(1,1000,NULL); //设置定时器
- return TRUE;
- }
(5)处理对话框的WM_TIMER事件,判断是否定时监控,如果是,则获取系统时间,当然系统时间等于开始监控时间时开始监控。代码如下:
- void CAutodlg::OnTimer(UINT nIDEvent)
- {
- if(m_Time) //判断是否定时监控
- {
- CTime time= CTime::GetCurrentTime();
//获得系统当前时间 - m_StartTime.GetTime(starttime);
//获得开始监控时间 - m_StopTime.GetTime(stoptime);
//获得停止监控时间 - if(time == starttime)
//判断系统时间是否等于开始监控时间 - {
- OnOK(); //关闭当前窗口
- KillTimer(1); //停止定时器
- }
- }
- CDialog::OnTimer(nIDEvent);
- }
代码贴士
GetCurrentTime:获得系统当前的时间。
GetTime:获得时间控件中的时间。
(6)在主窗体中编写线程函数,在线程函数中判断是广角监控、水平监控和垂直监控的哪一种,并根据相应的方向实现自动监控功能。代码如下:
- DWORD WINAPI ThreadProc(LPVOID lpParameter )
- {
- CCaptureDlg* pDlg = (CCaptureDlg*)lpParameter;
- while (true)
- {
- switch(pDlg->m_Num)
- {
- case 0:
- pDlg->MoveCapture(0); //向上
- Sleep(2000); //延时2秒
- pDlg->MoveCapture(2); //向左
- Sleep(22000); //延时22秒
- pDlg->MoveCapture(1); //向下
- Sleep(2000); //延时2秒
- pDlg->MoveCapture(3); //向右
- Sleep(22000); //延时22秒
- pDlg->MoveCapture(1); //向下
- Sleep(2000); //延时2秒
- pDlg->MoveCapture(2); //向左
- Sleep(22000); //延时22秒
- pDlg->MoveCapture(0); //向上
- Sleep(2000); //延时2秒
- pDlg->MoveCapture(3); //向右
- Sleep(22000); //延时22秒
- break;
- case 1:
- pDlg->MoveCapture(2); //向左
- Sleep(22000); //延时22秒
- pDlg->MoveCapture(3); //向右
- Sleep(22000); //延时22秒
- break;
- case 2:
- pDlg->MoveCapture(0); //向上
- Sleep(2000); //延时2秒
- pDlg->MoveCapture(1); //向下
- Sleep(2000); //延时2秒
- break;
- }
- }
- return 0;
- }