使用Windows SetTimer()函数

时间:2009-05-06 09:48:32

标签: winapi visual-c++

我对SetTimer()函数感到困惑。

SetTimer()有三个参数:

SetTimer(1,2000,Timerflow);

但是我看到另一个版本的SetTimer需要四个参数:

SetTimer(NULL,1,2000,Timerflow);

这两个功能有什么区别?

我知道SetTimer()三个参数。但是当我尝试四个参数SetTimer()函数时,我得到错误:

error C2660: 'SetTimer' : function does not take 4 parameters

那么主要区别是什么以及导致此错误的原因是什么?

4 个答案:

答案 0 :(得分:5)

4参数版本是普通的Win32 API版本,第一个参数是窗口句柄。

3参数版本是MFC的CWnd类的成员,并且与您调用它的CWnd实例的窗口句柄一起使用。

如果需要在CWnd派生对象的方法中调用4参数Win32 API,请执行以下操作:

::SetTimer(NULL, 1, 2000, Timerflow);

答案 1 :(得分:2)

唯一名为SetTimer的Windows API需要四个参数。据推测,另一个是MFC或其他框架的一部分,第一个参数由您调用它的对象隐含。例如:

CWnd * w = .... // get window somehow
w->SetTimer(1,2000,Timerflow);

答案 2 :(得分:1)

如果使用SetTimer在GUI类(如MFC的CWnd)中创建计时器,则可以使用3参数形式:

UINT  SetTimer( 
  UINT  nIDEvent,             //  timer  identifier 
  UINT  uElapse,              //  time-out  value 
  TIMERPROC  lpTimerFunc      //  address  of  timer  procedure
); 

但是如果在非GUI类中使用它,则必须使用4参数形式。第一个参数是指定哪个GUI组件将响应计时器事件。从Win32 API调用此版本的函数。

eUINT  SetTimer( 
  HWND  hWnd,                //  handle  of  window  for  timer  messages 
  UINT  nIDEvent,            //  timer  identifier 
  UINT  uElapse,             //  time-out  value 
  TIMERPROC  lpTimerFunc     //  address  of  timer  procedure 
);

这很简单,不是吗?

答案 3 :(得分:0)

根据MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644906(v=vs.85).aspx,第一个和最后一个参数是可选的。因此,您可以使用偶数2个参数进行SetTimer调用(但不推荐)。错误很可能来自错误的演员表(例如,需要一个uint_ptr,你给一个hwnd)