프로그래밍/WindowsAPI 스피비 2011. 5. 13. 12:22
1.StretchBlt 함수 다음 함수도 DC 간에 비트맵을 전송하는데 확대 및 축소가 가능하다는 점이 다르다. BOOL StretchBlt ( HDC hdcDest , int nXOriginDest , int nYOriginDest , int nWidthDest , int nHeightDest, HDC hdcSrc , int nXOriginSrc , int nYOriginSrc , int nWidthSrc , int nHeightSrc , DWORD dwRop ); 인수를 보면 복사 대상과 복사원이 모두 폭과 높이를 가지고 있다. 복사원의 지정한 영역이 복사대상의 지정한 영역의 크기만큼 확대되어 출력되며 복사대상의 영역이 복사원보다 더 좁다면 축소가 발생할 것이다. 이에 비해 BitBlt 은 대상에 대..
프로그래밍/WindowsAPI 스피비 2011. 5. 13. 11:54
메모리 DC & 비트맵을 메모리 DC 에 선택 ( 로드 ) 윈도우즈는 비트맵을 곧바로 화면 DC 로 출력하는 함수는 제공하지 않는다. 비트맵을 출력하는 함수라면 아마 다음과 같은 형태를 상상할 수 있을 것이다. OutBitmap ( hdc , x , y , "비트맵 열기" ); (존재하지 않는 함수) 이런 함수가 있으면 매우 좋겠지만 , 안타깝게도 이런 함수는 API 가 직접 지원하지 않는다. 왜냐하면 비트맵은 크기가 큰 데이터 덩어리 이며 , 따라서 출력 속도가 형편없이 느리고 화면으로 곧바로 출력할 경우 여러가지 꼴사나운 현상이 발생할 수 있기 때문이다. 마치 파일에서 한 바이트 단위로 읽어 들이는 함수가 없는 것과 같은 이유인데, 파일을 읽고 싶으면 반드시 열기 , 읽기 , 닫기 의 과정을 거쳐야 ..
프로그래밍/WindowsAPI 스피비 2011. 5. 13. 11:41
복잡한 그림을 출력해야 할 경우라면 , 미리 그려진 비트맵을 사용한다. 비트맵을 읽어와 화면으로 출력하는 프로그램을 만들어 본다. 리소스를 임포트하는 생소한 작업을 해야 하므로 단계를 따라 프로젝트를 만들어야 한다. 이왕 비트맵 출력하는거 상콤한 아이유를 출력해보자 +_+ (IU.BMP) 기본소스를 코딩하고 ,사용할 비트맵을 (ex IU.bmp ) 프로젝트 디렉토리에 복사해 둔다. 비트맵 리소스를 만든다. Bitmap.rc 리소스 스크립트를 추가하고 , 팝업 메뉴에서 리소스 추가 항복을 선택하여 나타난 대화상자에서 [ 리소스 타입 ] 을 선택하면 다음 그림이 나온다 Bitmap 을 선택하고 Import 를 선택하고 그림을 선택해서 불러온다. New 를 선택하면 새로 만드는 것 ( 그리는 것 ) 이므로 그..
프로그래밍/WindowsAPI 스피비 2011. 5. 13. 11:23
1.흑백에서의 그리기모드 화면에 무엇인가가 그려져 있는 상황에서 그 위에 다른 무엇인가를 출력하면 원래 그려져 있던 그림은 새로 그려지는 그림에 덮여 지워진다. 디스플레이 표면은 2차원적인 평면이므로 새로운 그림이 그려지면 그 아래에 있던 그림은 지워질 수 밖에 없다. 화면에 그려진 그림은 비디오 램에 저장되는데 , 램이 동시에 두 개의 값을 기억할 수는 없으므로 타원이 있던 자리에 사각형을 그리면 , 타원은 덮여져 사라지는 것이 당연하다. 그러나 이런 당연한 현상도 그리기 모드를 변경하면 달라진다. 그리기 모드란 도형이 그려질 때 원래 그려져 있던 그림과 , 새로 그려지는 그림과의 관계를 정의하는 것이다. 그리기 모드를 개념적으로 이해하기 위해 아주 단순한 흑백의 그래픽 환경을 가정해 본다. 무엇인가를..
프로그래밍/WindowsAPI 스피비 2011. 5. 13. 11:12
1.색상 윈도우즈 에서는 색상값을 표현하기 위해 COLORREF 라는 데이터형을 사용한다. typedef DWORD COLORREF; COLORREF 형은 부호없는 32비트 크기의 정수형 8비트씩 빨간색 , 초록색 , 파란색의 농도를 나타내며 상위 8비트는 사용되지 않는다. 각 색상 요소는 1바이트( 8비트 )의 크기를 가지므로 , 0~255 까지의 농도를 표현할 수 있으며 이 색상요소의 혼합에 의해 색상 하나가 만들어 진다. COLORREF 형은 32비트 정수일 뿐이므로 16진수로 직접 표현할 수 있다. 예를 들어 0은 검정색 이 되며 0xff0000 는 빨간색 , 0x0000ff 는 파란색 이 된다. 하지만 , 통상 RGB 매크로 함수를 사용한다. #define RGB(r,g,b) ((COLORREF..