다음을 통해 공유


CTRLBARS 샘플: 사용자 지정 컨트롤 막대

업데이트: 2007년 11월

CTRLBARS 샘플에서는 다음과 같은 컨트롤 막대의 다양한 사용자 지정 옵션을 보여 줍니다.

  • 프레임 창에 여러 컨트롤 막대 표시, 컨트롤 막대의 표시/숨김 선택, 프레임 창의 테두리를 따라 동적으로 컨트롤 재배치. 컨트롤 막대는 프레임 창에서 Z 순서에 따라 공간을 할당받습니다. Z 순서는 초기에 컨트롤 막대가 만들어지는 순서입니다(CMainFrame::OnCreate 참조). CTRLBARS에서는 CWnd::SetWindowPos 함수를 사용하여 대화 상자 모음의 Z 순서를 변경합니다. 또한 CWnd::ShowWindow 함수를 사용하여 컨트롤 막대를 숨기거나 표시합니다. CTRLBARS에서 Z 순서를 변경하거나 컨트롤 막대를 표시 또는 숨길 때는 해당 함수 사용 후 표시된 나머지 컨트롤 막대에 해당 창의 공간이 다시 할당되도록 CFrameWnd::RecalcLayout를 사용합니다.

  • 사용자 지정 도구 모음, 도구 모음 단추의 동적 재배치, 도구 모음에 콤보 상자 등의 컨트롤 추가. CTRLBARS에서는 도구 모음을 사용자 지정하는 두 가지 방법을 보여 줍니다. 첫 번째 도구 모음인 Tool Bar에서는 도구 모음 배열에서 짧은 도구 모음(5개의 단추 표시)과 긴 도구 모음(10개의 단추 표시)을 전환합니다. CTRLBARS에서는 각 단추에 대해 CToolBar::SetButtonInfo를 호출하여 각 단추를 도구 모음 비트맵의 타일 위치 및 명령 ID에 매핑합니다. 두 번째 도구 모음인 Style Bar에서는 도구 모음 단추 또는 구분선을 컨트롤(이 예제에서는 콤보 상자)로 대체하는 방법을 보여 줍니다. CMainFrame::CreateStyleBar는 100픽셀 너비의 도구 모음 구분선을 만듭니다. 그런 다음 콤보 상자(IDW_COMBO)를 도구 모음의 자식으로 만들고, 방금 구분선에 할당한 공간을 사용하도록 해당 콤보 상자의 위치를 설정합니다.

  • 사용자 지정 상태 표시줄, 사용자 지정 표시기, 메시지 줄에 텍스트 보내기 상태 표시줄의 경우, 프레임워크에서는 사용자가 ID_INDICATOR_CAPSindicators[ ] 배열에서 CStatusBar::SetIndicators로 전달되는 ID 중 하나로 지정하는 경우에서처럼 자동으로 Cap Lock, Num Lock 또는 Scroll Lock 표시기를 업데이트합니다. CTRLBARS에서는 사용자가 Insert 키를 사용하여 전환하는 OVR(겹쳐쓰기) 상태로 표준 상태 표시줄 표시기를 확장하는 방법을 보여 줍니다. 여기에는 ID_TOGGLE_INSERT 명령(VK_INSERT 키에 매핑)에 대한 메시지 처리기와, 겹쳐쓰기 모드가 선택되어 있을 때 표시되는 "OVR" 텍스트에 대한 리소스 문자열(ID_INDICATOR_OVR)이 필요합니다. 리소스 ID ID_INDICATOR_OVR은 미리 정의된 MFC 상수입니다.

  • 대화 상자 리소스 템플릿에 의해 레이아웃이 정의되는 컨트롤 막대인 대화 상자 모음. 모든 컨트롤 막대와 마찬가지로 대화 상자 모음에 있는 컨트롤로부터의 알림은 대화 상자 모음의 소유자, 즉 주 프레임 창으로 라우팅됩니다. 예를 들어, CMainFrame::OnSelChangePalette는 대화 상자 모음에 있는 ComboBox 컨트롤로부터의 CBN_SELCHANGE 알림에 대한 처리기입니다. CMainFrame에는 세 개의 숨김/표시 확인란 중 두 개(StylesPalette)에 대한 처리기도 있습니다. 세 번째 확인란인 Hide/Show Toolbar의 경우에는 프레임워크에서 ID_VIEW_TOOLBAR에 대한 표준 처리기를 제공하므로 처리기를 작성할 필요가 없습니다.

  • 도구 모음처럼 작동하지만 도구 단추의 2차원 배열을 표시하며 소유자 프레임 창 위에서 모덜리스 창처럼 이동하는 부동 도구 팔레트. 부동 도구 팔레트는 CToolBar에서 파생되었으며 다시 사용할 수 있는 클래스인 CPaletteBar로 구현됩니다. CPaletteBarCToolBar에서 파생되었기 때문에 도구 모음 단추 동작을 포함합니다. CPaletteBar로 구현되는 팔레트 고유 동작에는 다음이 포함됩니다.

    • 부동(WS_POPUP) 창 스타일

    • 행 및 열로 된 도구 단추의 2차원 배열: 만들기, 그리기 및 단추 적중 테스트

    • 텍스트가 없는 가는 제목 표시줄

    • 트래킹 영역을 사용하는 이동 가능한 팔레트

  • CTRLBARS에서는 ON_COMMAND_EXON_UPDATE_COMMAND_UI_RANGE의 사용 방법도 보여 줍니다. CTRLBARS에서 보여 주는 대부분의 컨트롤 막대 사용자 지정 옵션에 대한 자세한 내용은 Technical Note 31을 참조하십시오.

