1 / 136

Win32 API System Programming

Win32 API System Programming. GDI & GDI+. 한양대학교 컴퓨터공학과 Computer Vision & Pattern Recognition Lab 박사 5 기 박현. Contents. GDI Device Context 다양한 그리기 함수 속성 설정 매핑 모드 예제 GDI+ 구성요소 새로운 기능 프로그래밍 모델에서의 변화 사용방법 예제. GDI. GDI ( Graphic Device Interface )

chafin
Download Presentation

Win32 API System Programming

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. Win32 API System Programming GDI & GDI+ 한양대학교 컴퓨터공학과 Computer Vision & Pattern Recognition Lab 박사 5기 박현

  2. Contents • GDI • Device Context • 다양한 그리기 함수 • 속성 설정 • 매핑 모드 • 예제 • GDI+ • 구성요소 • 새로운 기능 • 프로그래밍 모델에서의 변화 • 사용방법 • 예제 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  3. GDI • GDI ( Graphic Device Interface ) • Window OS 상의 풍부한 그리기 작업을 제공하는 인터페이스 • 장치 독립적인 그래픽 출력 모델 ( GDI + Graphic Device Driver ) • GDI 서비스 : Gdi.exe , Gdi32.dll • GDI Object • Pen, Brush , Bitmap , Region, Font , Palette • GDI Object 는 프로그램 종료 시 자동으로 삭제되지 않음 • Device Context 에서 사용되고 있는GDI Object 는DeleteObject 에 의해서 삭제되지 않음 Graphic Hardware Virtual Device Driver Application GDI 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  4. GDI • GDI 관련 함수 • Device Context의 속성 관련 함수 • 도형 관련 출력 함수 • Text 관련 출력 함수 • Mapping mode 관련 함수 • 그림 도구 변경 함수 • DC( Device Context ) • GDI 의 핵심적인 개념 • GDI 함수의 Parameter 로 쓰인다. • 논리적 “스크린” , “프린터” 등을 표시함 • 구조체 : 객체 + 속성 + 모드 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  5. Device Context • DC • Simple Method • OnPaint Handler CDC * pDC = GetDC(); // Drawing ReleaseDC( pDC ); PAINTSTRUCT ps; CDC * pDC = BeginPaint( &ps ); //Drawing EndPaint( &ps ); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  6. Device Context Class • Motive • DC를 얻거나 해제하기 위한 함수를 기억해야 함 • 사용한 DC를 확실하게 해제해야 함 PAINTSTRUCT ps; CDC * pDC = BeginPaint( &ps ); //Drawing EndPaint함수를 사용하지 않았다면 ??? 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  7. Device Context Class • CDC • CPaintDC • OnPaint 핸들러 • CWnd::BeginPaint() ~ CWnd::EndPaint(); • BeginPaint() 또는 EndPaint() 호출시 실패 ???? • CPaintDC::m_ps PAINTSTRUCT 의 rcPaint 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  8. Device Context Class • CDC • CWindowDC • CWindowDC dc(this) : ( Client Area + Frame ) • CWindowDC dc(NULL) : Screen Area • CWnd::GetWindowDC() ~ CWnd::ReleaseDC(); • NonClient Area 에 효과를 주기 위해 사용함 • CWindowDC 보다는 WM_NCPAINT 메시지 핸들러를 더 사용함 • CClientDC • CClientDC dc(this) : Client Area • CClientDC dc(NULL) : Screen Area • CWnd::GetClientDC() ~ CWnd::ReleaseDC(); • CMetaFileDC • 메타파일에 대한 그리기 작업 • Construct : Create() ~ Destructor : DeleteMetaFile() 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  9. Drawing Function CDC Draw Function 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  10. DC Property CDC::SelectStockObject 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  11. Mapping Mode • Logical Coordinate • MoveTo , LineTo : 실질적인 화면의 좌표가 아님 • Device Context 에 의해서 정의되는 논리적 좌표계의 좌표 • CDC::SetWindowOrg • Device Coordinate • GDI : 장치 속성 , 매핑모드 방정식을 이용 논리적 좌표를 화면의 실질적 좌표 (Device Coordinate)로 변경 • 원점 : Device Context의 Display 표면의 (0,0) • 단위 : 픽셀 • CDC::SetViewPortOrg (0,0) 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  12. Mapping Mode • CDC::SetViewPortOrg • Logical Coordinate (0,0) => Mapping to Device Coordinate(x,y) • CDC::SetWindowOrg • Logical coordinate(x,y) => Mapping to Device Coordinate(0,0) (0,0) (0,0) Logical Coordinate Origin (x,y) Device Unit (x,y) Device Unit (0,0) (0,0) (x,y) Logical coordinate (x,y) Logical coordinate 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  13. Mapping Mode • CDC::SetMapMode 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  14. GDI+ • GDI+ • For Window XP Graphic Device Interface • GDI+ API provide C++ Class for GDI+ • GDI+ 의 세가지 구성요소 • 2D Vector Graphics • Image processing • Typography 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  15. GDI+ • GDI+ 의 세가지 구성요소 • 2D Vector Graphics • 여러 점들로 구성되는 Drawing Primitives 가 존재 • Drawing Primitives 에 대한 정보를 저장하는 Class 제공 • Rect , Point , Pen , Brush , Graphics • Image processing • Vector Image Processing • 다양한 Image 관련 객체들 ( CachedBitmap ) • Typography • 다양한 형태의 크기, 폰트, 스타일로 TEXT 출력 하는 것과 관련됨 • Font Antialiasing 기능 제공 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  16. GDI+ • GDI+ 의 새로운 특징들 • Gradient Brushes • Cardinal Splines • Independent Path Objects • Transformations and the Matrix Object • Scalable Regions • Alpha Blending • Antialiasing • Support for Multiple Image Formats • Etc.. 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  17. GDI+ 새로운 기능 • Gradient Brushes • Brush : 도형 , 패스(Path) , 영역(Region) • 점진적으로 색상이 변함 • Linear gradient brush • 두가지 색상만 제공함 • Path gradient brush • 경로에 따라 색상의 변화를 정의 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  18. GDI+ 새로운 기능 • Cardinal Splines • GDI 에 없던 Cardinal Spline 을 제공함 • Independent Path Objects ( Path Object’s Durability ) • GDI • DC와 밀접한 Path는 한번 그려지면 정보가 모두 소멸됨 • GDI+ • Graphics 객체와 독립적인 Path 객체가 정보 유지함 • Path 객체를 여러 개 생성하여 유지할 수 있음. 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  19. GDI+ 새로운 기능 • Transformation & Matrix Object • Matrix Object • 쉬우면서 유연한 Transformation (Translate , Rotate, etc) 기능을 제공함 • Matrix Object 는 Transform 되어야 할 객체와 결합하여 사용됨. • GraphicsPath 객체는 Transform 함수를 가지고 있음. • Region + Matrix Object 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  20. GDI+ 새로운 기능 • Scalable Region • GDI • Device Coordinate 상의 정보로 저장됨 • Translation 변환만 가능함 • GDI+ • World coordinate (무한좌표계) • Scaling , Translation , Rotation 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  21. GDI+ 새로운 기능 • Alpha Blending • Transparency 설정 • Antialiasing • 계단현상을 줄임 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  22. GDI+ 새로운 기능 • Recoloring • Image Color Adjusting Process • changing one color to another • adjusting a color's intensity relative to another color • adjusting the brightness or contrast of all colors • converting colors to shades of gray 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  23. GDI+ 새로운 기능 • Graphics Container • Graphics Object : Container 역할 • Graphics State 정보를 유지 Outer Container Inner Container Antialiasing mode 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  24. GDI+ 새로운 기능 • Various Image format • GDI+ 는 Image, Bitmap, Metafile 클래스들을 제공함. • BMP • GIF • JEPG • Exif • PNG • TIFF • ICON • WMF • EMF 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  25. GDI+ Programming Model • GDI • Device Context 사용하는 Handle 기반 • SelectObject Function에 의해서 영향을 받음. • Current Position • Brush에 의해서 도형의 내부가 칠해짐 • Resion 및 Path 정보는 단발성 • GDI+ • Graphics 객체를 사용하는 객체지향적인 모델 • 사용중인 Pen , Brush , Bitmap , Font에 정보를 유지하지 않음 • 그래픽 객체를 인수로 사용함 • Overloading 된 많은 함수들을 제공 • Current Position 개념을 지원하지 않음 • 도형의 외곽선을 그리는 함수와 내부를 칠하는 함수를 분리 • Region 과 Path 기능 강화 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  26. GDI+ Programming Model • In MFC • StdAfx.h • #ifndef ULONG_PTR • #define ULONG_PTR unsigned long * • #endif • #include <Gdiplus.h> • #include <GdiplusBase.h> • #include <GdiplusColor.h> • #include <GdiplusPen.h> • #include <GdiplusBrush.h> • #include <GdiplusPath.h> • #include <Gdiplusgraphics.h> • using namespace Gdiplus; • #pragma comment(lib, "gdiplus.lib") 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  27. GDI+ Programming Model • In MFC • CWinApp • Member Variable • ULONG_PTR m_gdiplusToken; • InitInstance() • GdiplusStartupInput gdiplusStartupInput; • // Initialize GDI+ • GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL); • ExitInstance() • GdiplusShutdown(m_gdiplusToken); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  28. GDI+ Coordinate Systems • Types of Coordinate Systems • World Coordinate System • Page Coordinate System • Device Coordinate System • Transformation Sequences of Coordinate • Before GDI+ can draw the line on screen World Coordinate Page Coordinate Device Coordinate 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  29. GDI+ Coordinate Systems • GDI+ • World Coordinate System • 원점은 Transform 에 의해서 변경됨. • GDI+ Function Call : graphics.DrawLine( &penBlack , 0 , 0 , 160 , 80 ); • Page Coordinate System • 원점은 항상 클라이언트 영역의 (0,0) 이다. (변경되지 않음) • 기본 단위 : 픽셀 ( Page Coordinate System = Device Coordinate System ) • 기본 단위 변경 가능 • Device Coordinate System • 원점은 항상 클라이언트 영역의 (0,0) 이다. (변경되지 않음) • 기본단위 : 픽셀 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  30. GDI+ Coordinate Systems • GDI+ • ( 100 , 50 ) 을 원점으로 하는 좌표계 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  31. GDI+ Coordinate Systems • Mapping • World Transformation • Map World Coordinates to Page Coordinates • Graphics 객체에 의해서 정보가 유지됨. • TranslateTransform을 이용함. World Coordinate Page Coordinate World Transformmation graphics.TranslateTransform( 100.0f , 50.0f ); graphics.DrawLine( &myPen , 0 , 0 , 160 , 80 ); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  32. GDI+ Coordinate Systems • Mapping • Page Transformation • Map Page Coordinates to Device Coordinates • Graphics 객체에 의해서 정보가 유지됨. • SetPageUnit, GetPageUnit , SetPageScale, GetPageScale을 이용함. Page Coordinate Device Coordinate Page Transformmation graphics.SetPageUnit( UnitInch ); graphics.DrawLine( &myPen , 0 , 0 , 2, 1); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  33. GDI+ Coordinate Systems • Mapping • Page Transformation • Pen 의 굵기를 변경하지 않으려면 GetDpiX , GetDpiY 함수를 이용. • GetDpiX , GetDpiY : Pixel per Inch 를 얻어온다. • graphics.DrawLine( &myPen , 0 , 0 , 2, 1); in 96 dots per inch Pen myPen(Color(255,0,0,0) , 1 / graphics.GetDpiX() ); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  34. GDI+ Coordinate Systems • Mapping graphics.TranslateTransform( 2.0f , 0.5f ); graphics.SetPageUnit( UnitInch ); graphics.DrawLine( &myPen , 0 , 0 , 2, 1); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  35. GDI+ Global and Local Transformation • Matrix Class • Multiply , Invert , Rotate , RotateAt , Scale , Shear , OffsetX OffsetY • Clone, Equals 등 다양한 함수를 제공함. • Geometric Transformations Rotate Scale Translate 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  36. GDI+ Global and Local Transformation • Matrix Class // Create the path. GraphicsPath myGraphicsPath; Rect myRect(0, 0, 60, 60); myGraphicsPath.AddRectangle(myRect); // Fill the path on the new coordinate system. // No local transformation myGraphics.FillPath(&mySolidBrush1, &myGraphicsPath); // Transform the path. Matrix myPathMatrix; myPathMatrix.Scale(2, 1); myPathMatrix.Rotate(30, MatrixOrderAppend); myGraphicsPath.Transform(&myPathMatrix); myGraphics.FillPath(&mySolidBrush2, &myGraphicsPath); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  37. GDI+ Global and Local Transformation • Graphics class • MultiplyTransform , RotateTransform , • ScaleTransform , TranslateTransform graphics.DrawEllipse( &penBlue , 0 , 0 , 100 , 50 ); graphics.ScaleTransform( 1.0f , 0.5f ); graphics.TranslateTransform( 50.0f , 0.0f , MatrixOrderAppend ); graphics.RotateTransform( 30.0f , MatrixOrderAppend ); graphics.DrawEllipse( &penBlue , 0 , 0 , 100 , 50 ); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  38. GDI+ : Pen • Pen • DrawLine , DrawRectangle , DrawEllipse , DrawPolygon , DrawArc , DrawCurve , DrawBezier CClientDC dc(this); Graphics graphics( dc.GetSafeHdc() ); Pen penBlack( Color(255,0,0) , 5 ); Status state = graphics.DrawRectangle( &penBlack , 10 , 10 , 100 , 50 ); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  39. GDI+ : Pen • Pen • Width & Alignment • Status SetWidth ( REAL width ); • Status SetAlignment( PenAlignment penAlignment ); • PenAlignmentCenter = 0 • PenAlignmentInset = 1 Pen penBlack( Color(255,0,0,0) , 1 ); Pen penGreen( Color(255,0,255,0) , 10 ); Status state = penGreen.SetAlignment(PenAlignmentCenter); state = graphics.DrawLine( &penGreen, 10 , 100 , 100 , 50 ); state = graphics.DrawLine( &penBlack, 10 , 100, 100, 50 ); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  40. GDI+ : Pen • Pen • Width & Alignment Pen penBlack( Color(255,0,0,0) , 1 ); Pen penGreen( Color(255,0,255,0) , 10 ); Status state = penGreen.SetAlignment(PenAlignmentInset); state = graphics.DrawRectangle( &penGreen, 10 , 100 , 50 , 50 ); state = graphics.DrawRectangle( &penBlack, 10 , 100, 50, 50 ); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  41. GDI+ : Pen • Pen • Line Caps • SetStartCap , SetEndCap • Cap Type • LineCapFlat = 0 • LineCapSquare = 1 • LineCapRound = 2 • LineCapTriangle = 3 • LineCapNoAnchor = 0x10 • LineCapSquareAnchor = 0x11 • LineCapRoundAnchor = 0x12 • LineCapDiamondAnchor = 0x13 • LineCapArrowAnchor = 0x14 • LineCapCustom = 0xff 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  42. GDI+ : Pen • Pen • LineCapArrowAnchor Status state; Pen penBlack( Color(255,0,0,0) , 5 ); state = penBlack.SetStartCap( LineCapArrowAnchor ); state = penBlack.SetEndCap( LineCapRoundAnchor ); state = graphics.DrawLine( &penBlack , 20 , 175 , 300 , 175 ); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  43. GDI+ : Pen • Pen • LineCapCustom • Pen member function • Status SetCustomStartCap( const CustomLineCap * customCap ); • Status SetCustomEndCap( const CustomLineCap * customCap ); • Class CustomLineCap • 새로운 캡을 GraphicsPath 에 의해서 생성할 수 있음. • CustomLineCap( const GraphicsPath * fillPath, const GraphicsPath * strokePath, LineCap baseCap, REAL baseInset); • fillPath 와 strokePath 를 동시에 사용할 수 없음. • fillPath 와 strokePath 를 동시에 사용하면 fillPath 가 무시됨. 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  44. GDI+ : Pen • Pen • LineCapCustom • Class CustomLineCap Graphics graphics(hdc); Point points[3] = {Point(-15, -15), Point(0, 0), Point(15, -15)}; GraphicsPath capPath; capPath.AddLines(points, 3); CustomLineCap custCap(NULL, &capPath); custCap.SetStrokeCaps(LineCapTriangle, LineCapRound); Pen strokeCapPen(Color(255, 255, 0, 255), 5.0f); strokeCapPen.SetCustomEndCap(&custCap); graphics.DrawLine(&strokeCapPen, Point(100, 100), Point(300, 100)); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  45. GDI+ : Pen • Pen • LineCapCustom • Class CustomLineCap • Based Vertical Line LineCapTriangle LineCapRound -15 0 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  46. GDI+ : Pen • Pen • LineCapCustom • Class AdjustableArrowCap • 화살표 캡과 비슷한 캡을 생성할 수 있음. • AdjustableArrowCap( REAL height, REAL width, BOOL isFilled ); CustomLineCap BaseClass AdjustableArrowCap SubClass width height 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  47. GDI+ : Pen • Pen • LineCapCustom • Class AdjustableArrowCap Graphics graphics(hdc); AdjustableArrowCap myArrow(10, 10, true); Pen arrowPen(Color(255, 0, 0, 0)); arrowPen.SetCustomEndCap(&myArrow); graphics.DrawLine(&arrowPen, Point(0, 20), Point(100, 20)); AdjustableArrowCap otherArrow(myArrow.GetHeight(), 20, true); arrowPen.SetCustomEndCap(&otherArrow); graphics.DrawLine(&arrowPen, Point(0, 55), Point(100, 55)); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  48. GDI+ : Pen • Pen • Dash Line REAL dashValues[4] = {5, 2, 15, 4}; Pen blackPen(Color(255, 0, 0, 0), 5); blackPen.SetDashPattern(dashValues, 4); Status stat = graphics.DrawLine(&blackPen, Point(5, 5), Point(405, 5)); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  49. GDI+ : Pen • Pen • Join Line GraphicsPath path; Pen penJoin(Color(255, 0, 0, 255), 8); Status stat = path.StartFigure(); stat = path.AddLine(Point(50, 200), Point(100, 200)); stat = path.AddLine(Point(100, 200), Point(100, 250)); stat = penJoin.SetLineJoin(LineJoinBevel); stat = graphics.DrawPath(&penJoin, &path); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

  50. GDI+ : Pen • Pen • Texture Image를 이용하여 도형을 그릴 수 있음. Status state; Image image(L”Texture.jpg”); TextureBrush brTexture(&image) Pen penTexture(&brTexture , 10 ); state = graphics.DrawImage( &image , 0 , 0 , image.GetWidth(), image.GetHeight() ); state = graphics.DrawEllipse( &penTexture ,100,20,200,100); 한양대학교 컴퓨터공학과 컴퓨터 비젼 & 패턴인식 연구실 박현

More Related