2017. 2. 27. 16:28 MFC/기초
MFC) ToolBar(툴바) 기본 사용법 및 팁
MFC- [ToolBar]
(메인 프레임에서의 툴바 생성)
(h)
1. 툴바 생성 희망하는 h파일에 CToolBar m_wndToolBar; 형식으로 선언
(cpp)
1. CreateEX() 함수를 이용하여 툴바 생성
2. LoadToolBar() 함수를 이용하여 리소스에 선언한 툴바 로드
3, EnableDocking() 함수를 이용하여 툴바의 도킹 허용 범위 지정
MSDN - (https://msdn.microsoft.com/ko-kr/library/8e547k9f.aspx)
4. DockControlBar() 함수를 이용하여 툴바의 도킹 위치 지정 및 툴바 프레임에 도킹
MSDN - (https://msdn.microsoft.com/ko-kr/library/kc9dywd6.aspx)
ex)
4. 툴바 이벤트 처리를 위해 이벤트 등록
(h)
afx_msg void OnClickedToolBarEX();
(cpp)
메시지맵) ON_COMMAND(ID_EX, &CDlg::OnClickedToolBarEX) // ID_EX: 툴바 버튼 ID
함수정의) void CDlg::OnClickedToolBarEX() { ... }
-------------------------------------------------------------------------------------------------------
(다이얼로그(대화상자)에서의 툴바 생성)
(h)
1. 툴바 생성 희망하는 h파일에 CToolBar m_wndToolBar; 형식으로 선언
(cpp)
1. CreateEX() 함수를 이용하여 툴바 생성
2. LoadToolBar() 함수를 이용하여 리소스에 선언한 툴바 로드
ex)
3. 툴바 이벤트 처리를 위해 이벤트 등록
(h)
afx_msg void OnClickedToolBarEX();
(cpp)
메시지맵) ON_COMMAND(ID_EX, &CDlg::OnClickedToolBarEX) // ID_EX: 툴바 버튼 ID
함수정의) void CDlg::OnClickedToolBarEX() { ... }
[CreateEX 옵션]
// 툴바 스타일
CBRS_FLOAT_MULTI : 여러개의 컨트롤 바를 도킹 할 수 있게 함
CBRS_SIZE_DYNAMIC : 도구 모음이 프레임 윈도우에서 분리되었을 때 크기를 변경
CBRS_TOOLTIPS : 도구 모음에 설정된 툴팁을 보여줌
CBRS_FLYBY : 도구 모음 버튼이 선택될 시 상태 표시줄에 문자열 출력
CBRS_GRIPPER : 도구 모음 제일 왼쪽에 세로 선을 그림
CBRS_BORDER_ANY : 툴바 테두리 지정
CBRS_BORDER_TOP/BOTTOM... : 툴바 테두리 특정 구역만 지정
// 툴바 도킹 옵션
CBRS_ALIGN_TOP : 프레임 윈도우의 상단에 도킹
CBRS_ALIGN_BOTTOM : 프레임 윈도우의 하단에 도킹
CBRS_ALIGN_LEFT : 프레임 윈도우의 왼쪽에 도킹
CBRS_ALIGN_RIGHT : 프레임 윈도우의 오른쪽에 도킹
CBRS_ALIGN_ANY : 프렘 윈도우의 어느곳에나 도킹 가능하도록
-------------------------------------------------------------------------------------------------------
(주의사항!!)
1. 프레임에 부착한 툴바는 ON_UPDATE_COMMAND_UI 메시지 처리로 툴바의 버튼을 사용권한을 업데이트 할 수 있으나, 다이얼로그(대화상자)에 부착한 경우에는 해당 메시지로 툴바의 버튼 업데이트 불가.
=> 해결방법1)
대화상자에 WM_KICKIDLE 메시지 등록하여 처리.(검색하면 금방 나옴)
// 필자는 검색한 대로 하였으나 해결에 실패하고 리소스를 너무 많이 사용하여
// 하단의 "해결방법2)"번의 방식으로 해결했다.
=> 해결방법2)
(m_wndToolBar1.GetToolBarCtrl()).EnableButton(ID_TOOLBAR_BTN, FALSE);
// 해당 함수를 사용하여 툴바 내부의 버튼의 사용 여부를 결정할 수 있다.
=> 해결방법3)
m_wndToolBar1.SetButtonInfo(nIdx, ID_TOOLBAR_BTN, TBBS_DISABLED, nImageIdx);
// 해결방법 2)를 따르는 분들 중 마우스 커서가 툴바 위에 있을 시 툴바의 상태가
// 바뀌지 않는 경우가 있다. 그런 분들은 해결방법 3)을 사용하면 즉시 적용되는
// 것을 볼 수 있다.
// 해결방법 3)에는 치명적인 오류가 있는데 만약 툴바에 버튼이 3개 있다는 가정하에
// nIdx = 3 을 입력할 경우 3번째 버튼까지는 제대로 이미지가 들어가나 4번 버튼이
// 3번 버튼과 동일하게 생성되는 경우가 있다. 그럴 경우 해결방법2)와 섞어 사용하면
// 된다.
// TBBS_DISABLED: 툴바 버튼 Disable / TBSTATE_ENABLED: 툴바 버튼 Enable
2. 상단에 기재된 내용 중 "다이얼로그에 툴바 도킹"의 경우 상단의 소스코드를 사용할 시 툴바가 안보일 가능성이 있다(사람마다 다름). 그럴 경우 툴바의 위치를 직접 지정해주어야 한다.
ex) m_wndToolBar.MoveWindow(CRect, TRUE/FALSE);
// MoveWindow를 이용하여 툴바의 위치를 직접 지정할 수 있으며, 해당 소스를 사용 시
// 다이얼로그에 툴바를 여러개 붙이는 것도 가능하다.
'MFC > 기초' 카테고리의 다른 글
MFC) 다이얼로그(Dialog) Create VS DoModal (0) | 2017.03.31 |
---|---|
MFC) 여러 컨트롤(버튼 등) 이벤트 동시 처리 (0) | 2017.02.28 |
MFC) Work Thread / UI(Usesr Interface) Thread 사용법 총 정리 (0) | 2017.02.17 |
MFC) CString/문자열 함수(탐색 및 추출)/Find, ReverseFind, Left, Right, Mid (0) | 2017.02.09 |
MFC) CTreeCtrl 사용법(퍼옴) (0) | 2017.01.11 |