반응형

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를 이용하여 툴바의 위치를 직접 지정할 수 있으며, 해당 소스를 사용 시

     // 다이얼로그에 툴바를 여러개 붙이는 것도 가능하다.







반응형
Posted by tislqhf

블로그 이미지
개인적인 공부자료 정리하는 공간
tislqhf

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.4
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함