设为首页 加入收藏

TOP

1.8.3 无人广角自动监控实现过程
2013-10-07 00:18:48 来源: 作者: 【 】 浏览:69
Tags:1.8.3 无人 广角 自动 监控 实现 过程

1.8.3  无人广角自动监控实现过程

无人广角自动监控实现过程步骤如下:

(1)创建一个对话框,打开对话框属性窗口,将对话框的ID设置为IDD_AUTOMATISM_ DIALOG,将对话框标题设置为“无人广角自动监控”。

(2)向对话框中添加一个群组控件、一个图形控件、一个复选框控件、两个静态文本控件、两个时间控件、3个单选按钮控件和一个按钮控件,各控件的属性设置如表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)在对话框的头文件中声明变量,代码如下:

 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;
}
(7)处理主窗体中“自动监控”按钮的单击事件,当按钮被按下时创建线程并打开无人广角自动监控模块。代码如下:
void CCaptureDlg::OnAutomatism() 
{
CAutodlg dlg;          //CAutodlg类对象
if(dlg.DoModal()==IDOK)
{
DWORD threadID;
m_hThread = ::CreateThread(NULL,0,ThreadProc,(LPVOID)this,0,
&threadID); //创建线程
m_Num = dlg.m_Num;
m_Time = dlg.m_Time;
if(m_Time)         //判断是否定时监控
{
m_StopTime = dlg.stoptime;     //获得关闭时间
}
}
Invalidate();          //刷新窗口
}
(8)在主窗体的WM_TIMER事件中判断系统时间是否等于停止时间,如果等于则停止定时监控。代码如下:
if(m_Time) //判断是否定时监控
{
CTime time= CTime::GetCurrentTime();    //获得系统当前时间
if(time == m_StopTime)               //判断当系统时间是否等于关闭时间
{
OnStop();         //当系统时间等于关闭时间时停止监控
m_Time = FALSE;
}
}
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.5 主窗体设计(5) 下一篇1.8.2 无人广角自动监控技术分析

评论

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