본문 바로가기

API

(16)
컨트롤 컨트롤이란?컨트롤이란 사용자와의 인터페이스를 이루는 도구컨트롤은 제어 조절이라는 뜻인데 이 말 뜻대로 컨트롤은 사용자가 프로그램을 제어하는 수단컨트롤도 하나의 윈도우이다. 화면상의 일정한 영역을 차지하며 자신의 고유 메시지를 처리할 수 있는 능력을 가지고 있다. 그렇다고 해서 메모장이나 탐색기같은 진짜 윈도우처럼 타이틀 바나 경계선을 가지고 독립적으로 사용되는 것은 아니며 보통 대화상자의 차일드 윈도우로 존재 버튼사용 예)//< 버튼m_hwnd[ CTL_BTN_01 ] = CreateWindow( TEXT("button"), TEXT("Click Me"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 20, 20, 100, 25,g_hWnd, ( HMENU )CTL_BTN_01,..
PNG 포맷 로드 #include void render( void ){ CImage img; //< 파일명TCHAR fileName[ _MAX_FNAME ] = _T( "png/test.png" );img.Load( fileName ); //< 파일크기int width = img.GetWidth();int height = img.GetHeight(); //< 메모리DC설정HDC memDC = CreateCompatibleDC( hdc ); HBITMAPMyBitmap, OldBitmap; //< 오브젝트 잡기MyBitmap = CreateCompatibleBitmap( hdc, width, height );OldBitmap = ( HBITMAP )SelectObject( memDC, MyBitmap ); //< 그리기im..
이미지 투명처리 이미지 투명 처리하는 방법은 여러가지가 있다.일단 검색을 해본 결과bmp 파일을 불러들여 TransparentBlt()함수로 배경을 없애준다거나 알파블렌딩함수를 이용하여 이미지에 투명도를 넣어준다거나 이다. 아니면 아예 투명처리가되어있는 PNG 파일을 불러도 되긴한다.하지만 PNG는 DIB->DDB포맷으로 바꿔주는 함수가 gdiplus.h라는 헤더에 있는데 속도가 느리다는 단점을 가지고 있다. 결국, PNG 포맷 변환을 포기하고 배경투명화 되어있는 PNG파일을 포토샵으로 배경을 RGB(255, 0, 255)로 넣어주고 BMP 포맷 변환을 하기로. TransparentBlt()TransparentBlt 함수를 사용하려면, 보통 헤더를 포함하는 방식으로는 불가능하다.프로젝트에서 TransparentBlt를 ..
CreateCompatibleBitmap() CreateCompatibleBitmap( HDC hdc, int nWidth, int nHeight )이 함수는 hdc와 호환되는 포맷의 비트맵을 nWidht, nHeight 크기로 만든다. 여기서 "호환된다"는 말은 색상 포맷이 같다는 뜻이며 더 정확하게 표현하자면 색상면과 펙셀당 비트수가 같다는 뜻이다. 즉 화면이 256모드면 비트맵도 256비트맵이 되고 트로 컬러 화면이면 비트맵도 트루 컬러로 만들어진다는 뜻이다. 이 함수는 비트맵을 만들기만 하며 래스터 데이터는 초기화하지 않으므로 내부 표면에 그림은 아직 없는 상태이다. 컬러 비트맵은 직점 손으로 만드는 것보다는 CreateCompatibleBitmap() 함수로 만드는 것이 보통이며 CreateBitmap() 함수는 흑백 비트맵을 만들 때만 ..
DDB와 DIB 윈도우즈가 지원하는 비트맵 포맷은 두 가지 종류가 있다. 첫째는 DDB(Device Dependent Bitmap)3.0 이전 버전에 사용하였다. 이 비트맵은 출력 장치에 많이 의존되며 몇 가지 제한이 있다. DDB는 이미지의 크기와 색상에 관한 기본적인 정보와 그리고 이미지 데이터만으로 구성되어 있기 때문에 다양한 해상도의 장치에 광범위하게 사용되지 못하며 만들어진 장치 외의 다른 장치에서 제대로 출력되지 못하는 경우가 있다. 예를 들어 256색으로 만들어진 DDB는 다른 장치나 다른 화면모드에서 색상을 제대로 표현하지 못한다. 쉽게 말해 흑백 비트맵은 흑백 장치로만 출력할 수 있고 컬러 비트맵은 컬러 장치에만 출력할 수 있다. DIB(Device Independent Bitmap)OS/2 2.0의 프..
GetMessage와 PeekMessage GetMessageGetMessage함수는 스레드 메시지 큐에서 메시지를 가져오는데 메시지가 없으면 새로운 메시지가 전달될 때까지 리턴하지 않는다. 즉 메시지가 들어올 때까지 무한 대기한다. 그래서 윈도우즈 프로그램은 사용자가 키보드를 두드리고 있거나 마우스를 굴리고 있지 않는 경우 대부분 GetMessage에서 다음 메시지를 기다리고 있다. 이 노는 시간에 다른 프로세스가 CPU를 쓸 수 있도록 양보하는데 GetMessage의 이런 특성 때문에 멀티 태스킹이 부드럽게 이루어지는 것이다. PeekMessageGetMessage에서 놀고 있는 시간을 데드 타임(Dead time)이라고 하는데 이 데드 타임을 활용할 수 있는 방법이 PeekMessage방식이다. PeekMessage()함수는 메시지가 있는 ..
원 사각형 충돌체크 투영을 통한 체크Box-Circle Collision DetectionCollision with a circle may be one of the simpler ones. Because its projection is the same in all directions (it's simply the circle's radius), we can just do the following:010203040506070809101112131415161718192021222324private function refresh():void { //prepare the vectors var v:Vector2d; var current_box_corner:Point; var center_box:Point = box1.getDot(0..
API 하기전 알아야 할 것들 API 특징 및 장점1. 그래픽 기반(GUI)의 운영체제 2. 멀티 태스킹이 가능3. 메시지 구동 시스템4. 장치에 독립적5. 일관성6. 리소스와의 분리 변수 명명법윈도우즈 프로그래밍에서는 변수에 이름을 붙이는 방법이 도스와는 많이 다름.윈도우즈에서는 워낙 많은 변수가 사용되므로 대체로 변수 이름을 길게 쓰며 되도록 가독성이 좋게 하기 위해 대문자와 소문자를 적당히 혼합하여 사용함. 윈도우 프로그래밍에서 주로 사용되는 접두어 접두어 원래말 의미 cb Count of Bytes 바이트 수 dw double word 부호없는 long형 정수 h handle 윈도우, 비트맵, 파일 등의 핸들 sz Null Terminated NULL 종료 문자열 ch Character 문자형 a Array 배열 w Word ..