在 ClassWizard 中响应 ID 为~Dlg 中的 WM_TIMER 消息。
使用 SetTimer(nIDEvent,time,NULL)来建立一个定时器,关闭定时器用
KillTimer(nIDEvent)函数。
然后可以响应 ON_WM_TIMER 消息来响应一个定时器完成一次记时后的程序。
响应方式如下:
! void ! CTimeDlg::OnTimer(UINT ! nIDEvent) ! !
! { !
! ! ! ! ! ! ! ! ! if(nIDEvent==1000)//间隔为 5 秒
! ! ! ! ! ! ! ! ! { !
! ! ! ! ! ! ! ! ! ! ! ! ! ! //处理事件
! ! ! ! ! ! ! ! ! ! } ! !
! ! ! ! ! ! ! ! ! ! elseif(nIDEvent==1001)//间隔为 10 秒
! ! ! ! ! ! ! ! ! { !
! ! ! ! ! ! ! ! ! ! ! ! ! ! //处理事件
! ! ! ! ! ! ! ! ! ! } ! !
! !
! CDialog::OnTimer(nIDEvent); !
! }
以下是给出一个串口通信定时检查接收数据的部分代码
void!CMyDlg::OnOpenCom()!
{
!!!!//!TODO:!Add!your!control!noti3cation!handler!code!here
!!!!if(!f_open_com==true!)
!!!!{
!!!!!!!!f_open_com!=!false;
!!!!!!!!GetDlgItem(IDC_OPEN_COM)->SetWindowText("打开通信端口");
!!!!!!!!CloseHandle(hComm);
!!!!!!!!KillTimer(1000);!!!///!关闭定时器
!!!!!!!!return!;
!!!!}
!!!!SetTimer(1000,!1000,!NULL);!!!///nIDEvent==1000,time=5000ms
!!!!const!char!*ComNo;
!!!!DCB!dcb;
!!!!string!temp("COM1");
!!!!ComNo!=!temp.c_str();
!!!!hComm!=!CreateFile(!ComNo!,!GENERIC_READ|GENERIC_WRITE!,
!!!!!!!!0!,!NULL!,!OPEN_EXISTING!,!0!,!0);
!!!!if(!hComm==INVALID_HANDLE_VALUE!)!!!///!如果端口未打开
!!!!{
!!!!!!!!MessageBox("打开通信端口出错!"!,!"Comm!Error"!,!MB_OK);
!!!!!!!!return!;
!!!!}
!!!!///!!将 dcb 地址传入,以取得通信参数
!!!!GetCommState(hComm,&dcb);!!!!!!///!得知目前通信状态