C++ mfc
글쓴이: runedemonic / 작성시간: 토, 2018/09/15 - 1:47오후
클릭하면 원이 그려지고 원을 누르면 삭제되는 프로그램을 만들고 싶은데 안됩니다 조언좀 해주세요
protected: DECLARE_MESSAGE_MAP() public: ClickInfo a[10] = {0}; ClickInfo b[1] = { 0 }; int click = 0; afx_msg void OnLButtonDown(UINT nFlags, CPoint point); void Delete(int idx) { memmove(a + idx, a + idx + 1, 10 - idx); } }; --------------------------------------------------------------- void CWork2View::OnLButtonDown(UINT nFlags, CPoint point) { if (click >= 10) { AfxMessageBox(_T("최대10개까지 입니다.")); return; } a[click].x = point.x; a[click].y = point.y; if (click != 0) { a[click].x = point.x; a[click].y = point.y; b[0].x = point.x; b[0].y = point.y; } // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다. CClientDC dc(this); CBrush brush(RGB(255, 0, 0)); dc.SelectObject(&brush); if (click == 0) { dc.Ellipse(a[click].x - 50, a[click].y - 50, a[click].x + 50, a[click].y + 50); } else { for (int i = 0; i <= click; i++) { if ((a[i].x - 50 <= b[0].x) || (a[i].x + 50 >= b[0].x) && (a[i].y - 50 <= b[0].y) || (a[i].y + 50 >= b[0].y)) //a배열의 좌표가 지정된 범위 안에 있으면 a배열의 값을 지정해서 삭제 { Delete(i); } else { dc.Ellipse(a[click].x - 50, a[click].y - 50, a[click].x + 50, a[click].y + 50); } } } click++; b[0] = { 0 }; CView::OnLButtonDown(nFlags, point); }
Forums:
참고해보세요.
일단. 웹에서 그려보는 함수로 만들어 봤습니다. ㅇ_ㅇ;; 요즘 웹 브라우저에서 됩니다.
웹에서. 아래 주소 링크를 선택하고. Run 으로 실행 후. canvas 영역을. 마우스로 클릭하면 됩니다.
https://www.w3schools.com/code/tryit.asp?filename=FVB4GRMLO6HY
//-------------
//이 부분을 변경
//-------------
if ((a[i].x - 50 <= b[0].x) || (a[i].x + 50 >= b[0].x) && (a[i].y - 50 <= b[0].y) || (a[i].y + 50 >= b[0].y)) //a배열의 좌표가 지정된 범위 안에 있으면 a배열의 값을 지정해서 삭제
//수정 된 예제
if((a[i].x -50 < b.x) && (b.x < a[i].x +50) && (a[i].y -50 < b.y) && (b.y < a[i].y +50))
//-------------
//이 부분을 변경
//-------------
b[0] = { 0 };
//수정 된 예제
b.x = xmouse;
b.y = ymouse;
//-------------
//일단. 이것은 제외 ㅇ_ㅇ;;
//윈도우에서. 그리는 방법은 이것저것 공부하셔야 할겁니다.
//Win32 API / MFC / .Net / GDI+ / OpenGL / DirectX
//책 예제 소스를 참고해보세요. - 네이버 북 / 서점 / 도서관
//코드 구루. 코드 프로젝트. 데브피아. 구글. WinAPI. TipSoft. 등에서.
//잘되는 Paint 페인트 예제. 게임 예제를 사용하기도 합니다.
//-------------
- SetROP() 를 사용해서. 기존 그려진 영역을 지우기도 합니다.
- 이미지의 깜빠임을 줄이기 위해서. 더블버퍼링을 하기도 합니다.
- 비트 마스크로 그리기에 사용하기도 합니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기