MFC定时器使用--SetTimer && KillTimer && 进度条CProgressCtrl
2013-06-04 08:58
483 查看
这里以进度条为实例,来使用MFC的定时器。
1) 函数原型及变形
2)函数生成方法在ClassWizard里,选择需要计时器的类,添加WM_TIME消息映射,就自动生成onTime函数了。然后在函数里添加代码,让代码实现功能。
每隔一段时间就会自动执行一次。
3) 回调函数的格式
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
取消定时器不再使用定时器后,我们应该调用KillTimer来取消定时。
用SetTimer函数 创建定时器
先看一个实例,启动计时器,在类结构里面定义定时器id:class CDlgOncloseDlg : public CDialogEx { // Construction public: CDlgOncloseDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data enum { IDD = IDD_DLGONCLOSE_DIALOG }; enum { ID_TIMER_1 = 100, ID_TIMER_2 = 101, };然后再你需要的时机依次启动各个计时器:
BOOL CDlgOncloseDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Add "About..." menu item to system menu. // TODO: Add extra initialization here this->SetTimer(ID_TIMER_1, 5000, NULL);然后重写OnTimer,OnTimer函数中这样写:
void CDlgOncloseDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: Add your message handler code here and/or call default switch(nIDEvent) { default: break; case ID_TIMER_1: PostMessage(WM_CLOSE); break; } CDialogEx::OnTimer(nIDEvent); }
SetTimer函数的用法
1) 函数原型及变形Creates a timer event. UINT SetTimer( UINT nIDEvent, UINT nElapse, void ( CALLBACK* lpfnTimer )(HWND, UINT, UINT, DWORD) = NULL ) throw();注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。
2)函数生成方法在ClassWizard里,选择需要计时器的类,添加WM_TIME消息映射,就自动生成onTime函数了。然后在函数里添加代码,让代码实现功能。
每隔一段时间就会自动执行一次。
3) 回调函数的格式
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
KillTimer
取消定时器不再使用定时器后,我们应该调用KillTimer来取消定时。Destroys a timer event created by CWindow::SetTimer. BOOL KillTimer( UINT nIDEvent ) throw();
定时器实例,操作一个进度条控件
在类里添加一个进度条以及计数:CProgressCtrl m_Process; int count;然后,初始化范围和步进值:
this->SetTimer(ID_TIMER_1, 1000, NULL); m_Process.SetRange(0, 100); m_Process.SetStep(10); count = 0;再修改定时器处理函数:
void CDlgOncloseDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: Add your message handler code here and/or call default switch(nIDEvent) { default: break; case ID_TIMER_1: //PostMessage(WM_CLOSE); count++; TRACE("count is %d", count); m_Process.StepIt(); int pos = m_Process.GetPos(); if(pos >= 100) { PostMessage(WM_CLOSE); } break; } CDialogEx::OnTimer(nIDEvent); }也就是说10s之后,进度条满,ok,关闭对话框。
相关文章推荐
- 猎豹MFC--定时器SetTimer KillTimer
- 如何使用SetTimer MFC 够详细
- 如何使用SetTimer MFC
- Java Timer 定时器的使用
- mfc settimer使用
- 如何使用SetTimer MFC 够详细
- 定时器 settimer ontimer killtimer
- MFC-CProgressCtrl进度条控件
- 如何使用SetTimer MFC
- MFC进度条控件CProgressCtrl实现进度滚动效果
- 如何使用SetTimer MFC 够详细
- MFC-CProgressCtrl进度条控件
- MFC中使用多个timer定时器
- 定时器的使用 之 SetWaitableTimer
- 定时器与多线程 SetTimer and Multi-Thread 每个线程独立使用一个定时器
- Flex和Flash定时器 setTimeout & setInterval 使用要点
- 如何使用SetTimer MFC
- Flex和Flash定时器 setTimeout & setInterval 使用要点
- CProgressCtrl进度条 使用方法总结
- Linux的作业管理(&、[ctrl+z]、jobs、fg、bg、kill)的使用