'비트맵 버튼'에 해당되는 글 1건

  1. 2005/11/06 롤 오버 버튼 (8)

롤 오버 버튼

프로그래밍 : 2005/11/06 16:50
윈도우에서 GDI로 프로그래밍을 하면 기본 윈도우 컨트롤로는 예쁘게 꾸미기가 힘들다.

버튼에 이미지를 입히거나 윈도우를 사각형이 아닌 이상야릇한 모습으로 만들려면 약간의 삽질이 필요하다.

아래에 공개하는 소스는 버튼에 비트맵을 입혀서 뿌려주는 클래스이다.

함수를 통해서 마우스가 버튼 위로 올라갔을때, 보통상태일때, 클릭했을때, 비활성화일때에 뿌릴 비트맵을 지정해주면 상황에 맞게 비트맵을 예쁘게 뿌려주는 기능을 한다.

사용방법은 아래와 같다.

이 클래스는 MFC의 버튼 클래스인 CButton 클래스를 상속하게 되어있다. 따라서 버튼의 생성은 알아서 해야 하며 이 클래스는 단지 렌더링 컨트롤 밖에 하지 않는다.

뭐 버튼 생성을 어떻게 하는지는 알고 있을 거라고 생각하고 바로 클래스의 맴버함수의 의미만 설명하겠다.

void SetBitmap(BITMAP_INFO &Over, BITMAP_INFO &Normal, BITMAP_INFO &Down, BITMAP_INFO &Disable)
가장 중요한 함수이다. 다른건 몰라도 이 함수의 사용법은 알아야지 비트맵을 뿌릴 수 있다. 뭐 의미는 간단하다. 함수의 원형을 보면 알 수 있겠지만 비트맵 정보를 담고 있는 BITMAP 구조체를 각각 마우스가 올라갔을때, 보통상태, 버튼이 눌렸을때, 비활성화 상태일때 를 구분해서 넣어주면 된다.

bool IsEnter()
현재 마우스가 버튼 안으로 들어와있는지의 여부를 리턴한다.

void ForceDrawDownImage()
강제로 무조건 버튼이 눌린 상태의 이미지로 뿌리게 한다. 그다지 쓸 일은 없을 것이다.

void UnforceDrawDownImage()
위의 강제로 버튼이 눌린 상태를 해제한다.

bool IsForceDrawDownImage()
강제로 버튼이 눌린 상태인지를 리턴한다.

BOOL EnableWindow(BOOL bEnable)
MFC의 CButton 클래스의 맴버 함수를 재정의 한 것이다. 의미는 CButton 클래스의 맴버 함수와 같다.

BITMAP_INFO 구조체
비트맵의 정보를 담는다.

각각 맴버를 설명하며 다음과 같다.

BitMap : 비트맵의 핸들

nXPos : 지정된 비트맵의 핸들에서 뿌릴 X좌표
nYPos : 지정된 비트맵의 핸들에서 뿌릴 Y좌표
nWidth : 위에서 지정한 위치로부터 뿌릴 넓이
nHeight : 위에서 지정한 위치로부터 뿌릴 높이


쓰는데는 그다지 어려울 점이 없다고 생각한다.

ps. 아참 버튼 생성시 반드시 Owner Draw를 켜야한다! 그리고 이 버튼을 가지는 윈도우는 반드시 WM_DRAWITEM을 처리하여야 하며 MFC의 경우에는 위의 메시지 함수를 재정의 후 상위 클래스의 메시지 함수를 호출 해서는 안된다. 자세한건 아래에 있는 example을 보면 된다.

버튼 소스




예제 소스

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2005/11/06 16:50 2005/11/06 16:50