프로그램이 실행되면서 시간에 대해 설정하는 예제,
#include <windows.h>
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("MyTimer");
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow )
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject( COLOR_WINDOW+1 );
WndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
WndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass( &WndClass );
hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, (HMENU)NULL, hInstance, NULL );
ShowWindow( hWnd, nCmdShow );
while( GetMessage( &Message, NULL, 0, 0 ) )
{
TranslateMessage( &Message );
DispatchMessage( &Message );
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
SYSTEMTIME st;
static TCHAR sTime[128]; // Time을 저장할 문자열
static RECT rt = { 100, 100, 400, 120 }; // 지우는 범위를 지정해 보았다
switch( iMessage )
{
case WM_CREATE: // 윈도우가 생성되면 최초, 한번 거치게 된다.
SetTimer( hWnd, 1, 1000, NULL ); // 타이머를 만드는 함수, 실행시 타이머가 만들어 진다.
// 첫번째 인자는 윈도우 핸들, 두번째는 타이머의 ID를 지정한다.
// 여러개의 타이머를 생성한다고 하면,
// SetTimer( hWnd, 1, 1000, NULL );SetTimer( hWnd, 2, 1000, NULL );
// 이런식으로 해 주어야 한다.
// 세번째는 타이머의 주기, 1/1000초(1000으로 해야 1초에 한번씩)
// 네번째 인자는 타이머 함수가 발생 할때 호출될 함수를 지정한다고 함.
// 즉 위 설정은 1초에 한번씩 WM_TIMER:을 호출 할 것이다.
// 시작시 바로 등장을 하게 하기 위해
SendMessage( hWnd, WM_TIMER, 1, 0 );
// WM_TIMER을 호출한다, wParam, lParam을 각각 2,3번째 인자로 호출
// 타이머의 wParam이 타이머의 ID,
// lParam이 타이머 발생시 호출된 함수의 번지이기 때문에
// 1, 0으로 각각 넣어 주었다.
return 0;
case WM_TIMER: // wParam으로 타이머 ID를 전달 받게 되고,
// lParam으로 타이머 메시지 발생시 호출될 함수의 번지가 전달된다.
GetLocalTime(&st); // 현재 시간을 st에 저장하게 된다.
// wsprintf를 사용하여 sTime에 text로 시간을 저장,
wsprintf( sTime, TEXT("지금 시간은 %d:%d:%d입니다."),
st.wHour, st.wMinute, st.wSecond );
// 무효화를 시키면서 PAINT를 호출하게 된다.
InvalidateRect( hWnd, &rt, TRUE ); // rt의 범위만큼만 계산
return 0;
case WM_DESTROY:
// 타이머는 전역적으로 선언이 되기 때문에,
// 사용하지 않으면 소멸을 시켜야 한다.
// KillTimer는 그런 존재.
// 두번째 인자는 Timer의 번호,
// 현재는 1개 밖에 없기 때문에 1을 넘기고 있다.
// 정확히는 Timer의 ID를 넘기게 된다.
KillTimer( hWnd, 1 );
PostQuitMessage(0);
return 0;
case WM_PAINT:
// 꾸준히 화면에 시간을 출력한다.
hdc = BeginPaint( hWnd, &ps );
TextOut( hdc, 100, 100, sTime, lstrlen(sTime));
EndPaint( hWnd, &ps );
return 0;
}
return( DefWindowProc( hWnd, iMessage, wParam, lParam));
}
// 실행 화면

시계를 표시.
'프로그래밍 > API' 카테고리의 다른 글
API-무한의 작업을 위한 타이머(1) (0) | 2010.04.21 |
---|---|
API-2개의 타이머 (0) | 2010.04.21 |
API-마우스입력 (0) | 2010.04.21 |
API-Key입력(2) (0) | 2010.04.21 |
API-Key입력(1) (0) | 2010.04.21 |