다음을 통해 공유


단계별 안내: 도구 모음에 컨트롤 배치

이 문서에서는 도구 모음에 Windows 컨트롤이 포함된 도구 모음 단추를 추가하는 방법을 설명합니다. MFC에서 도구 모음 단추는 CMFCToolBarButton 클래스에서 파생된 클래스여야 하며, 예를 들어 CMFCToolBarComboBoxButton 클래스, CMFCToolBarEditBoxButton 클래스, CMFCDropDownToolbarButton 클래스, 또는 CMFCToolBarMenuButton 클래스와 같습니다.

도구 모음에 컨트롤 추가

도구 모음에 컨트롤을 추가하려면 다음 단계를 수행합니다.

  1. 부모 도구 모음 리소스에서 단추에 사용할 더미 리소스 ID를 예약하십시오. Visual Studio에서 도구 모음 편집 기를 사용하여 단추를 만드는 방법에 대한 자세한 내용은 도구 모음 편집기 문서를 참조하세요.

  2. 부모 도구 모음의 모든 비트맵에서 단추에 대한 도구 모음 이미지(단추 아이콘)를 예약합니다.

  3. 메시지를 처리하는 AFX_WM_RESETTOOLBAR 메시지 처리기에서 다음 단계를 수행합니다.

    1. 파생된 CMFCToolbarButton 클래스를 사용하여 단추 컨트롤을 구축합니다.

    2. 를 사용하여 CMFCToolBar::ReplaceButton더미 단추를 새 컨트롤로 바꿉니다. 단추 개체를 복사하고 복사본을 유지 관리하므로 스택 ReplaceButton 에서 단추 개체를 생성할 수 있습니다.

비고

애플리케이션에서 사용자 지정을 사용하도록 설정한 경우, 다시 컴파일한 후 애플리케이션에서 업데이트된 컨트롤을 확인하려면, 사용자 지정 대화 상자의 도구 모음 탭에 있는 다시 설정 단추를 사용하여 도구 모음을 다시 설정해야 할 수 있습니다. 도구 모음 상태는 Windows 레지스트리에 저장되며, 애플리케이션을 시작하는 동안 메서드가 실행된 후 ReplaceButton 레지스트리 정보가 로드되고 적용됩니다.

도구 모음 컨트롤 및 사용자 지정

사용자 지정 대화 상자의 명령 탭에는 애플리케이션에서 사용할 수 있는 명령 목록이 포함되어 있습니다. 기본적으로 사용자 지정 대화 상자는 애플리케이션 메뉴를 처리하고 각 메뉴 범주에 표준 도구 모음 단추 목록을 작성합니다. 도구 모음 컨트롤이 제공하는 확장된 기능을 유지하려면 표준 도구 모음 단추를 사용자 지정 대화 상자의 사용자 지정 컨트롤로 바꿔야 합니다.

사용자 지정을 사용하도록 설정하면 클래스 클래스를 사용하여 OnViewCustomize 처리기 CMFCToolBarsCustomizeDialog 에서 사용자 지정 대화 상자를 만듭니다. 호출하여 CMFCToolBarsCustomizeDialog::Create 대화 상자를 표시하기 전에 표준 단추를 새 컨트롤로 바꾸기 위해 호출 CMFCToolBarsCustomizeDialog::ReplaceButton 합니다.

예: 검색 콤보 상자 만들기

이 섹션에서는 도구 모음에 표시되고 최근에 사용한 검색 문자열을 포함하는 찾기 콤보 상자 컨트롤을 만드는 방법을 설명합니다. 사용자는 컨트롤에 문자열을 입력한 다음 Enter 키를 눌러 문서를 검색하거나 이스케이프 키를 눌러 포커스를 주 프레임으로 반환할 수 있습니다. 이 예제에서는 문서가 클래스 파생 보기에 CEditView표시된다고 가정합니다.

찾기 컨트롤 만들기

