반응형 #define R 20 // 반지름 int x,y; // 공의 좌표 int xi,yi; // 한번에 이동하는 거리 void OnTimer() { RECT crt; // GetClientRect(hWndMain,&crt); // 좌 or 우 측 벽에 맞는다면... if (x <= R || x >= crt.right-R) { xi*=-1; // 음수를 곱해서 튕기는 방향 변경. } // 위 or 아래 벽에 맞는다면... if (y <= R || y >= crt.bottom-R) { yi*=-1; // 음수를 곱해서 튕기는 방향 변경. } x+=xi; y+=yi; // 전체 무효화 //InvalidateRect(hWndMain,NULL,TRUE); /* 공 주변만 무효화 */ // 클리핑 영역 지정- BeginPaint 에서만 할수 있음. RECT rt; SetRect(&rt,x-R-5,y-R-5,x+R+5,y+R+5); InvalidateRect(hWndMain,&rt,TRUE); } LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; // DC 핸들 PAINTSTRUCT ps; // PAINT 용 PAINTSTRUCT 구조체 HPEN hPen,OldPen; // 펜 핸들, 변경 전 펜 설정을 저장할 핸들 HBRUSH hBrush,OldBrush; // 브러쉬 핸들, 변경 전 브러쉬 설정을 저장할 핸들 RECT crt; // 사각형 좌표 저장 구조체 int i; switch (iMessage) { case WM_CREATE: x=50; // 최초 공의 좌표 x y=50; // 최초 공의 좌표 y xi=4; // 한번에 공이 이동하는 거리 x yi=5; // 한번에 공이 이동하는 거리 y SetTimer(hWnd,1,25,NULL); // 타이머 지정 return 0; case WM_TIMER: OnTimer(); return 0; case WM_PAINT: hdc=BeginPaint(hWnd, &ps); GetClientRect(hWnd,&crt); for (i=0;i<crt.right;i+=10) { MoveToEx(hdc,i,0,NULL); LineTo(hdc,i,crt.bottom); } for (i=0;i<crt.bottom;i+=10) { MoveToEx(hdc,0,i,NULL); LineTo(hdc,crt.right,i); } hPen=CreatePen(PS_INSIDEFRAME,5,RGB(255,0,0)); OldPen=(HPEN)SelectObject(hdc,hPen); hBrush=CreateSolidBrush(RGB(0,0,255)); OldBrush=(HBRUSH)SelectObject(hdc,hBrush); Ellipse(hdc,x-R,y-R,x+R,y+R); DeleteObject(SelectObject(hdc,OldPen)); DeleteObject(SelectObject(hdc,OldBrush)); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); KillTimer(hWnd,1); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } 반응형 공유하기 게시글 관리 Lee's Lab 저작자표시 Share this: 같은 카테고리 글 Trash/잡동사니 [Java] 래퍼런스 타입 2012.10.02 Trash/잡동사니 인터페이스 2012.09.17 Trash/잡동사니 120705_API :: 스크롤바(Scroll Bar) 2012.07.05 Trash/잡동사니 120705_API :: ScrollBar 를 이용한 폰트크기 조절 2012.07.05