'API Reference'에 해당되는 글 75건

  1. 2007.10.17 StretchBlt
  2. 2007.10.17 BitBlt
  3. 2007.10.17 LoadBitmap
  4. 2007.10.17 CreateCompatibleDC
  5. 2007.10.17 SetROP2, GetROP2( 그리기 모드 )
  6. 2007.10.17 NULL_BRUSH, NULL_PEN( 투명 오브젝트 )
  7. 2007.10.17 CreateSolidBrush
  8. 2007.10.17 DeleteObject
  9. 2007.10.17 CreatePen
  10. 2007.10.17 COLORREF

StretchBlt

API Reference 2007. 10. 17. 10:55

BOOL StretchBlt( HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop );


DC 간에 비트맵을 전송하며 확대 및 축소가 가능하다.



hdcDest

복사 대상 DC


nXOriginDest, nYOriginDest, nWidthDest, nHeightDest

복사 대상의 XYWH


hdcSrc

복사원의 DC


nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc

복사원의 XYWH


dwRop

래스터 연산 방법을 지정



복사 대상과 복사원이 모두 폭과 높이를 가지고 있다.

복사원의 지정한 영역이 복사 대상의 지정한 영역의 크기만큼 확대되어 출력되며 복사대상의 영역이 복사원보다 더 좁다면 축소가 발생한다.

Posted by 명혀니
,

BitBlt

API Reference 2007. 10. 17. 10:55

BOOL BitBlt( HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYsrc, DWORD dwRop );


DC 간의 영역끼리 고속 복사를 수행한다.

메모리 DC 의 표면에 그려져 있는 비트맵을 화면 DC 로 복사함으로써 비트맵을 화면으로 출력한다.



hdcDest

복사 대상 DC


nXDest, nYDest, nWidth, nHeight

복사 대상의 XYWH


hdcSrc

복사원 DC


nXSrc, nYSrc

복사원의 좌표이되 BitBlt 은 비트맵의 크기를 변경하지 않고 복사를 수행하므로 폭과 높이는 복사 대상에서 한 번만 지정하고 복사원에서는 이 값을 그대로 사용한다.


dwRop

래스터 연산 방법을 지정하며 SRCCOPY 를 쓰면 복사원을 그대로 복사 대상으로 복사한다.

dwRop 에 다른 값을 사용하면 기존 그림을 겹친다거나 반전시킬 수도 있다.


BLACKNESS

대상영역을 검정색으로 가득 채운다.


DSTINVERT

화면을 반전시킨다.


MERGECOPY

소스 비트맵과 대상 화면을 AND 연산한다.


MERGEPAINT

소스 비트맵과 대상 화면을 OR 연산한다.


SRCCOPY

소스 영역을 대상 영역에 복사한다.


WHITENESS

대상영역을 흰색으로 채운다.

Posted by 명혀니
,

LoadBitmap

API Reference 2007. 10. 17. 10:54

HBITMAP LoadBitmap( HINSTANCE hInstance, LPCTSTR lpBitmapName );


비트맵을 읽어오는 함수



hInstance

비트맵 리소스를 가진 인스턴스의 핸들


lpBitmapName

비트맵 리소스의 이름



읽어온 비트맵을 SelectObject 함수로 메모리 DC 에 선택하면 메모리 DC 의 표면에는 리소스에서 읽어온 비트맵이 그려진다.



비트맵 출력이 끝난 후에는 비트맵 자체와 메모리 DC 를 해제해야 한다.

비트맵은 GDI 오브젝트이므로 DeleteObject 함수로 지우면 되고 메모리 DC 는 DeleteDC 라는 별도의 함수를 사용하여 지운다.


비트맵을 지우기 전에 선택 해제를 먼저 해야 하므로 OldBitmap 변수가 필요하다.

Posted by 명혀니
,

CreateCompatibleDC

API Reference 2007. 10. 17. 10:54

비트맵은 화면으로 직접 출력할 수 없으며 반드시 메모리 DC 에 미리 준비해 놓고 사용해야 한다.


메모리 DC 란 화면 DC 와 동일한 특성을 가지며 그 내부에 출력 표면을 가진 메모리 영역이다. 메모리에 있기는 하지만 화면 DC 에서 사용할 수 있는 모든 출력을 메모리 DC 에서도 할 수 있다.


비트맵도 일종의 GDI 오브젝트이지만 화면 DC 에는 선택할 수 없으며 메모리 DC 만이 비트맵을 선택할 수 있다. 그래서 메모리 DC 에 먼저 그림을 그린 후 사용자 눈에 그려지는 과정은 보여주지 않고 그 결과만 화면으로 고속 복사하는 방법( 더블 버퍼링 )을 많이 사용한다.



HDC CreateCompatibleDC( HDC hdc );


메모리 DC 를 만드는 함수

인수로 화면 DC 의 핸들을 주면 이 화면 DC 와 동일한 특성을 가지는( = 호환되는 ) DC 를 메모리에 만들어 그 핸들을 리턴한다. 호환되지 않는 DC 끼리는 정보를 공유할 수 없기 때문에 화면 DC 와 호환되는 메모리 DC 를 만들어야 한다.

Posted by 명혀니
,

int SetROP2( HDC hdc, int fnDrawMode );


그리기 모드를 변경하는 함수



int GetROP2( HDC hdc );


현재 설정된 그리기 모드를 구하는 함수



hdc

그리기 모드를 변경( 또는 조사 )하고자 하는 DC 의 핸들


fnDrawMode

그리기 모드값


