drawtext는 사각 영역 안에서 출력한다.
dc안에 기본값으로 폰트 10, 검은색 등을 정의되어있다.
setTextColor 등으로 바꾸거나 할 수 있다...
// 기본은 바탕색에, 검정색인데 dc안의 속성을 바꿀수 있다.
// 이런 정보들을 가지고있다.
매핑모드
기본은 픽셀 단위 mm_text 이다.
수학적으로 할때는 내려가면 +니깐 맞지 않아서, 포맺을 바꿔야 한다
그래서 수학적으로 모델링 한것이 나머지 것들이다.
픽셀단위는 화면 해상도에 따라 크기가 달라지는 문제도 가능.
모드 - 단위 => 다 다르다.
MM단위는 해상도 상관없이 출력이 일정하다.
// 사용자가 정의를 할 수 있다.
// 단위는 퍼센트이다.
MM_ISOTROPIC
MM_ANISOTROPIC
좌표 변환
윈도우 출력은 스크린 좌표, 무엇을 출력할때는 클라이언트 좌표
무슨 좌표인지 알아야한다.
// 논리 좌표이다. (출력할때 사용하는 것)
dc.Ellipse(0, 0, 300, 300);
dc.Rectangle(50, 50, 250, 250);
운영체제가 이걸 받아서 물리좌표로 장치좌표로 변환한다.
▷
장치(픽셀-무조건) DPtoLP() 논리좌표
LPtoDP()
◁
스크린 좌표
ClientToScreen() ▲
▽ ScreenToClient()
클라이언트
속성함수.
dc안에 속성값으로 존재한다.
초기값 외로 바꿀때 함수를 이용해서 변형한다.
그리기 모드 - 기본은 나중에 출력된것으로 덮어씀.
기본값이 무엇인지 시험에....
그리기 모드
GDI 객체
- gdi에서 출력할때 사용하는 도구, 단일값이 아니라 여러개 값이 모여있다.
(CDC::SelectObject() 함수 사용).
bursh - 도형안에 색깔 pen - 윤곽선 이런식.....
사용 방법
펜 생성방법 - > 윤곽선을 그리는데 사용이 되어진다.
// 방법 1
CPen pen(PS_SOLID, 2, RGB(255, 0, 0)); // 폭이 2인 빨간색 펜
// 방법 2
CPen pen;
pen.CreatePen(PS_SOLID, 2, RGB (255, 0, 0)); // 폭이 2인 빨간색 펜
만든것을 반영해야 하는데 반영하는 법은?
예제 1
CPaintDC dc(this);
CPen pen(PS_SOLID, 1, RGB(0, 0, 255));
// 기존 팬을 반환해준다, 나중에 혹시 복구하기 위해서.
CPen *pOldPen = dc.SelectObject(&pen);
dc.Rectangle(100, 100, 200, 200);
dc.SelectObject(pOldPen);
예제2
CPaintDC dc(this);
CPen pen(PS_SOLID, 1, RGB(0, 0, 255));
dc.SelectObject(&pen);
dc.Rectangle(100, 100, 200, 200);
기본은 시스템폰트이다.
solid가 가장 쉽다. 바탕색만 지정하면 가능하다.
해치는 교차선을 나타낸다.
폰트
생성자
CFont font;
font.CreateFont(...);
또는 font.CreateFontIndirect(...);
또는 font.CreatePointFont(...);
또는 font.CreatePointFontIndirect(...);
사용 예
CPaintDC dc(this);
CFont font;
// 400은 40pt 정도
font.CreatePointFont(400, "Arial");
dc.SelectObject(&font);
dc.TextOut(10, 10, CString("Hello"));
int CBitmap::GetBitmap(BITMAP* pBitMap);
// 대문자는 구조체이다.
// 비트맵 이미지에 대한 구조체이다.
typedef struct tagBITMAP {
int bmType;
int bmWidth; // 비트맵의 폭(픽셀)
int bmHeight; // 비트맵의 높이(픽셀)
int bmWidthBytes;
BYTE bmPlanes;
BYTE bmBitsPixel;
LPVOID bmBits;
} BITMAP;
CBitmap bitmap;
// 이미지 가져옴
bitmap.LoadBitmap(IDB_BITMAP1);
BITMAP bmpinfo; // 구조체.
// 비트맵에 대한 크기를
bitmap.GetBitmap(&bmpinfo);
TRACE("가로 = %d, 세로 = %d\n",
bmpinfo.bmWidth, bmpinfo.bmHeight);
n 비트맵 출력 절차
// 화면dc와 맞추어 준다.
① CDC::CreateCompatibleDC() 함수를 이용하여 메모리 디바이스 컨텍스트를 만든다.
② CDC::SelectObject() 함수를 이용하여 비트맵을 메모리 디바이스 컨텍스트에 선택한다.
// 화면 dc에 출력을 하는것이다.
③ CDC::BitBlt()나 CDC::StretchBlt() 함수를 이용하여 화면에 출력한다.
BOOL CDC::BitBlt(int x, int y, int nWidth, int nHeight,
CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1); // 비트맵을불러옴.
// 이미지정보를가져오기위해서구조체등록
BITMAP bmpinfo;
// 정보를가져온다. - 이미지크기.
bitmap.GetBitmap(&bmpinfo);
// 메모리dc를등록하고
CDC dcmem;
// 연결을시켜준다.
dcmem.CreateCompatibleDC(&dc);
// 먼저메모리dc에넣어준다.
dcmem.SelectObject(&bitmap);
/* 속도문제때문에이렇게한다. */
// bmpinfo.bmWidth/2 이렇게하면그림이짤린다.
dc.BitBlt(10, 10, bmpinfo.bmWidth, bmpinfo.bmHeight/2,
&dcmem, 0, 0, SRCCOPY);
// 이미지크기를조정할대Stret를쓴다.
// bmWidth*4, bmpinfo.bmHeight*6 는이미지크기크게.
// &dcmem, 0, 0, bmpinfo.bmWidth, bmpinfo.bmHeight 원본에대한정보를
dc.StretchBlt(100, 100, bmpinfo.bmWidth*4, bmpinfo.bmHeight*6,
&dcmem, 0, 0, bmpinfo.bmWidth, bmpinfo.bmHeight, SRCCOPY);