다음을 통해 공유


연습: 도구 모음에 컨트롤 배치

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

도구 모음에 컨트롤 추가

도구 모음에 컨트롤을 추가 하려면 다음 단계를 따르십시오.

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

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

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

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

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

참고 항목

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

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

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

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

예제: 찾기 콤보 상자 만들기

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

찾기 컨트롤 만들기

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

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

    1. 애플리케이션 리소스에서 ID_EDIT_FIND 명령 ID로 애플리케이션의 도구 모음이나 도구 모음과 연결된 모든 비트맵에 새 버튼을 추가합니다.

    2. 명령 ID를 사용하여 새 메뉴 항목을 ID_EDIT_FIND 만듭니다.

    3. 새로운 문자열 "텍스트 찾기\n찾기"를 문자열 테이블에 추가하고 ID_EDIT_FIND_COMBO 명령 ID를 할당합니다. 이 ID는 콤보 찾기 상자 단추의 명령 ID로 사용됩니다.

      참고 항목

      ID_EDIT_FINDCEditView에 의해 처리되는 표준 명령이므로 이 명령을 위해 특수한 처리기를 구현하지 않아도 됩니다. 그러나 새 ID_EDIT_FIND_COMBO 명령에 대한 처리기를 구현해야 합니다.

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

  3. CFindComboBox 클래스에서 PreTranslateMessage 가상 메서드를 재정의합니다. 이 메서드를 사용하면 콤보 상자에서 WM_KEYDOWN 메시지를 처리 할 수 있습니다. 사용자가 Esc 키를 누르면(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. 사용 가능한 콤보 상자 스타일 목록은 콤보 상자 스타일을 참조 하세요.

  6. CFindComboButton 클래스에서 CMFCToolbarComboBoxButton::CreateCombo 메서드를 재정의합니다. 여기서 CFindComboButton 개체를 만들고 해당 개체에 대한 포인터를 반환해야 합니다.

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

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

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

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

도구 모음에 콤보 상자 단추를 추가하려면 다음 단계를 따르십시오.

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

    참고 항목

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

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

    참고 항목

    CFindComboBox이 단추 개체를 복사하고 복사본을 유지하므로 스택에서 ReplaceButton를 생성할 수 있습니다.

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

사용자 지정 처리기OnViewCustomize에서 CMFCToolBarsCustomizeDialog::ReplaceButton을 호출하여 찾기 단추(즉, 명령 IDID_EDIT_FIND로 단추)를 개체로 CFindComboButton 바꿉니다.

참고 항목

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