2009-05-06 8 views
4

SetTimer()関数と混同しています。Windows SetTimer()関数を使用する

のSetTimer()は、3つのパラメータを取ります:

私は四つのパラメータ取るのSetTimerの別のバージョンを見てきましたが
SetTimer(1,2000,Timerflow); 

SetTimer(NULL,1,2000,Timerflow); 

この2つの機能の違いは何ですが?

私はSetTimer()が3つのパラメータを知っています。しかし、私は、4つのパラメータのSetTimer()関数をしようとすると、私はエラーを取得:

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

だから、主な違いは、何、このエラーの原因は何ですか?

答えて

2

SetTimerと呼ばれる唯一のWindows APIは、4つのパラメータをとります。おそらく、もう1つはMFCや他のフレームワークの一部であり、最初のパラメータは、それを呼び出すオブジェクトによって暗示されます。例:

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

4パラメータバージョンはプレーンなWin32 APIバージョンで、最初のパラメータはウィンドウハンドルです。

3パラメータバージョンはMFCのCWndクラスのメンバであり、呼び出すCWndインスタンスのウィンドウハンドルで機能します。あなたはCWndの派生オブジェクトのメソッド内から4パラメータのWin32 APIを呼び出す必要がある場合

、次の操作を行います。

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

次のようなGUIクラスでタイマーを作成するためには、SetTimerを使用する場合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 
); 

非常に簡単ですね。

0

MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644906(v=vs.85).aspxによると、最初と最後のパラメータはオプションです。したがって、2つのパラメータでSetTimerを呼び出すこともできます(ただし、推奨されません)。エラーは、間違ったキャストの可能性が最も高いです(たとえば、uint_ptrが必要な場合は、hwndを指定します)

関連する問題