쌩뚱 맞게 바로 시작하겠다.
게임을 한번 생각해보자. 게임의 배경이 바뀐다던가 음악이 바뀐다. 하는건 게임이라면 어느 게임이든 다 있다.
심지어 8비트 게임에서도 조차에서도 배경은 바뀌고 음악은 바뀐다.
예를 게임에 든것이고 실재로 많은 프로그램에서도 백그라운드 작업은 한다.
오늘은 백그라운드 작업에 대해 알아보자.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_Inst;
LPCTSTR wndName=TEXT("BACKGROUND");
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevINSTANCE,LPSTR lpCmdLine,int nShowCmd){
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_Inst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName=wndName;
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(wndName,wndName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nShowCmd);
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;
int cnt;
switch(iMessage){
case WM_CREATE:
SetTimer(hWnd,1,50,NULL);
return 0;
case WM_TIMER:
hdc=GetDC(hWnd);
for(cnt=0; cnt<1000; cnt++){
SetPixel(hdc,rand()%500,rand()%500,RGB(rand()%256,rand()%256,rand()%256));
}
ReleaseDC(hWnd,hdc);
return 0;
case WM_LBUTTONDOWN:
hdc=GetDC(hWnd);
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));
}
간단한 프로그램이다 .
settimer에 설정된 시간이 되면 점을 반목문의 조건만큼 만든다.
그리고 마우스 왼쪽 버튼을 누르면 그 지점에 원을 그린다.
그런데 왜 반복문에 조건식이있는가 백그라운드 작업이면 무한루프를 돌려도 되지 않는가?
그건 아니다. 쓰래드를 돌린것이 아니기 때문에 어느정도 갭을 줘야한다.
무한루프를 돌려버리면 반복문에서 빠져나올수가 없는 것 이다.
궁금하면
무한루프 돌려보길 바란다..
원을 찍긴 커녕 프로그램이 바보가 될것이다.
'Computer > Win API' 카테고리의 다른 글
WinApi 타이머 확장 (1) | 2010.07.19 |
---|---|
WinApi 타이머 콜백함수 (0) | 2010.07.19 |
WinApi 두개의 타이머 (0) | 2010.07.18 |
WinApi 타이머 확장 문제. (0) | 2010.07.18 |
WinApi 타이머2 [SendMessage] (0) | 2010.07.18 |