보안 정보:

이 샘플 코드는 개념을 보여 주기 위해 제공되며 가장 안전한 코드 작성 방법을 제시하지 않을 수 있으므로 응용 프로그램이나 웹 사이트에서 사용할 수 없습니다. Microsoft는 샘플 코드를 원래 용도 이외의 다른 용도로 사용하는 경우 발생하는 부수적이나 파생적인 손해에 대해 책임을 지지 않습니다.

샘플 및 이를 설치하기 위한 지침을 가져오려면

  • Visual Studio의 도움말 메뉴에서 샘플을 클릭합니다.

    자세한 내용은 샘플 파일 찾기를 참조하십시오.

  • 최신 버전 및 전체 샘플 목록은 Visual Studio 2008 Samples 페이지에서 온라인으로 사용할 수 있습니다.

  • 컴퓨터의 하드 디스크에서도 샘플을 찾을 수 있습니다. 기본적으로 샘플과 추가 정보 파일은 \Program Files\Visual Studio 9.0\Samples\ 아래의 폴더에 복사됩니다. Visual Studio Express Edition의 경우에는 모든 샘플이 온라인에 있습니다.

샘플 빌드 및 실행

CTRLBARS 샘플을 빌드하고 실행하려면

  1. 솔루션 파일인 Ctrlbars.sln을 엽니다.

  2. 빌드 메뉴에서 빌드를 클릭합니다.

  3. 디버그 메뉴에서 디버깅하지 않고 시작을 클릭합니다.

CTRLBARS를 처음 실행할 때는 여러 가지 컨트롤이 모두 표시됩니다.

  • 메뉴 모음 바로 아래에는 5개의 단추가 있는 도구 모음이 표시됩니다. 첫 번째 단추(굵은 위쪽 화살표)는 도구 모음 배열에서 "짧은" 도구 모음(5개의 단추 표시)과 "긴" 도구 모음(10개의 단추 표시)을 전환합니다. 첫 번째 단추인 이 Short/Long 단추와 About 상자를 여는 Help 단추만 제외하고 모든 단추는 항상 비활성 상태입니다.

  • 두 번째 도구 모음은 첫 번째 도구 모음 바로 아래에 표시됩니다. Style Bar라는 이 도구 모음에서는 텍스트 맞춤 스타일을 Left, Centered, Right 또는 Justified 중 하나로 지정할 수 있습니다. 선택한 스타일은 Style Bar의 상태에만 영향을 줍니다.

  • 상태 표시줄은 창의 맨 아래에 표시됩니다.

  • 3 x 4 배열의 도구 단추가 배치된 부동 팔레트는 창의 맨 위에 표시됩니다.

  • 대화 상자 모음은 창의 왼쪽 테두리에 표시됩니다. 대화 상자 모음이라고 하는 이유는 이 컨트롤 막대의 레이아웃이 대화 상자 템플릿 리소스(IDD_VIEW_SELECT)에 정의되어 있기 때문입니다.

View 메뉴에서는 처음 네 개의 컨트롤 막대를 표시하거나 숨길 수 있습니다. 대화 상자 모음은 항상 표시됩니다. Tools, StylesPalette 컨트롤 막대의 숨김/표시 상태는 대화 상자 모음의 Hide/Show 확인란에서 즉시 반영됩니다. 이 확인란을 선택하거나 선택 취소하여 다른 컨트롤 막대 중 하나를 숨기거나 표시할 수도 있습니다.

View 메뉴의 Dlg Bar Top 명령을 사용하면 대화 상자 모음이 컨트롤 막대의 Z 순서에서 맨 위에 오도록 컨트롤 막대를 다시 배치할 수 있습니다. 대화 상자 모음이 맨 위에 있으면 해당 대화 상자 모음은 메뉴와 제목 표시줄을 제외한 창의 전체 왼쪽 테두리를 따라 확장됩니다. 두 도구 모음의 왼쪽 끝은 대화 상자 모음에 닿습니다. 대화 상자 모음이 원래의 Z 순서 위치(다른 모든 컨트롤 막대 다음)로 돌아가면 대화 상자 모음의 맨 위는 두 번째 도구 모음의 맨 아래 가장자리에 닿고 대화 상자 모음의 맨 아래는 상태 표시줄의 맨 위 가장자리에 닿습니다. 이는 순차적으로 컨트롤 막대에 창 공간이 할당되는 기본 알고리즘을 반영합니다.

