posted by nsakura 2010. 7. 19. 13:45

 쌩뚱 맞게 바로 시작하겠다.

 게임을 한번 생각해보자. 게임의 배경이 바뀐다던가 음악이 바뀐다. 하는건 게임이라면 어느 게임이든 다 있다.

심지어 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