본문 바로가기

컨트롤 컨트롤이란?컨트롤이란 사용자와의 인터페이스를 이루는 도구컨트롤은 제어 조절이라는 뜻인데 이 말 뜻대로 컨트롤은 사용자가 프로그램을 제어하는 수단컨트롤도 하나의 윈도우이다. 화면상의 일정한 영역을 차지하며 자신의 고유 메시지를 처리할 수 있는 능력을 가지고 있다. 그렇다고 해서 메모장이나 탐색기같은 진짜 윈도우처럼 타이틀 바나 경계선을 가지고 독립적으로 사용되는 것은 아니며 보통 대화상자의 차일드 윈도우로 존재 버튼사용 예)//< 버튼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,..
C++ 캐스트 연산자 C의 캐스트 연산자의 문제점C의 캐스트 연산자는 책임이 모두 개발자에게 있다. 원하는대로 바꿔 줄테니 결과가 어찌 되든 상관 없다는 식이다. 그래서 C++에서는 좀 더 안전하고 변환 목적에 맞게 골라 쓸 수 있는 4개의 새로운 캐스트 연산자를 제공한다. 이 연산자들은 C의 캐스트 연산자에 비해 규칙이 다소 엄격해 실수를 줄일 뿐만 아니라 어떤 의도의 타입 변환인지를 좀 더 분명히 표시하는 장점이 있다. static_cast 연산자static_cast 연산자는 지정한 타입으로 변경하는데 무조건 변경하는 것이 아니라 논리적으로 변환 가능한 타입만 변환한다. 기본형태static_cast( 대상 ) 가능한 경우실수형 -> 정수형정수형 -> 실수형상호 호환되는 열거형과 정수형과의 변환double, ..
fgets()함수 이용시 엔터를 빼주는 방법 fgets()함수는 파일의 한줄을 읽어들이는데 개행문자까지도 읽어들여서 출력시 자동 개행이 되는 경우가 있다. 이러한 점을 해결하기 위해 //< 개행문자 빼주기 void delete_NULL( char* str ) { int i = 0; //< 끝까지 돌기 while( *( str + i ) != 0 ) { //< 개행문자가 있다면~ if( *( str + i ) == '\n' ) { //< 0으로 바꿔주기 *( str + i ) = 0; } i++; } }
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()함수는 메시지가 있는 ..