Style 메뉴에서는 텍스트 맞춤 스타일을 Left, Centered, Right 또는 Justified의 네 가지 중 하나로 선택할 수 있습니다. 선택한 스타일은 Style Bar의 콤보 상자와 해당 단추에 즉시 반영됩니다. 마찬가지로 Style Bar 콤보 상자에서 스타일을 선택하거나 네 개의 단추 중 하나를 눌러 스타일을 선택할 수 있습니다. 새로 선택한 스타일은 다른 컨트롤의 상태와 Style 메뉴에 즉시 반영됩니다.

Palette 메뉴에서는 팔레트의 도구 배열 상태를 3 x 4에서 2 x 6으로 변경할 수 있습니다.

Palette에서 도구를 선택하면 상태 표시줄의 메시지 줄에 "You have selected the <type> tool"이라는 메시지가 표시됩니다. 여기서 *<type>*은 12개의 도구 중에서 사용자가 선택한 도구를 나타냅니다. 선택한 도구는 대화 상자 모음의 콤보 상자에 반영됩니다. 이 콤보 상자를 사용하여 도구를 선택할 수도 있습니다.

상태 표시줄에서는 가장 최근에 선택한 도구를 표시할 뿐만 아니라 Ins, Caps Lock 및 Num Lock 키의 상태도 표시합니다.

키워드

이 샘플에서는 다음의 키워드를 보여 줍니다.

AfxFormatString1; AfxGetApp; AfxIsValidAddress; AfxRegisterWndClass; AfxThrowResourceException; BitBlt; CBrush::CreateSolidBrush; CCmdUI::ContinueRouting; CCmdUI::Enable; CCmdUI::SetCheck; CCmdUI::SetText; CComboBox::AddString; CComboBox::Create; CComboBox::GetCurSel; CComboBox::GetLBText; CComboBox::SetCurSel; CControlBar::GetBarStyle; CControlBar::SetBarStyle; CDC::Attach; CDC::Detach; CDC::PatBlt; CDC::RectVisible; CDialogBar::Create; CDumpContext::GetDepth; CFont::CreateFontIndirect; CFrameWnd::LoadFrame; CFrameWnd::RecalcLayout; CFrameWnd::SetMessageText; CGdiObject::Attach; CObject::AssertValid; CObject::Dump; CRect::Height; CRect::InflateRect; CRect::SetRectEmpty; CRect::Width; CStatusBar::Create; CStatusBar::GetPaneInfo; CStatusBar::SetIndicators; CStatusBar::SetPaneInfo; CString::LoadString; CToolBar::CToolBar; CToolBar::CommandToIndex; CToolBar::Create; CToolBar::GetButtonInfo; CToolBar::GetItemID; CToolBar::GetItemRect; CToolBar::LoadBitmap; CToolBar::SetButtonInfo; CToolBar::SetButtons; CToolBar::SetHeight; CToolBar::SetSizes; CWinApp::InitInstance; CWinApp::OnIdle; CWnd::ClientToScreen; CWnd::CreateEx; CWnd::GetCapture; CWnd::GetClientRect; CWnd::GetDC; CWnd::GetDlgItem; CWnd::GetOwner; CWnd::GetParentFrame; CWnd::GetSafeHwnd; CWnd::GetStyle; CWnd::GetWindowRect; CWnd::Invalidate; CWnd::InvalidateRect; CWnd::OnCancelMode; CWnd::OnCreate; CWnd::OnLButtonDown; CWnd::OnMouseActivate; CWnd::OnMouseMove; CWnd::OnSysColorChange; CWnd::PreCreateWindow; CWnd::ReleaseDC; CWnd::SendMessage; CWnd::SetCapture; CWnd::SetFont; CWnd::SetWindowPos; CWnd::ShowWindow; CWnd::UpdateDialogControls; CWnd::UpdateWindow; CreateBitmap; CreateCompatibleBitmap; CreateCompatibleDC; CreateDIBitmap; CreatePatternBrush; CreatePen; CreateSolidBrush; DeleteDC; DeleteObject; FillRect; FindResource; FrameRect; FreeResource; GetActiveWindow; GetBValue; GetCapture; GetDC; GetDeviceCaps; GetGValue; GetNextWindow; GetObjectType; GetParent; GetRValue; GetStockObject; GetSysColor; GetSystemMetrics; GetVersion; GetWindow; HIBYTE; InvertRect; LOBYTE; LoadCursor; LoadIcon; LoadResource; LockResource; MAKEINTRESOURCE; OffsetRect; PatBlt; RGB; ReleaseCapture; ReleaseDC; SelectObject; SendMessage; SetActiveWindow; SetBkColor; SetCapture; SetROP2; SetRect; SetTextColor; StretchDIBits; UpdateWindow; free; lstrcpy; malloc; memcpy; memset

참고:

이 샘플을 비롯한 일부 샘플은 Visual C++ 마법사, 라이브러리 및 컴파일러의 변경 내용을 반영하도록 수정되지 않았지만 해당 작업의 수행 방법을 보여 줍니다.

참고 항목

기타 리소스

MFC 샘플