먼저 콤보 찾기 상자 컨트롤을 만듭니다.

  1. 애플리케이션 리소스에 단추와 해당 명령을 추가합니다.

    1. 애플리케이션 리소스에서 명령 ID가 있는 ID_EDIT_FIND 새 단추를 애플리케이션의 도구 모음 및 도구 모음과 연결된 비트맵에 추가합니다.

    2. ID_EDIT_FIND 명령 ID로 새 메뉴 항목을 만드세요.

    3. 문자열 테이블에 새 문자열 "Find the text\nFind" 을 추가하고 명령 ID를 ID_EDIT_FIND_COMBO 할당합니다. 이 ID는 콤보 찾기 상자 단추의 명령 ID로 사용됩니다.

      비고

      ID_EDIT_FIND 처리CEditView되는 표준 명령이므로 이 명령에 대한 특수 처리기를 구현할 필요가 없습니다. 그러나 새 명령에 ID_EDIT_FIND_COMBO대한 처리기를 구현해야 합니다.

  2. 클래스에서 CFindComboBox파생된 새 클래스CComboBox를 만듭니다.

  3. CFindComboBox 클래스에서 PreTranslateMessage 가상 메서드를 재정의합니다. 이 메서드를 사용하면 콤보 상자가 WM_KEYDOWN 메시지를 처리할 수 있습니다. 사용자가 이스케이프 키(VK_ESCAPE)에 도달하면 포커스를 주 프레임 창으로 반환합니다. 사용자가 Enter 키(VK_ENTER)에 도달하면 기본 프레임 창 WM_COMMAND 에 명령 ID가 포함된 메시지를 게시합니다 ID_EDIT_FIND_COMBO .

  4. 찾기 콤보 상자 버튼을 위한 클래스를 CMFCToolBarComboBoxButton 클래스에서 파생하여 만듭니다. 이 예제에서는 이름이 . CFindComboButton입니다.

  5. 생성자는 단추의 CMFCToolbarComboBoxButton 명령 ID, 단추 이미지 인덱스 및 콤보 상자의 스타일이라는 세 가지 매개 변수를 사용합니다. 다음과 같이 이러한 매개 변수를 설정합니다.

    1. ID_EDIT_FIND_COMBO 명령 ID로 전달합니다.

    2. CCommandManager::GetCmdImageID_EDIT_FIND를 사용하여 이미지 인덱스를 가져옵니다.

    3. 사용 가능한 콤보 상자 스타일 목록은 Combo-Box 스타일을 참조하세요.

  6. CFindComboButton 클래스에서 CMFCToolbarComboBoxButton::CreateCombo 메서드를 재정의합니다. 여기서 CFindComboButton 객체를 생성하고 이에 대한 포인터를 반환해야 합니다.

  7. 매크로를 IMPLEMENT_SERIAL 사용하여 콤보 단추를 영구적으로 만듭니다. 작업 영역 관리자는 Windows 레지스트리에 단추의 상태를 자동으로 로드하고 저장합니다.

  8. 문서 보기에서 ID_EDIT_FIND_COMBO 처리기를 구현합니다. CMFCToolBar::GetCommandButtonsID_EDIT_FIND_COMBO를 사용하여 모든 찾기 콤보 상자 단추를 검색합니다. 사용자 지정으로 인해 명령 ID가 동일한 단추의 복사본이 여러 개 있을 수 있습니다.

  9. ID_EDIT_FIND 메시지 처리기OnFind에서 찾기 명령이 콤보 CMFCToolBar::IsLastCommandFromButton 상자 단추에서 전송되었는지 여부를 확인하는 데 사용합니다. 그렇다면 텍스트를 찾아 콤보 상자에 검색 문자열을 추가합니다.

기본 도구 모음에 찾기 컨트롤 추가

도구 모음에 콤보 상자 단추를 추가하려면 다음 단계를 수행합니다.

  1. AFX_WM_RESETTOOLBAR 주 프레임 창에서 메시지 처리기를 OnToolbarReset 구현합니다.

    비고

    프레임워크는 애플리케이션을 시작하는 동안 도구 모음이 초기화되거나 사용자 지정 중에 도구 모음이 다시 설정될 때 이 메시지를 주 프레임 창으로 보냅니다. 두 경우 모두 표준 도구 모음 단추를 찾기 콤보 상자 사용자 지정 단추로 교체해야 합니다.

  2. AFX_WM_RESETTOOLBAR 처리기에서 도구 모음 ID, 즉 WPARAM 메시지의 ID를 검사합니다AFX_WM_RESETTOOLBAR. 도구 모음 ID가 찾기 콤보 상자 단추가 포함된 도구 모음의 ID와 같으면 CMFCToolBar::ReplaceButton 단추(즉, 명령 ID가 있는 단추)를 개체로 ID_EDIT_FIND 바꾸기 위해 호출 CFindComboButton 합니다.

    비고

    스택에서 CFindComboBox 개체를 생성할 수 있는데, ReplaceButton에서 버튼 객체를 복사하고 복사본을 유지 관리하기 때문입니다.

사용자 지정 대화 상자에 찾기 컨트롤 추가

사용자 지정 처리기OnViewCustomize에서 CMFCToolBarsCustomizeDialog::ReplaceButton 단추(즉, 명령 ID가 있는 단추)를 개체로 ID_EDIT_FIND 바꾸기 위해 호출 CFindComboButton 합니다.

참고하십시오

계층 구조 차트
클래스
CMFCToolBar 클래스
CMFCToolBarButton 클래스
CMFCToolBarComboBoxButton 클래스
CMFCToolBarsCustomizeDialog 클래스