ページ 11

SetTimerについて教えてください。

Posted: 2013年10月10日(木) 13:49
by ます

コード:

#include <windows.h>

#pragma comment(lib,"Kernel32.lib")
#pragma comment(lib,"user32.lib")
#pragma comment(lib,"Gdi32.lib")

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
{
	HDC hdc;
	PAINTSTRUCT ps;
	RECT rctSize;
	SYSTEMTIME stTime;
	static TCHAR strTime[128];
	static TCHAR *setTime = "10月10日13時40分";
	static TCHAR *buf;

	switch(msg)
	{
		case WM_DESTROY:
			PostQuitMessage(0);
			return 0;

		case WM_CREATE:
			SetTimer(hwnd,1,50,NULL);
			return 0;

		case WM_TIMER:
			GetLocalTime(&stTime);
			wsprintf(strTime,"%d月%d日%d時%d分",stTime.wMonth,stTime.wDay,stTime.wHour,stTime.wMinute);

			if(strcmp(strTime,setTime) == 0)
			{
				MessageBox(NULL,buf,"時間になりましたよ~",MB_OK);

				KillTimer(hwnd,1);
				return 0;
			}

			return 0;
	}

	return DefWindowProc(hwnd , msg , wp , lp);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow)
{
	HWND hwnd;
	MSG msg;
	WNDCLASS winc;

	winc.style = CS_HREDRAW | CS_VREDRAW;
	winc.lpfnWndProc = WndProc;
	winc.cbClsExtra	= winc.cbWndExtra = 0;
	winc.hInstance = hInstance;
	winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
	winc.hCursor = LoadCursor(NULL , IDC_ARROW);
	winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	winc.lpszMenuName = NULL;
	winc.lpszClassName = TEXT("Timer");

	if(!RegisterClass(&winc))
	{
		return -1;
	}

	hwnd = CreateWindow(TEXT("Timer"),TEXT("Timer"),WS_OVERLAPPEDWINDOW | WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

	if(hwnd == NULL)
	{
		return -1;
	}

	while(GetMessage(&msg,NULL,0,0))
	{
		DispatchMessage(&msg);
	}

	return msg.wParam;
}
セットした時間にメッセージボックスを出したいのですが、この書き方だと時間になるとメッセージボックスが大量に出てきます。
KillTimerじゃダメなのでしょうか?

Re: SetTimerについて教えてください。

Posted: 2013年10月10日(木) 14:58
by Blue
KillTimerしてからMessageBox出すのはダメですか?