==================================Outline====================================
그래픽
- 문자열 테이블
- GDI 오브젝트
- 스톡 오브젝트
- 펜
- 그리기 모드의 종류
- Ropmode
- 윈도우와 뷰포트
- 메모리 DC
----------------------------------------------------------------------------
엑셀레이터
단축키를 엑셀레이터라고 한다. 윈도우에서 사용하는 단축키의 개념은 다르기 때문에 엑셀레이터라고 부른다.
'Ctrl + A'를 누르면 단축키가 실행되어 다음의 화면이 뜬다.
문자열 테이블
윈도우즈에서는 문자열들도 리소스의 일종으로 취급된다. 리소스에 문자열을 정의해 두고 필요할 때마다 리소스에 문자열을 읽어와 사용한다. 문자열 리소스를 사용하는 예제를 만들어보자.
GDI 오브젝트
그래픽 출력에 사용되는 도구를 말한다.
GDI 오브젝트 | 핸들 타입 | 설명 | 디폴트 |
펜 | HPEN | 선을 그을 때 사용된다. | 검정색의 가는 선 |
브러시 | HBRUSH | 면을 채울 때 사용된다. | 흰색 |
폰트 | HFONT | 문자 출력에 사용되는 글꼴 | 시스템 글꼴 |
비트맵 | HBITMAP | 비트맵 이미지 | 선택되지 않음 |
팔레트 | HPALETTE | 팔레트 | 선택되지 않음 |
영역 | HRGN | 영역 | 선택되지 않음 |
스톡 오브젝트
윈도우즈가 기본적으로 제공해주는 GDI 오브젝트를 말한다.
GetStockObject함수를 사용하여 사용할 스톡 오브젝트를 선택하고 이것을 적용할 때는 SelectObject함수가 사용된다.
HGDIOBJ GetStockObject( int fnObject );
HGDIOBJ SelectObject( HDC hdc, HGDIOBJ hgdiobj );
fnObject | 설명 |
BLACK_BRUSH | 검정색 브러시 |
GRAY_BRUSH | 회색 브러시 |
NULL_BRUSH | 투명 브러시 |
WHITE_BRUSH | 흰색 브러시 |
DKGRAY_BRUSH | 짙은 회색 브러시 |
LTGRAY_BRUSH | 옅은 회색 브러시 |
BLACK_PEN | 검정색 펜 |
WHITE_PEN | 흰색 펜 |
NULL_PEN | 투명 펜 |
ANSI_FIXED_FONT | 고정폭 폰트 |
ANSI_VAR_FONT | 가변폭 폰트 |
DEFAULT_PALETTE | 시스템 팔레트 |
SelectObject 함수는 기능을 사용할 때 쓰인다. 중요한 것을 사용한 기능을 사용하고 나서는 기존의 기능으로 되돌려야 한다.
옅은 회색 브러시를 사용하여 사각형 안을 채워보자.
옅은 회색 브러시를 사용하여 사각형 안을 채워보자.
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,
WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HBRUSH MyBrush,OldBrush;
switch(iMessage) {
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
MyBrush=(HBRUSH)GetStockObject(GRAY_BRUSH);
OldBrush=(HBRUSH)SelectObject(hdc,MyBrush);
Rectangle(hdc,50,50,300,200);
SelectObject(hdc,OldBrush);
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
** SelectObject가 리턴하는 값은 새로 선택되는 오브젝트 이전에 선택되어 있던 같은 종류의 오브젝트 핸들이다.
//함수를 활용하여 프로그램을 작성하는 것이 응용프로그래밍이다.
펜
펜은 동적할당을 받기 때문에 사용하고 난 후에는 지워주어야 한다. CreatePen을 사용하여 펜을 만들어주어야 한다.
HPEN CreatePen( int fnPenStyle, int nWidth, COLORREF crColor );
fnPenStyle
| | | | |
PS_SOLID | PS_DASH | PS_DOT | PS_DASHDOT | PS_DASHDOTDOT |
nWidth
선의 두께를 의미한다.
crColor
선의 색상을 지정한다. COLORREF 형이므로 RGB 매크로 함수를 사용하면 된다.
브러쉬
도형의 내부를 채색하는 용도로 사용된다. 두 번째는 함수는 색상과 함께 무늬도 지정할 수 있다.
HBRUSH CreateSolidBrush( COLORREF crColor );
HBRUSH CreateHatchBrush( int fnStyle, COLORREF clrref );
값 | 설명 |
HS_BDIAGONAL | 좌하향 줄무늬 |
HS_CROSS | 바둑판 모양 |
HS_DIACROSS | 좌하향 및 우하향 줄무늬 |
HS_FDIAGONAL | 우하향 줄무늬 |
HS_HORIZONTAL | 수평선 |
HS_VERTICAL | 수직선 |
그리기 모드의 종류
int SetROP2( HDC hdc, int fnDrawMode );int GetROP2( HDC hdc );
첫번째 인수는 그리기 모드를 변경(또는 조사)하고자하는 DC의 핸들이며 SetROP2 함수의 두번째 인수에 다음과 같은 그리기 모드값을 넘겨준다.
그리기 모드 | 설명 |
R2_BLACK | 항상 검정색이다. |
R2_WHITE | 항상 흰색이다. |
R2_NOP | 아무런 그리기도 하지 않는다. |
R2_NOT | 원래의 그림을 반전시킨다. |
R2_COPYPEN | 원래의 그림을 덮어버리고 새 그림을 그린다. |
R2_NOTCOPYPEN | 새 그림을 반전시켜 그린다. |
R2_MERGEPEN | OR연산으로 두 그림을 합친다. |
R2_MASKPEN | AND연산으로 겹치는 부분만 그린다. |
R2_XORPEN | XOR연산으로 겹치는 부분만 반전시킨다. |
Ropmode
반전모드를 사용하여 예제를 만들어 본다.
SetROP2 호출문을 삭제하면 선이 그려지는 모습이 표시된다.
윈도우와 뷰포트
원점을 변경 시킬수 있는 함수는 아래와 같다.
BOOL SetViewportOrgEx( HDC hdc, int X, int Y, LPPOINT lpPoint );
BOOL SetWindowOrgEx( HDC hdc, int X, int Y, LPPOINT lpPoint );
메모리 DC
비트맵 파일은 용량이 크기 때문에 메모리에 비트맵 파일을 올린 후 화면에 출력하면 비트맵 파일을 화면에 출력할 때보다 속도를 줄일 수 있다.
메모리 DC를 만들 때는 다음 함수가 사용된다.
HDC CreateCompatibleDC( HDC hdc );
메모리 DC를 만든 후에는 비트맵을 읽어온 후 이 비트맵을 메모리 DC에 선택해 준다. 선택하는 방법은 여타의 GDI 오브젝트와 마찬가지로 SelectObject 함수를 사용하며 비트맵을 읽어올 때는 LoadBitmap 함수를 사용한다.
HBITMAP LoadBitmap( HINSTANCE hInstance, LPCTSTR lpBitmapName );
BitBlt
BitBlt 함수는 DC간의 영역끼리 고속 복사를 수행한다. 메모리 DC의 표면에 그려져 있는 비트맵을 화면 DC로 복사함으로써 비트맵을 화면으로 출력한다. 원형은 다음과 같다.
BOOL BitBlt( HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop );
값 | 설명 |
BLACKNESS | 대상영역을 검정색으로 가득 채운다. |
DSTINVERT | 화면을 반전시킨다. |
MERGECOPY | 소스 비트맵과 대상 화면을 AND 연산한다. |
MERGEPAINT | 소스 비트맵과 대상 화면을 OR 연산한다. |
SRCCOPY | 소스 영역을 대상 영역에 복사한다. |
WHITENESS | 대상영역을 흰색으로 채운다. |
StretchBlt
BOOL StretchBlt( HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop );
인자가 총 11개 이다. 앞에 인자 5개는 화면, 그 다음 5개는 비트맵
// visual studio에서 들려쓰기 줄 맞춤 단축키 Ctrl + K + F
졸라맨이 움직이도록 하는 코드를 만들어보자.
1. 경계검사
2. 창모양 고정(스크롤 바 제거) -
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151118 임현수 업무일지 WIN32API #5 (4) | 2015.11.18 |
---|---|
20151117-주재민-api (4) | 2015.11.18 |
김태현 WinAPI 4일차 단축키 만들기 문자열 테이블 GDI오브젝트 (5) | 2015.11.18 |
20151117 수업 / API_4 남수진 (6) | 2015.11.18 |
2015-11-17 Win32 API 개인업무일지 - 천정호 (6) | 2015.11.18 |
2015.11.17_개인업무일지_[Win32API #4]_이량경 (6) | 2015.11.18 |
20151117_안향진_API_4 (6) | 2015.11.18 |
20151117 임현수 업무일지 WIN32API #4 (6) | 2015.11.18 |