Winapi 使用Windows SetTimer()函数
我对SetTimer()函数感到困惑 SetTimer()接受三个参数:Winapi 使用Windows SetTimer()函数,winapi,visual-c++,Winapi,Visual C++,我对SetTimer()函数感到困惑 SetTimer()接受三个参数: SetTimer(1,2000,Timerflow); SetTimer(NULL,1,2000,Timerflow); 但是,我看到了另一个版本的SetTimer,它有四个参数: SetTimer(1,2000,Timerflow); SetTimer(NULL,1,2000,Timerflow); 这两种功能之间有什么区别 我知道SetTimer()有三个参数。但是,当我尝试使用四参数SetTimer()函数时
SetTimer(1,2000,Timerflow);
SetTimer(NULL,1,2000,Timerflow);
但是,我看到了另一个版本的SetTimer,它有四个参数:
SetTimer(1,2000,Timerflow);
SetTimer(NULL,1,2000,Timerflow);
这两种功能之间有什么区别
我知道SetTimer()有三个参数。但是,当我尝试使用四参数SetTimer()函数时,会出现以下错误:
error C2660: 'SetTimer' : function does not take 4 parameters
那么,主要的区别是什么?是什么导致了这个错误?唯一一个名为SetTimer的Windows API需要四个参数。另一个可能是MFC或其他框架的一部分,第一个参数由调用它的对象暗示。例如:
CWnd * w = .... // get window somehow
w->SetTimer(1,2000,Timerflow);
4参数版本是普通的Win32 API版本,第一个参数是窗口句柄 3参数版本是MFC的CWnd类的一个成员,它与调用它的CWnd实例的窗口句柄一起工作 如果需要从CWnd派生对象的方法中调用4参数Win32 API,请执行以下操作:
::SetTimer(NULL, 1, 2000, Timerflow);
如果使用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
);
这很简单,不是吗?根据MSDN:,第一个和最后一个参数是可选的。因此,您甚至可以使用两个参数调用SetTimer(但不推荐)。错误很可能是由于不正确的强制转换(需要uint_ptr,例如,您提供了hwnd)