ToolBar
(툴바)
선문비트 23기
허 웅
목적

} 메뉴 항목 중 자주 사용되는 항목을 좀 더 빨리 선택가능.
} 한번만 클릭하여 원하는 명령 실행 가능
툴바만들기

툴 버튼 하나당 하나씩의 비트맵을 만드는 것이 아니라 툴바 하나에 비트맵 하나를 만든다.
세로 높이는 버튼 하나의 높이로 지정한다.
가로폭은 버튼 폭*버튼 개수로 지정한다.
연속적으로 버튼의 모양을 그린다.
그림의 툴 버튼은 16*16크기를 가지며 8개의
툴 버튼이 있으므로 비트맵의 크기는 128*16이다.
TBBUTTON 구조체
typedef struct _TBBUTTON {
int
iBitmap;
int
idCommand;
BYTE
fsState;
BYTE
fsStyle;
#ifdef _WIN64
BYTE
bReserved[6];
#elif defined(_WIN32)
BYTE
bReserved[2];
#endif
DWORD_PTR
dwData;
INT_PTR
iString;
} TBBUTTON, NEAR* PTBBUTTON, *LPTBBUTTON;
- 툴 버튼 하나의 정보는 다음과 같은 TBBUTTON 구조체로 지정하며
이 구조체가 배열을 이루어 툴 바 전체의 버튼들을 정의해준다.
1) iBitmap
첫
번째로 iBitmap 멤버는 툴 버튼
비트맵 중에 몇 번째인가를 나타내는 인덱스이다. 하나의
비트맵에 모든 버튼의 이미지가 제공되므로 그 중 몇 번째 이미지를 사용할 것인지를 0번부터 순서대로 지정해준다.
2) idCommand
두
번째인 idCommand는 사용자가 버튼을 눌렀을 때 WM_COMMAND로 전달될 버튼의 ID이다. 버튼이
눌러지면 툴 바의 부모 윈도우로 WM_COMMAND 메시지가
전달되는데 이 때 LOWORD(wParam)으로 idCommand가 전달된다.
3) fsState
세
번째인 fsState멤버는 버튼의 상태를 나타내주는데 버튼의 초기 상태를 지정해 준다. 상태를 나타내주는 플래그들은 다음과 같은 것들이 있다.

4) fsStyle
툴 버튼의 스타일을 지정하며 버튼의 모양이나 기능을 지정해 준다. 다음 플래그 중 하나 또는 조합을 지정해 준다.

5) dwData
프로그램이
정의해서 사용할 수 있는 사용자 정의 데이터이다.
6) iString
이 배열에서 몇번째 문자열을 사용할 것인가를
지정해줍니다. 문자열
없이 이미지만 출력할 때는 이 멤버에 0을 대입해 준다.
툴 바 생성
툴바를 만드는 함수는 다음과 같은 CreateToolbarEx가 있다.
HWND CreateToolbarEx(
HWND hwnd,
DWORD ws,
UINT wID,
int nBitmaps,
HINSTANCE hBMInst,
UINT wBMID,
LPCTBUTTON lpButtons,
int iNumButtons,
int dxButton, int
dyButton,
int dxBitmap, int
dyBitmap,
UINT uStructSize
);
1) hwnd
툴바의
부모 윈도우를 지정해준다.
2) ws
툴
바 자체의 스타일을 지정해주는데 WS_CHILD나 WS_VISIBLE은 반드시 있어야 한다. 이외에 툴 바에 줄 수 있는 고유의 스타일들이 있는데 이
스타일에 따라 툴 바의 모양이나 동작에 많은 차이가 발생하게 된다.
3) wID
툴 바의 ID를 지정해 준다.
4) nBitmaps
툴 버튼 비트맵의 개수를 지정해 준다.
5) hBMInst
리소스를 가진 인스턴스 핸들을 지정해 준다.
6) wBMID
툴 바 비트맵 핸들을 지정해 준다.
7) lpButtons
툴 버튼들에 대한 정보를 가진 TBBUTTON 구조체 배열을
지정해준다.
8) iNumButtons
툴 버튼의 개수를 지정해 준다.
9) dxButton, dyButton
버튼의 크기를 지정해 준다.
10) dxBitmap, dyBitmap
비트맵의 크기를 지정해 준다.
11) uStructSize
TBBUTTON의 크기를 지정해 준다.
ToolBar에서 이벤트 처리하기
툴버튼을 눌렀을시 OS로 WM_COMMAND메시지를
통지한다.
해당 메시지를 처리하는 메소드에서 wParam의 LOWORD부분이
눌린 툴버튼의 ID이다.
해당 버튼에 따라 명령 구현한다.
ToolBar에 문자열 삽입하기
TB_ADDSTRING 메시지를 사용하여 툴바에 문자열 등록
: TB_ADDSTRING 메시지를 사용하여 툴 바에 문자열을 등록한다.
Ex)
TCHAR *String=L"첫번째\0두번째\0세번째\0네번째\0다섯번째\0여섯번째\0일곱번째\0여덟번째\0";
SendMessage(
hToolBar //툴바의
핸들,
TB_ADDSTRING, //메시지
NULL,
(LPARAM)String //삽입할
문자열
);
ToolBar
문자열 수정하기
SetButtonInfo 메소드를 사용하여 툴바의 문자열 수정
: SetButtonInfo 메소드를 사용하여 툴 바의 문자열을 수정한다.
SetButtonInfo(
hToolBar, //툴바의
핸들
ID_FILENEW, //툴버튼의 ID
L"캬캬캬" //수정할 문자열
);
ToolBar기술문서.docx