작성자: Ospace (ospace114 at naver.com) http://discount77.com/blog/ospace
이 예제는 이미지 리스트를 이용해서 도구바에 등록하는 형태이다.
기본적으로 CMainFrame의 OnCreate()에서 코딩을 한다.
작업순서는
- 툴바 버튼 기본 모양 지정
- 이미지 리스트 생성 및 툴바에 등록
- 각 버튼들 설정
실제 코딩을 보자.. 기본적으로 사용할 자료형이다.
CImageList img; // 이미지리스트
CString str; // 버튼 설명문을 임시 저장
CRect rectToolBar; // 툴바 크기 설정 임시 저장
툴바 버튼 기본 모양 설정
//버튼의 최대, 최소 크기설정
//최대는 버튼 설명문이 포함될 경우 최대 크기이다.
m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50, 150);
// 버튼 확장 스타일 지정
// TBSTYLE_EX_DRAWDDARROWS - 버튼 오른쪽에 드랍다운용 화살표 버튼을 생성하게 한다 m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
이미지 리스트 생성 및 비트맵 등록
// 이미지 리스트에 IDB_MAINFRAME 비트맵을 등록
// 당연히 비트맵은 사전에 등록되어 있어야 한다
// 비트맵 가로, 세로 크기는 20으로 한다 (이는 변경가능)
// 22는 이미지 리스트에 있는 각각 비트맵 가로폭, 0은 한번에 추가할 수 있는 이미지 수, 다음 RGB()은 투명 마스크로 사용할 색
img.Create(IDB_MAINFRAME, 22, 0, RGB(255, 0, 255));
// 툴바에 생성된 이미지 리스트를 등록
m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
// 이미지 리스트에서 비트맵 정보 제거
// 툴바에 이미 저장되었기에 이미지 리스트의 비트맵은 필요없음
img.Detach();
// 호버 기능을 추가하고 싶으면 호버용 새로운 비트맵을 추가하고 SetHotImageList()이용해서 툴바에 등록한다
img.Create(IDB_HOTMAINFRAME, 22, 0, RGB(255, 0, 255));
m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
img.Detach();
각 버튼들 설정
버튼 설정 전에 기본 설정을 해보자.
// 툴바 버튼모양 : TBSTYLE_FLAT는 이미지밑에 문자열표시
// 아이콘 옆으로 표시되려면 TBSTYLE_LIST로 하면된다
m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT);
// 사용할 버튼수를 2개로 정한다
m_wndToolBar.SetButtons(NULL, 2);
//첫번째 버튼(인덱스:0)에 사용할 버튼 ID는 ID\_FILE\_NEW로 하고 모양은 일반적인 버튼모양(TBSTLE\_BUTTON)으로 하고, 이미지 리스트에서 버튼 이미지로 사용할 인텍스는 0이다
m_wndToolBar.SetButtonInfo(0, ID_FILE_NEW, TBSTYLE_BUTTON, 0);
// 리소스 String Table에서 사용할 스트링 정보를 str에 로드
str.LoadString(IDS_FILENEW);
// 앞에서 가져온 문자열을 해당 버튼(0)의 툴팁으로 등록
m_wndToolBar.SetButtonText(0, str);
이렇게 해서 계속 해당 계수 만큼 등록한다. 여기에서는 2개로 됨.
// 다음은 계속 추가시 버튼 오른쪽에 드랍다운용 화살표 버튼이 생기는 것을 표시한 버튼 예제
m_wndToolBar.SetButtonInfo(6, ID_FAVORITES_DROPDOWN, TBSTYLE_BUTTON | TBSTYLE_DROPDOWN, 6);
str.LoadString(IDS_FAVORITES);
m_wndToolBar.SetButtonText(6, str);
버튼 설정하는 다른 방법
각 버튼 모양에 해당하는 ID를 배열에 넣는다. 그리고, 버튼 중간에 공배(줄)을 넣고 싶으면 ID_SEPARATOR을 추가한다.
다음은 코드는 소스 맨 처음에 넣어 주면된다.
static UINT BASED\_CODE MainButtons[] =
{
ID_FILE_LOGIN,
ID_SEPARATOR,
ID_FILE_START,
ID_FILE_STOP
};
OnCreate()의 정당한 곳에 다음을 넣어준다.
m_wndToolBar.SetButtons(MainButtons, sizeof(MainButtons)/sizeof(UINT));
해당 버튼에 대한 설명을 아래에 붙이는 것을 하고 싶다면 1이 없는 것은 ID_SEPARATOR에 해당하는 부분으로 건너뛰면 된다. 즉 ID_SEPARATOR는 각 버튼 인덱스 중간에 추가되었다고 보면 된다.
// 리소스 String Table에서 사용할 스트링 정보를 str에 로드
str.LoadString(IDS_FILENEW);
// 앞에서 가져온 문자열을 해당 버튼(0)의 툴팁으로 등록
m_wndToolBar.SetButtonText(0, str);
// 리소스 String Table에서 사용할 스트링 정보를 str에 로드
str.LoadString(IDS_FILESTRT);
// 앞에서 가져온 문자열을 해당 버튼(2)의 툴팁으로 등록
m_wndToolBar.SetButtonText(2, str);
참고
[1] Visual C++ .NET 2003\mfc\internet\mfcie Samples
반응형
'3.구현 > VC++' 카테고리의 다른 글
안정성을 보장하는 ActiveX 컨트롤 제작 (0) | 2006.11.16 |
---|---|
[MFC]Resizing Dialog (0) | 2006.11.14 |
[Visual 2005] 클래스 이벤트, 메시지 헨들러 정의 방법 (0) | 2006.11.14 |
[MFC]분할 윈도우를 생성하는 방법 (0) | 2006.11.14 |
[MFC]폼뷰 외곽 경계선 없애기 (0) | 2006.11.14 |