이 문서에서는 도구 모음에 Windows 컨트롤이 포함된 도구 모음 단추를 추가하는 방법을 설명합니다. MFC에서 도구 모음 단추는 CMFCToolBarButton
클래스에서 파생된 클래스여야 하며, 예를 들어 CMFCToolBarComboBoxButton
클래스, CMFCToolBarEditBoxButton
클래스, CMFCDropDownToolbarButton
클래스, 또는 CMFCToolBarMenuButton
클래스와 같습니다.
도구 모음에 컨트롤 추가
도구 모음에 컨트롤을 추가하려면 다음 단계를 수행합니다.
부모 도구 모음 리소스에서 단추에 사용할 더미 리소스 ID를 예약하십시오. Visual Studio에서 도구 모음 편집 기를 사용하여 단추를 만드는 방법에 대한 자세한 내용은 도구 모음 편집기 문서를 참조하세요.
부모 도구 모음의 모든 비트맵에서 단추에 대한 도구 모음 이미지(단추 아이콘)를 예약합니다.
메시지를 처리하는
AFX_WM_RESETTOOLBAR
메시지 처리기에서 다음 단계를 수행합니다.파생된
CMFCToolbarButton
클래스를 사용하여 단추 컨트롤을 구축합니다.를 사용하여
CMFCToolBar::ReplaceButton
더미 단추를 새 컨트롤로 바꿉니다. 단추 개체를 복사하고 복사본을 유지 관리하므로 스택ReplaceButton
에서 단추 개체를 생성할 수 있습니다.
비고
애플리케이션에서 사용자 지정을 사용하도록 설정한 경우, 다시 컴파일한 후 애플리케이션에서 업데이트된 컨트롤을 확인하려면, 사용자 지정 대화 상자의 도구 모음 탭에 있는 다시 설정 단추를 사용하여 도구 모음을 다시 설정해야 할 수 있습니다. 도구 모음 상태는 Windows 레지스트리에 저장되며, 애플리케이션을 시작하는 동안 메서드가 실행된 후 ReplaceButton
레지스트리 정보가 로드되고 적용됩니다.
도구 모음 컨트롤 및 사용자 지정
사용자 지정 대화 상자의 명령 탭에는 애플리케이션에서 사용할 수 있는 명령 목록이 포함되어 있습니다. 기본적으로 사용자 지정 대화 상자는 애플리케이션 메뉴를 처리하고 각 메뉴 범주에 표준 도구 모음 단추 목록을 작성합니다. 도구 모음 컨트롤이 제공하는 확장된 기능을 유지하려면 표준 도구 모음 단추를 사용자 지정 대화 상자의 사용자 지정 컨트롤로 바꿔야 합니다.
사용자 지정을 사용하도록 설정하면 클래스 클래스를 사용하여 OnViewCustomize
처리기 CMFCToolBarsCustomizeDialog
에서 사용자 지정 대화 상자를 만듭니다. 호출하여 CMFCToolBarsCustomizeDialog::Create
대화 상자를 표시하기 전에 표준 단추를 새 컨트롤로 바꾸기 위해 호출 CMFCToolBarsCustomizeDialog::ReplaceButton
합니다.
예: 검색 콤보 상자 만들기
이 섹션에서는 도구 모음에 표시되고 최근에 사용한 검색 문자열을 포함하는 찾기 콤보 상자 컨트롤을 만드는 방법을 설명합니다. 사용자는 컨트롤에 문자열을 입력한 다음 Enter 키를 눌러 문서를 검색하거나 이스케이프 키를 눌러 포커스를 주 프레임으로 반환할 수 있습니다. 이 예제에서는 문서가 클래스 파생 보기에 CEditView
표시된다고 가정합니다.
찾기 컨트롤 만들기
먼저 콤보 찾기 상자 컨트롤을 만듭니다.
애플리케이션 리소스에 단추와 해당 명령을 추가합니다.
애플리케이션 리소스에서 명령 ID가 있는
ID_EDIT_FIND
새 단추를 애플리케이션의 도구 모음 및 도구 모음과 연결된 비트맵에 추가합니다.ID_EDIT_FIND
명령 ID로 새 메뉴 항목을 만드세요.문자열 테이블에 새 문자열
"Find the text\nFind"
을 추가하고 명령 ID를ID_EDIT_FIND_COMBO
할당합니다. 이 ID는 콤보 찾기 상자 단추의 명령 ID로 사용됩니다.비고
ID_EDIT_FIND
처리CEditView
되는 표준 명령이므로 이 명령에 대한 특수 처리기를 구현할 필요가 없습니다. 그러나 새 명령에ID_EDIT_FIND_COMBO
대한 처리기를 구현해야 합니다.
클래스에서
CFindComboBox
파생된 새 클래스CComboBox
를 만듭니다.CFindComboBox
클래스에서PreTranslateMessage
가상 메서드를 재정의합니다. 이 메서드를 사용하면 콤보 상자가WM_KEYDOWN
메시지를 처리할 수 있습니다. 사용자가 이스케이프 키(VK_ESCAPE
)에 도달하면 포커스를 주 프레임 창으로 반환합니다. 사용자가 Enter 키(VK_ENTER
)에 도달하면 기본 프레임 창WM_COMMAND
에 명령 ID가 포함된 메시지를 게시합니다ID_EDIT_FIND_COMBO
.찾기 콤보 상자 버튼을 위한 클래스를
CMFCToolBarComboBoxButton
클래스에서 파생하여 만듭니다. 이 예제에서는 이름이 .CFindComboButton
입니다.생성자는 단추의
CMFCToolbarComboBoxButton
명령 ID, 단추 이미지 인덱스 및 콤보 상자의 스타일이라는 세 가지 매개 변수를 사용합니다. 다음과 같이 이러한 매개 변수를 설정합니다.ID_EDIT_FIND_COMBO
명령 ID로 전달합니다.CCommandManager::GetCmdImage
와ID_EDIT_FIND
를 사용하여 이미지 인덱스를 가져옵니다.사용 가능한 콤보 상자 스타일 목록은 Combo-Box 스타일을 참조하세요.
CFindComboButton
클래스에서CMFCToolbarComboBoxButton::CreateCombo
메서드를 재정의합니다. 여기서CFindComboButton
객체를 생성하고 이에 대한 포인터를 반환해야 합니다.매크로를
IMPLEMENT_SERIAL
사용하여 콤보 단추를 영구적으로 만듭니다. 작업 영역 관리자는 Windows 레지스트리에 단추의 상태를 자동으로 로드하고 저장합니다.문서 보기에서
ID_EDIT_FIND_COMBO
처리기를 구현합니다.CMFCToolBar::GetCommandButtons
와ID_EDIT_FIND_COMBO
를 사용하여 모든 찾기 콤보 상자 단추를 검색합니다. 사용자 지정으로 인해 명령 ID가 동일한 단추의 복사본이 여러 개 있을 수 있습니다.ID_EDIT_FIND
메시지 처리기OnFind
에서 찾기 명령이 콤보CMFCToolBar::IsLastCommandFromButton
상자 단추에서 전송되었는지 여부를 확인하는 데 사용합니다. 그렇다면 텍스트를 찾아 콤보 상자에 검색 문자열을 추가합니다.
기본 도구 모음에 찾기 컨트롤 추가
도구 모음에 콤보 상자 단추를 추가하려면 다음 단계를 수행합니다.
AFX_WM_RESETTOOLBAR
주 프레임 창에서 메시지 처리기를OnToolbarReset
구현합니다.비고
프레임워크는 애플리케이션을 시작하는 동안 도구 모음이 초기화되거나 사용자 지정 중에 도구 모음이 다시 설정될 때 이 메시지를 주 프레임 창으로 보냅니다. 두 경우 모두 표준 도구 모음 단추를 찾기 콤보 상자 사용자 지정 단추로 교체해야 합니다.
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
클래스