MFC로 유틸리티나 관리 툴을 만드는 것은 보편화 된 작업이다. 아직 Visual Studio 2003/2005를 사용하는 나로서는 최근 메신저에 등장하는 풀컬러 버튼이 부러울 수 밖에 없다. 가장 최근의 Visual C/C++에서 확장된 MFC가 트루컬러 툴바나 버튼을 지원하는지 여부는 알 수 없다. (프로그래머의 게으름 용서하길..) Microsoft의 MFC 담당 프로그래머들도 우리와 같은 게으른 족속들일 테니까, 이런 기능이 없더라도 굳이 그들을 원망하고 싶지는 않다. ^^;
인터넷을 검색하여 이와 관련된 몇가지 소스를 찾아 분석하였다. 그 중 가장 깔끔한 방법을 공개한다.
* 작동원리 *
일단 원리를 설명하자면,
1) 3개의 24비트(트루컬러)의 툴바용 비트맵을 프로젝트 내에 리소스로 가지고 있어야 한다. 이 3개의 비트맵 이미지의 크기는 모두 같으며 정상 상태, 선택된 상태, 그리고 비활성화 상태를 표시하기 위함이다. 물론 비트맵 이미지는 먼저 메모리에 로딩되어있어야 한다.
2) 다음 기존에 만들어진 툴바루틴의 셋업단계에서 윈도우에게 툴바용 버튼의 이미지를 다른것으로 교체한다는 것을 알려준다.
3) 그러면 윈도우가 이제부터 해당 툴바를 표시할때 우리가 설정한 이미지를 사용한다.
다음의 코드 샘플을 보면 이해가 된다.
CTCImageList cImageList1, cImageList2, cImageList3; // 트루컬러 비트맵 오브젝트
cImageList1.CreateTC(IDR_BITMAP1, nWidth, colMask);
cImageList2.CreateTC(IDR_BITMAP2, nWidth, colMask);
cImageList3.CreateTC(IDR_BITMAP3, nWidth, colMask);
// 윈도우에게 툴바용 이미지를 변경했을을 알려준다
SendMessage(TB_SETIMAGELIST, 0, (LPARAM)cImageList1.m_hImageList); // 기본이미지
SendMessage(TB_SETHOTIMAGELIST, 0, (LPARAM)cImageList2.m_hImageList); // 선택이미지
SendMessage(TB_SETDISABLEDIMAGELIST, 0, (LPARAM)cImageList3.m_hImageList); // 비활성이미지
* 사용후기 *
트루컬러 툴바를 만들더라도 원래 Visual Studio가 관리하는 16컬러 이미지는 리소스로서 툴바와 함께 생성된다. 그건 그대로 놓아두어야 한다.
소스코드와 사용할 3개의 비트맵 이미지가 모두 준비 되었다면 구현은 크게 어렵지 않다. 문제는 버튼을 추가/삭제 및 위치를 이동하는 것이 아주 짜증난다는 것이다. 소프트웨어 개발은 항상 보완/수정의 숙명을 안고 태어난다는 점 잊지말자. 트루컬러 비트맵을 이용한 툴바 자체가 현재의 Visual Studio내에서 그다지 잘 관리되지 않는다. 사용자 요구에 따라서 툴바가 수정될때(그러한 일은 100% 아주 자주 일어난다) 프로그래머가 포토샵 같은 이미지 관리 소프트웨어를 직접 다루는게 시간을 절약시켜준다. 매번 디자이너에게 비트맵을 생성 시켜 달라고 요청하기 정말 귀찮을 것이다.
'C & C++ > MFC 컨트롤' 카테고리의 다른 글
[Dialog] 공용 대화상자 (Common Dialog) 사용법 (0) | 2011.01.12 |
---|---|
[Radio] 라디오 버튼 그룹지정 (0) | 2011.01.12 |
[Event] 오른쪽 마우스버튼으로 여는 컨텍스트 메뉴 (0) | 2011.01.12 |
[Edit] CEdit Controller 의 사용법 (0) | 2011.01.12 |
[Etc] 링크(Link) 컨트롤 (0) | 2011.01.12 |
댓글