다음을 통해 공유


키보드 및 마우스 사용자 지정

MFC를 사용하면 애플리케이션 사용자가 키보드 및 마우스 입력을 처리하는 방법을 사용자 지정할 수 있습니다. 사용자는 명령에 바로 가기 키를 할당하여 키보드 입력을 사용자 지정할 수 있습니다. 사용자가 애플리케이션의 특정 창 내에서 두 번 클릭할 때 실행해야 하는 명령을 선택하여 마우스 입력을 사용자 지정할 수도 있습니다. 이 항목에서는 애플리케이션에 대한 입력을 사용자 지정하는 방법을 설명합니다.

사용자 지정 대화 상자에서 사용자는 마우스 및 키보드에 대한 사용자 지정 컨트롤을 변경할 수 있습니다. 이 대화 상자를 표시하려면 사용자가 보기 메뉴에서 사용자 지정가리킨 다음 도구 모음 및 도킹을 클릭합니다. 대화 상자에서 사용자는 키보드 탭 또는 마우스 탭을 클릭합니다.

키보드 사용자 지정

다음 그림에서는 사용자 지정 대화 상자의 키보드 탭을 보여 줍니다.

Keyboard tab in the Customize dialog box.
키보드 사용자 지정 탭

사용자가 키보드 탭과 상호 작용하여 명령에 하나 이상의 바로 가기 키를 할당합니다. 사용 가능한 명령은 탭의 왼쪽에 나열됩니다. 사용자는 메뉴에서 사용 가능한 명령을 선택할 수 있습니다. 메뉴 명령만 바로 가기 키와 연결할 수 있습니다. 사용자가 새 바로 가기 를 입력하면 할당 단추가 활성화됩니다. 사용자가 이 단추를 클릭하면 애플리케이션은 선택한 명령을 해당 바로 가기와 연결합니다.

현재 할당된 모든 바로 가기 키는 오른쪽 열의 목록 상자에 나열됩니다. 또한 사용자는 개별 바로 가기를 선택하고 제거하거나 애플리케이션에 대한 모든 매핑을 다시 설정할 수 있습니다.

애플리케이션에서 이 사용자 지정을 지원하려면 CKeyboardManager 개체를 만들어야 합니다. 개체를 CKeyboardManager 만들려면 CWinAppEx::InitKeyboardManager 함수를 호출합니다. 이 메서드는 키보드 관리자를 만들고 초기화합니다. 키보드 관리자를 수동으로 만드는 경우에도 호출하여 초기화해야 합니다 CWinAppEx::InitKeyboardManager .

마법사를 사용하여 애플리케이션을 만드는 경우 마법사가 키보드 관리자를 초기화합니다. 애플리케이션에서 키보드 관리자를 초기화한 후 프레임워크는 사용자 지정 대화 상자에 키보드 탭을 추가합니다.

마우스 사용자 지정

다음 그림에서는 사용자 지정 대화 상자의 마우스 탭을 보여 줍니다.

Mouse tab in the Customize dialog box.
마우스 사용자 지정 탭

사용자가 이 탭과 상호 작용하여 마우스 두 번 클릭 동작에 메뉴 명령을 할당합니다. 사용자는 창의 왼쪽에서 보기를 선택한 다음 오른쪽의 컨트롤을 사용하여 명령을 두 번 클릭 동작과 연결합니다. 사용자가 닫기를 클릭하면 사용자가 보기의 아무 곳이나 두 번 클릭할 때마다 애플리케이션이 연결된 명령을 실행합니다.

기본적으로 마법사를 사용하여 애플리케이션을 만들 때는 마우스 사용자 지정을 사용할 수 없습니다.

마우스 사용자 지정을 사용하도록 설정하려면

  1. CWinAppEx::InitMouseManager를 호출하여 CMouseManager 개체를 초기화합니다.

  2. CWinAppEx::GetMouseManager를 사용하여 마우스 관리자에 대한 포인터를 가져옵니다.

  3. CMouseManager::AddView 메서드를 사용하여 마우스 관리자에 보기를 추가합니다. 마우스 관리자에 추가하려는 모든 보기에 대해 이 작업을 수행합니다.

애플리케이션이 마우스 관리자를 초기화한 후 프레임워크는 마우스 탭을 사용자 지정 대화 상자에 추가합니다. 보기를 추가하지 않으면 탭에 액세스하면 처리되지 않은 예외가 발생합니다. 보기 목록을 만든 후에는 사용자가 마우스 탭을 사용할 수 있습니다.

마우스 관리자에 새 보기를 추가할 때 고유한 ID를 제공합니다. 창에 마우스 사용자 지정을 지원하려면 WM_LBUTTONDBLCLICK 메시지를 처리하고 CWinAppEx::OnViewDoubleClick 함수를 호출해야 합니다. 이 함수를 호출할 때 매개 변수 중 하나는 해당 창의 ID입니다. 프로그래머가 ID 번호와 연결된 개체를 추적하는 것은 프로그래머의 책임입니다.

보안 고려 사항

사용자 정의 도구설명된 대로 사용자는 사용자 정의 도구 ID를 두 번 클릭 이벤트와 연결할 수 있습니다. 사용자가 보기를 두 번 클릭하면 애플리케이션은 연결된 ID와 일치하는 사용자 도구를 찾습니다. 애플리케이션이 일치하는 도구를 찾으면 도구를 실행합니다. 애플리케이션에서 일치하는 도구를 찾을 수 없는 경우 ID가 있는 WM_COMMAND 메시지를 두 번 클릭한 보기로 보냅니다.

사용자 지정된 설정은 레지스트리에 저장됩니다. 레지스트리를 편집하면 공격자가 유효한 사용자 도구 ID를 임의의 명령으로 바꿀 수 있습니다. 사용자가 보기를 두 번 클릭하면 뷰는 공격자가 심은 명령을 처리합니다. 이로 인해 예기치 않은 위험한 동작이 발생할 수 있습니다.

또한 이러한 종류의 공격은 사용자 인터페이스 보호 장치를 우회할 수 있습니다. 예를 들어 애플리케이션에서 인쇄를 사용할 수 없는 경우를 가정해 보겠습니다. 즉, 사용자 인터페이스 에서 인쇄 메뉴와 단추를 사용할 수 없습니다. 일반적으로 이렇게 하면 애플리케이션이 인쇄되지 않습니다. 그러나 공격자가 레지스트리를 편집한 경우 사용자는 보기를 두 번 클릭하고 사용할 수 없는 사용자 인터페이스 요소를 우회하여 인쇄 명령을 직접 보낼 수 있습니다.

이러한 종류의 공격을 방지하려면 애플리케이션 명령 처리기에 코드를 추가하여 명령이 실행되기 전에 유효한지 확인합니다. 명령이 애플리케이션으로 전송되는 것을 방지하기 위해 사용자 인터페이스에 의존하지 마세요.

참고 항목

MFC에 대한 사용자 지정
CKeyboardManager 클래스
CMouseManager 클래스
사용자 지정의 보안 의미