1 / 14

Windows Graphic

Windows Graphic. 하드웨어 독립적 프로그래밍 디바이스 드라이버에 의한 하드웨어 독립적 프로그래밍. 응용 프로그램. GDI (Graphic Device Interface). 원도우 운영체제. 하드웨어 독립. 하드웨어 종속. 디바이스 드라이버. 디바이스 ( 그래픽 카드 , 프린터 ). 삼성. HP. ATI. Windows Graphic. 그래픽 예제 : Window 에 선을 하나 그리는 예제 선의 색깔 , 굵기 , 종류 지정해야 됨

gen
Download Presentation

Windows Graphic

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. Windows Graphic • 하드웨어 독립적 프로그래밍 • 디바이스 드라이버에 의한 하드웨어 독립적 프로그래밍 응용 프로그램 GDI (Graphic Device Interface) 원도우 운영체제 하드웨어 독립 하드웨어 종속 디바이스 드라이버 디바이스 (그래픽 카드, 프린터) 삼성 HP ATI

  2. Windows Graphic • 그래픽 예제 : Window에 선을 하나 그리는 예제 • 선의 색깔, 굵기, 종류 지정해야 됨 • Device Context : 그래픽과 관련된 여러가지 성질 (선의 색깔, 굵기, 글자 폰트, …) 을 저장하는 구조체 • Device Context관련 class : CDC • 그래픽과 관련된 여러가지 성질 (멤버변수) + 실제로 그리는 함수 (멤버함수) CDC CPaintDC CClientDC Window의 client area의 그래픽 CMetaFileDC

  3. CClientDC의 사용 • 사각형을 그리는 프로그램 예제 • this : 어떤 class의 자기자신을 가리키는 pointer • 질문 : 그려지는 사각형의 선의 굵기 및 색깔은? • 그래픽 옵션의 변경과 관련된 MFC class • CPen (선과 관련된 option) • CBrush (도형 내부를 칠하는 option 등) • CFont (글꼴) • CBitmap (나중에) • CPalette (나중에) • CRgn (나중에) CClientDC dc(this); dc.Rectangle(10,10,100,100); 원도우에서 device context를 할당 받음 멤버함수를 사용하여 사각형을 그림

  4. CClientDC의 사용 • CPen을 사용한 선의 성질 선택 • Pen 스타일 • PS_SOLID • PS_DASH • PS_DOT • PS_DASHDOT • PS_DASHDOTDOT • PS_NULL • Pen 굵기 (단위 pixel ) : 3 pixel 굵기의 선을 그림 CPen pen; pen.CreatePen(PS_SOLID, 3, RGB(255,0,0) );

  5. CClientDC의 사용 • Pen 색깔 : RGB 색깔 (0 – 255 사이의 숫자로 지정) • 빨간색 RGB(255, 0, 0) • 녹색 RGB(0,255,0) • 파란색 RGB(0,0,255) • 노랑색 RGB(255,255,0) • 흰색 RGB(255,255,255) • 검정색 RGB(0,0,0) • ???색 RGB(123,130,67)

  6. CClientDC의 사용 • SelectObject를 사용하여 DC에 CPen 추가 • Device Context는 Windows에서 빌려 사용하는 것임 • 현재의 graphic option을 보관하였다가 나중에 원상 복귀함 CPen pen; pen.CreatePen(PS_SOLID, 3, RGB(255,0,0) ); CClientDC dc(this); CPen *pOldPen = dc.SelectObject(&pen); dc.Rectangle(10,10,100,100); dc.SelectObject(pOldPen);

  7. CClientDC의 사용 • CPen의 사용 : option을 중간에 바꿈 CPen pen; pen.CreatePen(PS_SOLID, 3, RGB(255,0,0) ); CClientDC dc(this); CPen *pOldPen = dc.SelectObject(&pen); dc.Rectangle(10,10,100,100); pen.DeleteObject(); pen.CreatePen(PS_SOLID, 3, RGB(255,255,0) ); dc.SelectObject(&pen); dc.Rectangle(200,200,300,300); dc.SelectObject(pOldPen);

  8. CClientDC의 사용 • 내장 (Stock) Object의 사용 • SelectStockObject( WHITE_PEN or BLACK_PEN ) • stock object는 운영체제에 내장되어 있음으로 원래 것으로 돌려 놓을 필요가 없음. CClientDC dc(this); dc.SelectStockObject(WHITE_PEN); dc.Rectangle(10,10,100,100); CPen pen; pen.CreatePen(PS_SOLID, 3, RGB(255,255,255) ); CClientDC dc(this); CPen *pOldPen = dc.SelectObject(&pen); dc.Rectangle(10,10,100,100); dc.SelectObject(pOldPen);

  9. CClientDC의 사용 • CClientDC에서 Pen과 Brush를 사용하는 멤버함수 • CPointMoveTo(intx,inty); CPointMoveTo(POINTpoint); 중 하나의 형식으로 사용 • BOOL Ellipse( int x1, int y1, int x2, int y2 ); 타원을 그림

  10. CString class • CString Class : 문자열에 관한 MFC class • 윈도우 화면에 변수값을 출력하는 routine 예제 void CLecture72View::OnDraw(CDC* pDC) { CString text; int a = 5; text.format(“value is %d”,a); pDC->TextOut(100,100,text); }

  11. 연습문제 • 빨간색 사각형을 1개 그리고, 마우스의 cursor가 이 마우스 안으로 들어가면 파란색 사각형으로 변하고, 빠져 나오면 다시 빨간색으로 변하는 프로그램을 작성하라. • my_color = 0 : 빨간색 사각형 , my_color = 1: 파란색 사각형 • CView class의 생성자가 call 됨 • Windows가 처음 생기면 int my_color; CPoint s, e; CLecture72View::CLecture72View() { // TODO: add construction code here my_color = 0; s.x = 100; s.y = 100; e.x = 200; e.y = 200; }

  12. 연습문제 • OnDraw 함수 • my_color의 값에 따라서 사각형을 그림 • 실제로 사각형은 draw_rect에서 그림 void CLecture72View::OnDraw(CDC* pDC) { CLecture72Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here if ( my_color == 0 ) draw_rect(s,e, 255, 0, 0); else draw_rect(s,e,0,0,255); }

  13. 연습문제 • draw_rect 함수 void CLecture72View::draw_rect(CPoint start, CPoint end, BYTE red, BYTE green, BYTE blue) { CPen pen; pen.CreatePen(PS_SOLID, 2, RGB(red,green,blue) ); CClientDC dc(this); CPen *pOldPen = dc.SelectObject(&pen); dc.Rectangle(start.x, start.y, end.x, end.y); dc.SelectObject(pOldPen); }

  14. 연습문제 • OnMouseMove : mouse가 사각형 안에 있는지 판단 void CLecture72View::OnMouseMove(UINT nFlags, CPoint point) { if ( (point.x > s.x) && (point.y > s.y) && (point.x < e.x) && (point.y < e.y) ) { if ( my_color == 0) { my_color = 1; Invalidate(); } } else { if ( my_color == 1) { my_color = 0; Invalidate(); } } CView::OnMouseMove(nFlags, point); }

More Related