메시지 맵 범위에 대 한 처리기
이 문서에서는 다양 한 메시지 (대신의 메시지 하나에 하나의 함수 매핑)를 단일 메시지 처리기 함수에 매핑하는 방법을 설명 합니다.
두 개 이상의 메시지나 컨트롤 알림을 동일한 방식으로 처리 하는 경우가 있습니다.같은 시간에 모든 메시지를 단일 처리기 함수에 매핑할 수 원하는 수도 있습니다.메시지 맵 범위 인접 한 범위의 메시지에 대해이 작업을 수행할 수 있습니다.
명령 Id의 범위를 매핑할 수 있습니다.
명령 처리기 함수입니다.
명령 업데이트 처리기 함수입니다.
컨트롤 Id 범위에 대 한 컨트롤 알림 메시지를 메시지 처리기 함수에 매핑할 수 있습니다.
이 문서에서 다루는 내용은 다음과 같습니다.
메시지 맵 엔트리를 작성합니다.
처리기 함수 선언
명령 Id의 범위에 대 한 예제
컨트롤 Id 범위에 대 한 예제
메시지 맵 엔트리를 작성합니다.
에 해당 합니다.CPP 파일을 다음 예제에 나와 있는 것 처럼 사용자 메시지 맵 엔트리를 추가 합니다.
ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)
메시지 맵 엔트리는 다음과 같은 항목으로 구성 되어 있습니다.
메시지 맵 범위 매크로:
매크로 매개 변수:
세 가지 매개 변수를 사용 하는 처음 두 개의 매크로:
범위가 시작 되는 명령 ID
범위의 끝 명령 ID
메시지 처리기 함수의 이름
명령 Id의 범위는 인접해 야 합니다.
세 번째 매크로인 ON_CONTROL_RANGE, 추가 첫 번째 매개 변수는 사용: 컨트롤 알림 메시지 등 EN_CHANGE.
처리기 함수 선언
추가 처리기 함수 선언에는.H 파일입니다.다음 코드는이, 아래와 같이 보여 줍니다.
public:
afx_msg void OnDoSomething(UINT nID);
단일 명령에 대 한 처리기 함수가 일반적으로 매개 변수가 없습니다.업데이트 처리기 함수를 벗어나 메시지 맵 범위에 대 한 처리기 함수를 추가 매개 변수가 필요 nID, 형식의 UINT.이 매개 변수는 첫 번째 매개 변수가입니다.실제로 사용자가 선택 하는 명령에 지정 하는 데 필요한 추가 명령 ID를 추가 매개 변수를 받아들입니다.
업데이트 처리기 함수에 대 한 매개 변수 요구 사항에 대 한 자세한 내용은 에 대 한 Id 범위를 명령 예제.
예를 들어 범위에 명령 Id
언제 범위를 사용 합니까?한 가지 예입니다 마찬가지로 MFC 샘플의 확대/축소 명령 명령 처리 HIERSVR.이 명령은 보기 25% 보통 크기의 300% 사이의 배율 확대 합니다.HIERSVR의 뷰 클래스가 같은 메시지 맵 엔트리와 확대/축소 명령을 처리 하는 범위를 사용 합니다.
ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)
메시지 맵 엔트리를 쓸 때 지정 합니다.
부터 연속 범위까지 두 명령 Id입니다.
Here they are ID_VIEW_ZOOM25 and ID_VIEW_ZOOM300.
명령에 대 한 처리기 함수의 이름입니다.
Here it's OnZoom.
함수 선언은 다음과 같습니다.
public:
afx_msg void OnZoom(UINT nID);
업데이트 처리기 함수의 경우 이와 유사 하며 널리 유용 하 게 사용할 수 있습니다.작성 하는 것은 매우 흔한 되지 ON_UPDATE_COMMAND_UI 많은 명령에 대 한 처리기 및 직접 작성 하거나 복사, 동일한 코드를 반복적으로 찾기.솔루션 Id 하나로 업데이트 처리기 함수를 사용 하 여 명령 범위를 매핑하는 것은 ON_UPDATE_COMMAND_UI_RANGE 매크로.명령 Id는 연속 범위를 형성 해야 합니다.예를 들어, 참조는 OnUpdateZoom 처리기 및 해당 ON_UPDATE_COMMAND_UI_RANGE 메시지 맵 엔트리는 HIERSVR 샘플의 뷰 클래스에.
단일 매개 변수를 단일 명령으로 정상적으로 실행에 대 한 업데이트 처리기 함수 pCmdUI, 형식의 CCmdUI *.처리기 함수와 달리 메시지 맵 범위에 대 한 업데이트 처리기 함수는 추가 매개 변수가 필요 하지 않습니다 nID, 형식의 UINT.에 사용자가 실제로 선택한 명령을 지정 하는 데 필요한, 명령 ID를 찾을 수 있는 CCmdUI 개체입니다.
예제는 컨트롤 Id 범위에 대 한
다른 흥미로운 사례 컨트롤 Id 범위에 대 한 컨트롤 알림 메시지를 단일 처리기에 매핑하는 것입니다.사용자가 10 개의 단추 클릭할 수 있다고 가정 합니다.모든 10 개의 단추 처리기에 매핑하기 위한 메시지 맵 엔트리는 다음과 같이 나타납니다.
ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)
작성할 때의 ON_CONTROL_RANGE 메시지 맵의 매크로 지정 합니다.
특정 컨트롤 알림 메시지입니다.
여기가 BN_CLICKED.
연속적인 컨트롤 범위와 관련 된 컨트롤 ID 값입니다.
Here these are IDC_BUTTON1 and IDC_BUTTON10.
메시지 처리기 함수의 이름입니다.
Here it's OnButtonClicked.
처리기 함수를 작성 하는 경우 추가 지정 UINT 매개 변수는 다음과 같이 하십시오.
void CRangesView::OnButtonClicked( UINT nID )
{
int nButton = nID - IDC_BUTTON1;
ASSERT( nButton >= 0 && nButton < 10 );
// ...
}
OnButtonClicked 단일 처리기 BN_CLICKED 메시지 매개 변수를 사용 합니다.다양 한 단추에 대 한 동일한 처리기 하나 걸리는 UINT.추가 매개 변수를 생성 하는 특정 컨트롤을 식별 하는 허용의 BN_CLICKED 메시지.
이 예제의 코드는 일반적으로: 변환에 전달 되는 값은 int 메시지 범위 및이 경우로 가정 내.다음 클릭 한 단추에 따라 몇 가지 다른 동작을 걸릴 수 있습니다.