달력

10

« 2018/10 »

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  

'GetStockObject'에 해당되는 글 1

  1. 2010.04.22 API-GdiObject
2010.04.22 22:29

API-GdiObject 프로그래밍/API2010.04.22 22:29








먼저 GDI 오브젝트와, 스톡 오브젝트에 대해서 차이를 알아야 한다.
GDI 오브젝트는 출력에 사용되는 도구인데, 펜, 브로시, 비트맵, 폰트 등등... 이라고 한다.

기본적으로 BeginPaint나 GetDC를 하게 되면 디폴트로 몇가지 만들어 지는데,
 GDI 오브젝트  핸들 타입   설명   디폴트 
 팬  HPEN  선을 그을 때 사용  검정색의 가는 실선
 브러시  HBRUSH  면을 채울 때 사용  흰색
 폰트  HFONT  문자 출력에 사용 되는 글꼴  시스템 글꼴
 비트맵  HBITMAP  비트맵 이미지  선택 되지 않음
 팔레트  HPALETTE  팔레트  선택 되지 않음
 리전  HRGN  화면상의 영역  선택 되지 않음

이 처럼 존재하고, 이 기본 출력을 변경하고 싶을 때에,
GDI 오브젝트를 만들고 선택한다.

그리고 스톡 오브젝트는
윈도우즈가 기본적으로 제공하는 GDI 오브젝트를 말한다.
운영체제가 부팅시 만들어 놓기 때문에, 언제든지 사용가능하고, 파괴해 주지 않아도 된다는 장점이 있다.
 fnObject  설명
 BLACK_BRUSH  검정색 브러시
 GRAY_BRUSH  회색 브러시
 NULL_BRUSH  투명 브러시
 WHITE_BRUSH  흰색 브러시
 DKGRAY_BRUSH  짙은 회색 브러시
 LTGRAY_BRUSH  옅은 회색 브러시
 DC_BRUSH  색상 브러시. SetDCBrushColor 함수로 설정
 BLACK_PEN  검정색 펜
 WHITE_PEN  흰색 펜
 NULL_PEN  투명 펜
 DC_PEN  색상 펜. SetDCPenColor 함수로 설정
 ANSI_FIXED_FONT  고정폭 폰트
 ANSI_VAR_FONT  가변폭 폰트
 DEFAULT_PALETTE  시스템 팔레트

참 많네--;

여튼, 소스를 보면,

MyPen이나 OldPen(브러시도 마찬가지)를 사용해서 SelectObject를 사용할때도 있고 그렇지 않을 때도 있다.
이 부분에 대해서 좀 애매하기도 한데,

□ 의 설정값이 있다고 치자.
■ 의 설정값으로 변경을 하게 되면

1. ■ -> □
2.         ■ -> □
라고 말 할 수 있겠다.

새로운 값이 들어 오면 이전 값을 밀어 내는데,
그 값을 OldPen, Brush에서 가지고 가는 것이다.

그리고 다시 값을 복원 하게 될때
1. □ -> ■
2.         □ -> ■
식으로 복원 하는 것이다.( 그래서 복원시에는 구지 return 값을 저장하지 않은 것이다. )

또, 스톡 오브젝트(GetStockObject)를 사용했을 경우에는 구지 delete를 해주지 않은 것도 그 이유에서 이다.
물론 나중에 다시 GdiObject를 사용 하였기 때문에 delete를 해주고 있기는 하다.
함수를 잘 보면 GetStockObject가 있고, CreatePen, CreateHatchBrush가 있는데 어떤 상황에서 DeleteObject를 해주는 지는 감이 올 것이다.

// 실행 결과

추가로 DeleteObject를 해주지 않았을 경우에 대해서 어떤 일이 벌어 질 수 있는가,
에 대한 예제가 있지만,
구지 올리기 보단,,,,
"쓰고나면 다시 상태를 돌려주자"
"쓰고나면 지우자! 무조건!!"

으로 기억하자

또한, 투명 펜이나 투명 브러시의 경우엔 외곽선을 그리지 않거나, 외곽선만을 그리고 싶을때 둘중 하나의 값을 NULL로 해주는 식으로 기억하면 될 것 같다.

'프로그래밍 > API' 카테고리의 다른 글

API-BitMap  (0) 2010.04.24
API-RopMode  (0) 2010.04.24
API-GdiObject  (0) 2010.04.22
API-resource(3)  (0) 2010.04.21
API-resource(2)  (0) 2010.04.21
API-resource(1)  (0) 2010.04.21
Posted by 안식의후크