1 / 10

WM_PAINT 메세지

WM_PAINT 메세지. 어떤 윈도우가 다른 원도우 밑에 있게 되면 , 깔린 부분이 지워지게 됨 대책 : 다시 그려주어야 됨 Window XP 가 WM_PAINT 메시지를 발생시킴 WM_PAINT 메시지 처리 routine OnPaint 함수 OnDraw 함수 CView class 에만 있음 일반적으로 OnDraw 함수에서 그림. 지워짐. 왼쪽 마우스 click 예제 프로그램. 예제 : 왼쪽 마우스를 click 하면 그 지점에 사각형을 그리는 프로그램

birch
Download Presentation

WM_PAINT 메세지

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. WM_PAINT 메세지 • 어떤 윈도우가 다른 원도우 밑에 있게 되면, 깔린 부분이 지워지게 됨 • 대책 : 다시 그려주어야 됨 • Window XP가 WM_PAINT 메시지를 발생시킴 • WM_PAINT 메시지 처리 routine • OnPaint 함수 • OnDraw 함수 • CView class 에만 있음 • 일반적으로 OnDraw 함수에서 그림 지워짐

  2. 왼쪽 마우스 click 예제 프로그램 • 예제 : 왼쪽 마우스를 click하면 그 지점에 사각형을 그리는 프로그램 • WM_LBUTTONDOWN 메시지 처리 • OnLButtonDown 함수에서 처리 (View  Class Wizard 사용) • OnDraw 함수는 이미 존재함 class 조심 : CView class 선택

  3. 왼쪽 마우스 click 예제 프로그램 • Version 0.3 : OnDraw 함수에서 그려야 되는 것은? void CTest2View::OnLButtonDown(UINT nFlags, CPoint point) { CClientDC dc(this); dc.Rectangle(point.x-10,point.y -10,point.x+10,point.y+10); CView::OnLButtonDown(nFlags, point); } void CTest2View::OnDraw(CDC* pDC) { CTest2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here 여기에 다시 그리는 프로그램이 와야 됨 } CDC가 인수로 넘어옴

  4. V0.7: 왼쪽 마우스 click 예제 프로그램 • Version 0.7 : 전역변수의 사용 CPoint m_p; void CTest2View::OnLButtonDown(UINT nFlags, CPoint point) { CClientDC dc(this); dc.Rectangle(point.x-10,point.y -10,point.x+10,point.y+10); m_p = point; CView::OnLButtonDown(nFlags, point); }

  5. 왼쪽 마우스 click 예제 프로그램 • Version 0.7 : 전역변수의 사용 • CDC가 인수로 넘어옴으로 다음과 같이 device context를 선언할 필요가 없음 void CTest2View::OnDraw(CDC* pDC) { CTest2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->Rectangle(m_p.x-10,m_p.y -10,m_p.x+10,m_p.y+10); } CClientDC dc(this);

  6. V0.7.1 왼쪽 마우스 click 예제 프로그램 • Version 0.7.1 : member 변수의 사용 • class view 에서 오른쪽 마우스 click class CTest2View : public Cview { public: CPoint m_p; XXXview.h 파일에 멤버변수가 추가됨

  7. 왼쪽 마우스 click 예제 프로그램 • Version 0.8 : 그리는 부분을 한 곳에 모아둠 • 멤버 변수 (m_p) 및 멤버함수 (my_draw) 사용 void CTest2View::my_draw(void) { // 그리는 부분을 여기에 추가하면 됨 }

  8. V0.8: 왼쪽 마우스 click 예제 프로그램 • Version 0.8 : void CTest2View::my_draw(CPoint point) { CClientDC dc(this); dc.Rectangle(point.x-10,point.y -10,point.x+10,point.y+10); } void CTest2View::OnLButtonDown(UINT nFlags, CPoint point) { m_p = point; my_draw(); CView::OnLButtonDown(nFlags, point); } void CTest2View::OnDraw(CDC* pDC) { CTest2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); my_draw(); }

  9. V1.0 왼쪽 마우스 click 예제 프로그램 • Invalidate 함수 (member function) • WM_PAINT를 강제로 발생시킴 Invalidate(); void CTest2View::OnLButtonDown(UINT nFlags, CPoint point) { m_p = point; CView::OnLButtonDown(nFlags, point); Invalidate(); } void CTest2View::OnDraw(CDC* pDC) { CTest2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC->Rectangle(m_p.x-10,m_p.y -10,m_p.x+10,m_p.y+10); }

  10. 여러 개의 점을 그릴 때 • 멤버변수 • 멤버변수배열을 사용하여 위치값을 저장해야 됨 • int count • CPoint pt[50] void CTest2View::OnLButtonDown(UINT nFlags, CPoint point) { pt[count] = point; ++count; CView::OnLButtonDown(nFlags, point); Invalidate(); }

More Related