C++メモ(Win32API):タイマー

※先日C++(Win32API)を使った時に覚えた内容をメモしています。
 まだ勉強中なので、間違いがあればご指摘ください。

【タイマーの設定方法】
UINT_PTR SetTimer(HWND , TIMER_ID , SEC , TIMERPROC);
 第1引数:ウィンドウハンドル
 第2引数:タイマーのID
 第3引数:タイムの間隔(1/1000秒単位)
 第4引数:タイマのプロシージャ
 戻り値 :成功(タイマーのID),失敗(0)

【メッセージ】
WM_TIMERメッセージ
 指定秒毎にメッセージが飛んできます。
 ウィンドウプロシージャのWPARAMにタイマーのIDが入っています。

【タイマーの解除】
BOOL KillTimer(hwnd , TIMER_ID);
 第1引数:ウィンドウハンドル
 第2引数:タイマーのID
 戻り値 :成否(True/False)



【サンプルコード1】

//マクロ定義
#define TIMER_ID 100001

//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg, WPARAM wp, LPARAM lp)
{
	switch(msg)
	{
	case WM_CREATE:
		//タイマーセット
		SetTimer(hwnd , TIMER_ID , 5000 , NULL);
		break;
	case WM_TIMER:
		switch(wp)
		{
		case TIMER_ID:
			//
			//タイマー処理
			//
			break;
		}
		break;
	case WM_DESTROY:	
		//タイマー解除
		KillTimer(hwnd , TIMER_ID);
		break;
	default:
		return DefWindowProc(hwnd,msg,wp,lp);
		break;
	}
	
	return 0;
}


【サンプルコード2】(タイマプロシージャ利用)

//マクロ定義
#define TIMER_ID 100001

//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg, WPARAM wp, LPARAM lp)
{
	switch(msg)
	{
	case WM_CREATE:
		//タイマーセット
		SetTimer(hwnd , TIMER_ID , 5000 , (TIMERPROC)TimerProc);
		break;
	case WM_DESTROY:	
		//タイマー解除
		KillTimer(hwnd , TIMER_ID);
		break;
	default:
		return DefWindowProc(hwnd,msg,wp,lp);
		break;
	}
	
	return 0;
}
//タイマプロシージャ
BOOL CALLBACK TimerProc(HWND hwnd , UINT msg, WPARAM wp, LPARAM lp)
{
	switch(msg)
	{
	case WM_TIMER:
		switch(wp)
		{
		case TIMER_ID:
			//
			//タイマー処理
			//
			break;
		}
		break;
	default:
		return DefWindowProc(hwnd,msg,wp,lp);
		break;
	}
	return 0;
}


コメント
コメントする








    
この記事のトラックバックURL
トラックバック