CALLBACK을 사용한 또 다른 무한 작업을 위한 타이머,
#include <windows.h>
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("Callback");
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;
}
// CALLBACK TimerProc
void CALLBACK TimerProc( HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime )
{
HDC hdc;
int i;
hdc = GetDC( hwnd );
// 랜덤한 위치에 랜덤한 색상으로
// 1초에 2만개 라고 볼 수 있다.
// 0.05초에 한번씩 들어 오니까.
for( i=0; i<1000; ++i )
{
SetPixel( hdc, rand()%500, rand()%400,
RGB( rand()%256, rand()%256, rand()%256));
}
ReleaseDC( hwnd, hdc );
}
LRESULT CALLBACK WndProc( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
HDC hdc;
switch( iMessage )
{
case WM_CREATE:
SetTimer( hWnd, 1, 50, TimerProc ); // 이전과 똑같은 결과지만
// WM_TIMER: 가 아닌 TimerProc를 호출 한다.
return 0;
case WM_LBUTTONDOWN:
hdc = GetDC( hWnd );
// 마우스의 x, y는 lParam의 LOWORD, HIWORD에서 각각 가지고 있게 된다.
Ellipse( hdc, LOWORD( lParam )-10, HIWORD( lParam )-10,
LOWORD( lParam )+10, HIWORD( lParam )+10 );
ReleaseDC( hWnd, hdc );
return 0;
case WM_DESTROY:
KillTimer( hWnd, 1 );
PostQuitMessage(0);
return 0;
}
return( DefWindowProc( hWnd, iMessage, wParam, lParam));
}
// 실행 화면

설명 : 특정 지역에 무한의 점을 찍으면서, 마우스 왼쪽 버튼 클릭시 구체가 생성.
'프로그래밍 > API' 카테고리의 다른 글
API-작업 영역 (0) | 2010.04.21 |
---|---|
API-일회용 타이머 (0) | 2010.04.21 |
API-무한의 작업을 위한 타이머(1) (0) | 2010.04.21 |
API-2개의 타이머 (0) | 2010.04.21 |
API-타이머 (0) | 2010.04.21 |