- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[API/MFC] 그래픽 - DC ( Device Context ) 본문
[GDI 오브젝트]
GDI(Graphic Device Interface)란 그래픽에 출력에 사용되는 도구를 말하며 펜. 브러시. 비트맵. 폰트 모두 GDI 오브젝트이다.
펜 HPEN 선을 그을때 사용한다.
브러시 HBRUSH 면을 채울때 사용한다.
폰트 HFONT 문자 출력에 사용되는 글꼴.
비트맵 HBITMAP 비트맵 이미지
팔레트 HPALETTE 팔레트
영역 HRGN 영역
[스톡 오브젝트]
StockObject 는 윈도우가 기본적으로 제공해주는 GDI 오브젝트를 말한다.
HDGIOJ GetStockObject( int fnObject ) ;
* 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_VAR_FONT 가변폭 폰트
DEFAULT_PALETTE 시스템 팔레트
LRESULT CALLBACK WndProc( HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
HBRUSH MyBrush, OldBrush;
RECT rt = { 100, 100, 200, 200};
switch( message )
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
MyBrush = (HBRUSH)GetStockObject(GRAY_BRUSH);
OldBrush = (HBRUSH)SelectObject(hdc, MyBrush); // OldBrush 에 MyBrsuh 값을 저장한다.
Rectangle(hdc, rt.left, rt.top, rt.right, rt.bottom);
SelectObject(hdc, OldBrush); // 핸들의 복구를 위해 별도의 변수에 저장을 한다.
EndPaint(hWnd, &ps);
return 0;
.......................
}
return 0 ;
}
* 실행모습
펜이나 다른것에서도 위에서한것과 같은 방식이 적용이 된다. 다른변수에 저장을 한뒤 SelectObject를 하게 된다.
[색상]
윈도우즈에서는 색상값을 표현하기 위해 COLORREF 라는 데이터형을 사용한다.
typedef DWORD COLORREF ;
RGB를 이용하게 되는데.. RGB(255, 255, 255) 는 흰색이고. RGB(0, 0, 0) 은 검은색이다.
R = Red RGB(255, 0, 0)
G = Green RGB(0, 255, 0)
B = Blue RGB(0, 0, 255)
* 색상변수의 색을 분리해내는 함수
COLORREF 변수로 값을 넘겼을 경우에 가끔시 이 3개의 색을 빼내게 되는 경우가 있다.
void SetColor(COLORREF color ) ; // SetColor 라는 함수가 있다고 하자...
위에 있는 SetColor 의 함수를 어디선가 SetColor(RGB(255, 0, 0)) ; 으로 호출을 했다.. SetColor 에서 이 값을 빼낼려면...
void SetColor(COLORREF color )
{
INT R, G, B ;
R = GetRValue(color) ; // Red 색상값을 빼낸다.
G = GetGValue(color) ; // Green 색상값을 빼낸다.
B = GetBValue(color) ; // Blue 색상값을 빼닌다.
..........................
}
[펜]
HPEN CreatePen(
int fnPenStyle, // 펜의 스타일
int nWidth, // 펜의 폭.
COLORREF crColor // 펜의 색상 RGB...
) ;
* fnPenSyle
PS_SOLID 실선
PS_DASH 점선
PS_DOT 점선( 위에보다 간격이 적음 )
PS_DASHDOT, PS_DASHDOTDOT 실선과 점선이 합침. (앞에건 하나. 뒤에건 2개...)
LRESULT CALLBACK WndProc( HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
HPEN MyPen, OldPen;
RECT rt = {100, 100, 200, 200};
switch( message )
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
MyPen = CreatePen(PS_DOT, 1, RGB(0,0,255)); // 폭이 1 인 파란색 점선으로 셋팅...
OldPen = (HPEN)SelectObject(hdc, MyPen);
Rectangle(hdc, rt.left, rt.top, rt.right, rt.bottom);
SelectObject(hdc, OldPen);
DeleteObject(MyPen); // GDI 오브젝트는 사용하게 되면 반드시 지워줘야 된다. 메모리를 사용하기 때문...
EndPaint(hWnd, &ps);
return 0;
...............
}
return 0 ;
}
* 실행모습
[브러시]
브러시의 경우 두가지의 방법이 있다. 단순히 색칠만 하는 브러쉬와 모양을 변경해주는 브러시가 있다.
HBRUSH CreateSolidBrush(COLORREF crColor); // 단색 브러시
HBRUSH CreateHatchBrush(int fnStyle, COLORREF clrref); // 색 and 무늬
*fnStyle
HS_BDIAGONAL 좌하향 줄무늬
HS_CROSS 바둑판 모양
HS_DIAGCROSS 좌하향 및 우햐향 줄무늬
HS_FDIAGONAL 우하향 줄무늬
HS_HORIZONTAL 수평선
HS_VERTICAL 수직선
LRESULT CALLBACK WndProc( HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
HBRUSH MyBrush, OldBrush;
RECT rt = {100, 100, 200, 200};
switch( message )
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
MyBrush = CreateHatchBrush(HS_BDIAGONAL, RGB(255, 0, 0) ); // 좌하향 줄무늬 빨간색 브러시
OldBrush = (HBRUSH)SelectObject(hdc, MyBrush);
Rectangle(hdc, rt.left, rt.top, rt.right, rt.bottom);
SelectObject(hdc, OldBrush);
DeleteObject(MyBrush);
EndPaint(hWnd, &ps);
return 0;
..........
}
return 0 ;
}
* 실행모습
'★─Programing > ☆─API | MFC' 카테고리의 다른 글
[API/MFC] Win32 API 입문 강좌 (0) | 2009.02.25 |
---|---|
[API/MFC] GDI와 DC (0) | 2008.05.16 |
[API/MFC] Sndplaysound 함수 (0) | 2008.05.15 |
[API/MFC] HINSTANCE & HWND의 차이 (0) | 2008.05.15 |
[API/MFC] LPCTSTR, LPTSTR 의 차이점 (0) | 2008.03.17 |