상세 컨텐츠

본문 제목

VC++ GDI프로젝트_2

C++,C#, ASP.NET

by 김일국 2018. 3. 12. 15:36

본문

지난 포스트에 소스에 이이서 GDI그래픽API를 이용해서 당구공이 움직이는 애니메이션을 완성해 봅니다.

결과화면(아래)

마우스 우측메뉴에 대해서 메뉴삽입기능으로 ID_POPUP_EDIT 메뉴를 추가하는 부분(아래)

자동생성된 부분을 제외하고 추가한 코드는 아래와 같다.

.h 정의파일 BallView.h

.cpp 구현파일 BallView.cpp

// CBallView 메시지 처리기

int CBallView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CView::OnCreate(lpCreateStruct) == -1)
  return -1;

 // TODO:  여기에 특수화된 작성 코드를 추가합니다.
 SetTimer(1, 20, NULL);//0.02초마다 onTimer()호출
 return 0;
}


void CBallView::OnDestroy()
{
 CView::OnDestroy();

 // TODO: 여기에 메시지 처리기 코드를 추가합니다.
 KillTimer(1);//타이머 끈다.
}


void CBallView::OnTimer(UINT_PTR nIDEvent)
{
 // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
 CClientDC dc(this);
 CRect r;//클라이언트 영역 크기
 GetClientRect(&r);

 CBrush brush, *pOldB;
 brush.CreateSolidBrush(RGB(255, 255, 255));
 
 dc.SelectStockObject(WHITE_PEN);//이전 공을 지우기 위해 흰색 선택
 //pOldB = dc.SelectObject(&brush);//신규브러시 적용하기 전 기존브러시 저장
 
 dc.Ellipse(nX - RAD, nY - RAD, nX + RAD, nY + RAD);//원을 그린다.
 nX += nMx;
 nY += nMy;
 //볼의 방향전환
 if (nY + RAD >= r.bottom) nMy = -STEP;
 if (nX + RAD >= r.right) nMx = -STEP;
 if (nY - RAD <= r.top) nMy = STEP;
 if (nX - RAD <= r.left) nMx = STEP;

 CBrush redB;
 redB.CreateSolidBrush(RGB(255, 0, 0));
 pOldB = dc.SelectObject(&redB);
 dc.SelectStockObject(BLACK_PEN);
 dc.Ellipse(nX - RAD, nY - RAD, nX + RAD, nY + RAD);

 CView::OnTimer(nIDEvent);
}


void CBallView::OnStart()
{
 // TODO: 여기에 명령 처리기 코드를 추가합니다.
 SetTimer(1, 10, NULL);
}

void CBallView::OnStop()
{
 // TODO: 여기에 명령 처리기 코드를 추가합니다.
 KillTimer(1);
}

void CBallView::OnRButtonDown(UINT nFlags, CPoint point)
{
 // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
 CMenu menu, *pSub;
 menu.LoadMenuW(IDR_POPUP_EDIT);
 pSub = menu.GetSubMenu(1);

 ClientToScreen(&point);
 pSub->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);

 CView::OnRButtonDown(nFlags, point);
}


빌드힌 실행파일:

Ball.exe

BallView.h
0.0MB
Ball.exe
8.15MB
BallView.cpp
0.0MB

관련글 더보기

댓글 영역