设为首页 加入收藏

TOP

1.8.3 无人广角自动监控实现过程(1)
2013-10-07 13:54:28 来源: 作者: 【 】 浏览:72
Tags:1.8.3 无人 广角 自动 监控 实现 过程

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

FormatTime

CDateTimeCtrl  m_StartTime

IDC_DATETIMEPICKER2

FormatTime

CDateTimeCtrl  m_Log

IDC_AMPLITUDE

取消选择Auto属性

IDC_HORIZONTAL

取消选择Auto属性

IDC_VERTICAL

取消选择Auto属性

IDC_OK

Caption:开始

(3)在对话框的头文件中声明变量,代码如下:

  1. CCaptureDlg*    m_pMain;                        //主窗口指针  
  2. HANDLE      m_hThread;                  //线程句柄  
  3. UINT            m_Num;                  //监控方向  
  4. BOOL        m_Time;                         //定时监控  
  5. BOOL        m_Count;                        //记录复选框是否选中  
  6. CString         m_UserName  ;               //用户名  
  7. CString         m_LogPath;                  //日志文件路径  
  8. CTime   starttime;                              //开始时间  
  9. CTime   stoptime;                           //结束时间  

(4)向对话框中添加OnInitDialog方法,在对话框初始化时设置单选按钮的状态,使时间控件不可用,并设置定时器。代码如下:

  1. BOOL CAutodlg::OnInitDialog()   
  2. {  
  3.     CDialog::OnInitDialog();  
  4.     CButton* pButton = (CButton*)GetDlgItem(IDC_AMPLITUDE);  
  5.     pButton->SetCheck(1);                     
    //设置“广角监控”单选按钮为选中状态  
  6.     m_Num = 0;  
  7.     m_Time  = FALSE;  
  8.     m_Count = FALSE;  
  9.     //设置时间控件不可用  
  10.     GetDlgItem(IDC_DATETIMEPICKER1)->EnableWindow(FALSE);  
  11.     GetDlgItem(IDC_DATETIMEPICKER2)->EnableWindow(FALSE);  
  12.     SetTimer(1,1000,NULL);                      //设置定时器  
  13.     return TRUE;    
  14. }  

(5)处理对话框的WM_TIMER事件,判断是否定时监控,如果是,则获取系统时间,当然系统时间等于开始监控时间时开始监控。代码如下:

  1. void CAutodlg::OnTimer(UINT nIDEvent)   
  2. {  
  3.     if(m_Time)  //判断是否定时监控  
  4.     {  
  5.            CTime timeCTime::GetCurrentTime(); 
    //获得系统当前时间  
  6.            m_StartTime.GetTime(starttime);  
    //获得开始监控时间  
  7.         m_StopTime.GetTime(stoptime);          
    //获得停止监控时间  
  8.         if(time == starttime)                    
    //判断系统时间是否等于开始监控时间  
  9.         {  
  10.             OnOK();                             //关闭当前窗口  
  11.             KillTimer(1);                           //停止定时器  
  12.         }  
  13.     }  
  14.     CDialog::OnTimer(nIDEvent);  
  15. }  

代码贴士

GetCurrentTime:获得系统当前的时间。

GetTime:获得时间控件中的时间。

(6)在主窗体中编写线程函数,在线程函数中判断是广角监控、水平监控和垂直监控的哪一种,并根据相应的方向实现自动监控功能。代码如下:

  1. DWORD WINAPI ThreadProc(LPVOID lpParameter )  
  2. {  
  3.     CCaptureDlg* pDlg = (CCaptureDlg*)lpParameter;  
  4.     while (true)   
  5.     {  
  6.         switch(pDlg->m_Num)  
  7.         {  
  8.         case 0:  
  9.             pDlg->MoveCapture(0);                   //向上  
  10.             Sleep(2000);                            //延时2秒  
  11.             pDlg->MoveCapture(2);                   //向左  
  12.             Sleep(22000);                           //延时22秒  
  13.             pDlg->MoveCapture(1);                   //向下  
  14.             Sleep(2000);                            //延时2秒  
  15.             pDlg->MoveCapture(3);                   //向右  
  16.             Sleep(22000);                           //延时22秒  
  17.             pDlg->MoveCapture(1);                   //向下  
  18.             Sleep(2000);                            //延时2秒  
  19.             pDlg->MoveCapture(2);                   //向左  
  20.             Sleep(22000);                           //延时22秒  
  21.             pDlg->MoveCapture(0);                   //向上  
  22.             Sleep(2000);                            //延时2秒  
  23.             pDlg->MoveCapture(3);                   //向右  
  24.             Sleep(22000);                           //延时22秒  
  25.             break;  
  26.         case 1:  
  27.             pDlg->MoveCapture(2);                   //向左  
  28.             Sleep(22000);                           //延时22秒  
  29.             pDlg->MoveCapture(3);                   //向右  
  30.             Sleep(22000);                           //延时22秒  
  31.             break;  
  32.         case 2:  
  33.             pDlg->MoveCapture(0);                   //向上  
  34.             Sleep(2000);                            //延时2秒  
  35.             pDlg->MoveCapture(1);                   //向下  
  36.             Sleep(2000);                            //延时2秒  
  37.             break;  
  38.         }  
  39.     }  
  40.     return 0;  
  41. }  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇实例001 如何创建基于对话框的MFC.. 下一篇1.7.3 监控管理实现过程(3)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: