컴퓨터 공부/MFC 프로그래밍

[5월 15일 3교시] 툴바

려리군 2009. 5. 15. 11:14

툴바 생성

CMainFrame의 onCreate에서 제작된다.

CToolBar m_wndToolBar;

m_wndtoolBar.CreateEx함수에 의해 생성된다.

CToolBar m_wndToolBar;

if(!m_wndToolBar.Create(this) | !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{

        TRACE0("Failed to create toolbar\n");

        return -1;

}

// 툴바가 크기가 변하거나 툴팁을 원하지 않으면 다음 문장을 삭제하세요.

m_wndToolBar.setBarStyle(m_wndToolBar.getBarStyle() | CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

// 도킹할 수 있는 툴바를 원하지 않으면 다음 3문장을 삭제하세요.

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndToolBar);


virtual BOOL CToolBar::Create(CWnd* pParentWnd,  DWORD dwStyle = WS_CHILD |  WS_VISIBLE | CBRS_TOP,   UINT nID = AFX_IDW_TOOLBAR );

CToolBar 객체와 관련되고 (자식 윈도우) 윈도우 툴바를 생성한다.

참고주소 : http://msdn.microsoft.com/ko-kr/library/c512846k.aspx

리턴 : 성공시 TRUE, 실패시 FALSE

pParentWnd : 툴바의 부모인 윈도우의 포인터

dwStyle : 툴바 스타일. 추가적인 툴바 스타일이 있다.

 - CBRS_TOP/ CBRS_BOTTOM : 프레임 윈도우 위/아래에 컨트롤 바가 위치한다.

 - CBRS_NOALIGN : 컨트롤바가 부모가 크기가 변할 때 위치가 재지정되지 않는다.

 - CBRS_TOOLTIPS : 컨트롤 바가 툴팁을 표시한다.

 - CBRS_SIZE_DYNAMIC/CBRS_SIZE_FIXED : 컨트롤바가 동적으로 움직인다/ 고정된다.

 - CBRS_FLYBY 상태바에 버튼에 관한 정보가 표시된다.

 - CBRS_HIDE_INPLACE : 컨트롤바는 사용자에게 표시되지 않는다.

nID : 툴바의 자식윈도우 아이디

CToolBar::LoadToolBar

BOOL CToolBar::LoadToolBar(LPCTSTR lpszResourceName);

BOOL CToolBar::LoadToolBar(UINT nIDResource);

툴바의 리소스 이름이나 리소스아이디로 정해진 툴바를 불러온다.

참고주소 : http://msdn.microsoft.com/ko-kr/library/b7cw40t7.aspx

리턴 : 성공시 TRUE, 실패시 FALSE

lpszResourceName : 불려질 툴바의 리소스 이름을 나타내는 포인터

nIDResource : 불려질 툴바의 리소스 ID


void CControlBar::SetBarStyle(DWORD dwStyle);

컨트롤바에 대한 원하는 CBRS_ 스타일을 설정한다.

참고주소 : http://msdn.microsoft.com/ko-kr/library/f59a3skc(VS.80).aspx

DWORD CControlBar::GetBarStyle();

컨트롤바에 현재 설정된 CBRS_ 스타일을 알기 위해 호출한다.

참고주소 : http://msdn.microsoft.com/ko-kr/library/6y1e7ff1(VS.80).aspx


void CControlBar::EnableDocking(DWORD dwDockStyle)

컨트롤 바에 도킹이 가능하도록 한다.

참고주소 : http://msdn.microsoft.com/ko-kr/library/f59a3skc(VS.80).aspx

dwDockStyle

 - CBRS_ALIGN_TOP, CBRS_ALIGN_BOTTOM, CBRS_ALIGN_LEFT, CBRS_ALIGN_RIGHT : 컨트롤바가 각 방향에 해당하는 곳에 도킹할 수 있도록 한다.

 - CBRS_ALIGN_ANY : 컨트롤바가 어느 방향이든 도킹할 수 있도록 한다.

 - CBRS_BORDER_TOP, CBRS_BORDER_BOTTOM, CBRS_BORDER_LEFT, CBRS_BORDER_RIGHT : 컨트롤 바의 경계선이 해당하는 방향에 그려지도록 한다.

 - CBRS_TOOLTIPS : 툴팁이 컨트롤바에 표시되도록 한다.

 - CBRS_FLYBY : 툴팁과 같은 시간에 메세지 텍스트가 갱신되도록 한다.

 - CBRS_GRIPPER, CBRS_FLOAT_MULTI


void CFrameWnd::EnableDocking(DWORD dwDockStyle);

프레임 윈도우에서 도킹가능한 컨트롤바를 사용가능하도록 한다.

참고주소 : http://msdn.microsoft.com/ko-kr/library/8e547k9f(VS.80).aspx

dwDockStyle : 프레임 윈도우의 어느 쪽이 컨트롤바를 위한 도킹 면을 제공할 것인지 정한다.

 - CBRS_ALIGN_TOP, CBRS_ALIGN_BOTTOM, CBRS_ALIGN_LEFT, CBRS_ALIGN_RIGHT, CBRS_ALIGN_ANY


void CFrameWnd::DockControlBar(CControlBar* pBar, UINT nDockBarID = 0, LPCRECT lpRect = NULL);

프레임 윈도우에 컨트롤 바가 도킹되도록 한다.

참고주소 : http://msdn.microsoft.com/ko-kr/library/kc9dywd6(VS.80).aspx

pBar : 도킹될 컨트롤 바의 포인터

nDockBarID : 도킹을 위해 고려될 프레임 윈도우의 어떤 면을 선택할 것인지 결정한다.

0이면 어디든 도킹될 수 있다.

- AFX_IDW_DOCKBAR_TOP, AFX_IDW_DOCKBAR_BOTTOM, AFX_IDW_DOCKBAR_LEFT, AFX_IDW_DOCKBAR_RIGHT

lpRect : 컨트롤바가 대상 프레임 윈도우에서 비작업영역 어디에 도킹될 것인지 결정한다.



툴바의 구성

리소스 : ID, Bitmap, String table

각 버튼마다 ID와 Prompt String(상태바와 툴팁의 내용)을 기입한다.

예) Prompt String 내용은 "(상태바의 내용\n툴팁의 내용)" 방식으로 입력한다.


UI 메세지 핸들러가 올 때 

OnUpdate####(UPDATE_UI메세지가 발생할 때 해당 ID에 대한 메세지 핸들러)

반응을 프로그래머가 선택.


virtual void CCmdUI::Enable(BOOL bOn = TRUE);

이 명령에 대한 사용자 인터페이스 아이템을 가능/불가능하게 이 멤버 함수를 호출할 수 있다.

bOn : TRUE면 가능하고 FALSE면 불가능하게 한다.

virtual void CCmdUI::SetCheck(int nCheck = 1);

이 명령에 대한 적절한 체크 상태를 이용하여 사용자 인터페이스 아이템으로 이 멤버 함수를 호출할 수 있다.

nCheck : 0이면 체크 안함, 1이면 체크 됨, 2면 결정하지 못한 상태가 된다.

(툴바의 경우 눌린상태로 설정이 된다.)