R2_BLACK

항상 검정색이다.


R2_WHITE

항상 흰색이다.


R2_NOP

아무런 그리기도 하지 않는다.


R2_NOT

원래의 그림을 반전시킨다.


R2_COPYPEN

원래의 그림을 덮어버리고 새 그림을 그린다.


R2_NOTCOPYPEN

새 그림을 반전시켜 그린다.


R2_NOTXORPEN

XOR 한 결과의 반대값을 써 넣는다.


R2_MERGEPEN

OR 연산으로 두 그림을 합친다.


R2_MASKPEN

AND 연산으로 겹치는 부분만 그린다.


R2_XORPEN

XOR 연산으로 겹치는 부분만 반전시킨다.



윈도우즈에서 사용하는 디폴트 그리기 모드는 R2_COPYPEN 모드이다.

Posted by 명혀니
,
GDI 의 그리기 함수들은 항상 선택된 오브젝트를 무조건 사용하도록 되어 있으며 테두리만 따로 그리는 함수, 안만 채우는 함수가 별도로 제공되지 않는다. 그래서 둘 중 하나만 그리고 싶을 때는 그리고 싶지 않는 부분에 대해 투명 오브젝트를 선택해 놓고 그려야 한다.
Posted by 명혀니
,

CreateSolidBrush

API Reference 2007. 10. 17. 10:53

HBRUSH CreateSolidBrush( COLORREF crColor );


단색의 브러시만을 만들 수 있으며 브러시의 색상만 인수로 전달한다.



HBRUSH CreateHatchBrush( int fnStyle, COLORREF clrref );


색상뿐만 아니라 무늬도 같이 지정할 수 있다.


HS_BDIAGONAL

좌하향 줄무늬


HS_CROSS

바둑판 모양


HS_DIAGCROSS

좌하향 및 우하향 줄무늬


HS_FDIAGONAL

우하향 줄무늬


HS_HORIZONTAL

수평선


HS_VERTICAL

수직선

Posted by 명혀니
,

DeleteObject

API Reference 2007. 10. 17. 10:51

BOOL DeleteObject( HGDIOBJ hObject );


GDI 오브젝트를 삭제하는 함수



메모리를 할당한 후 반드시 해제해야 하는 것과 마찬가지로 GDI 오브젝트도 사용이 끝나면 해제하는 것이 원칙이다. 만약 해제하지 않으면 시스템의 메모리와 리소스를 갉아먹게 될 것이다.


삭제하고자 하는 GDI 오브젝트의 핸들만 인수로 넘겨주면 된다.

단, 이때 주의할 것은 DC 에 현재 선택되어 있는 GDI 오브젝트는 삭제할 수 없다는 점인데 이는 현재 사용되고 있는 객체를 함부로 삭제하도록 내버려 둘 수 없기 때문에 생긴 일종의 안전 규정이다.


그래서 삭제하기 전에 DC 에 선택된 객체를 선택 해제해야 하는데 가장 간단한 방법은 같은 종류의 다른 GDI 오브젝트를 선택하는 것이다.


이런 이유로 OldPen 이라는 핸들을 선언하고 이 핸들에 MyPen 이 선택되기 전의 팬 핸들을 저장해 두고 MyPen 을 삭제하기 전에 OldPen 을 다시 선택하는 것이다.


SelectObject( hdc, OldPen );

DeleteObject( MyPen );


   ==


DeleteObject( SelectObject( hdc, OldPen ) );

Posted by 명혀니
,

CreatePen

API Reference 2007. 10. 17. 10:51

HPEN CreatePen( int fnPenStyle, int nWidth, COLORREF crColor );


펜을 만드는 함수

새로 만든 펜의 핸들이 리턴되는데 이 값을 잘 보관해 두어야 만들어진 펜을 사용할 수 있으며 다 사용한 후 파괴할 수도 있다.



fnPenStyle

그려질 선의 모양을 지정

선의 모양은 굵기가 1 일 때만 효과가 있으며 굵기가 2 이상이면 무조건 실선으로 그려진다.


PS_SOLIE, PS_DASH, PS_DOT, PS_DASHDOT, PS_DASHDOTDOT 등의 모양이 있다.


nWidth

선의 폭을 지정

이 값이 0 일 경우는 맵핑 모드에 상관없이 무조건 1 픽셀 두께의 선이 만들어진다.


crColor

선의 색상을 지정

COLORREF 형이므로 RGB 매크로 함수를 사용하여 인자를 전달한다.

Posted by 명혀니
,

COLORREF

API Reference 2007. 10. 17. 10:51

윈도우즈에서는 색상값을 표현하기 위해 COLORREF 라는 데이터형을 사용한다.


#define DWORD COLORREF


부호없는 32비트 크기의 정수형이며 8비트씩 빨간색, 초록색, 파란색의 농도를 나타내며 상위 8비트는 사용되지 않는다.


RGB 매크로 함수를 사용하여 색상을 조합하며 이 매크로는 다음과 같이 정의되어 있다.


#define RGB( r, g, b ) ...



COLORREF 형 변수에서 각 생상 요소의 농도를 분리 할때는

GetRValue, GetGValue, GetBValue 매크로 함수를 사용한다.


#define GetRValue( rgb )    ( ( BYTE )( rgb ) )

#define GetGValue( rgb )    ( ( BYTE )( ( ( WORD )( rgb ) ) >> 8 )

#define GetBValue( rgb )    ( ( BYTE )( ( rgb ) >> 16 ) )

Posted by 명혀니
,