메시지 맵(ATL)
메시지 맵은 처리기 함수를 특정 메시지, 명령 또는 알림과 연결합니다. ATL의 메시지 맵 매크로를 사용하여 창에 대한 메시지 맵을 지정할 수 있습니다. 창의 프로시저 및 CWindowImpl
CDialogImpl
CContainedWindowT
창의 메시지를 메시지 맵으로 전달합니다.
메시지 처리기 함수는 형식BOOL&
의 추가 인수를 허용합니다. 이 인수는 메시지가 처리되었는지 여부를 나타내며 기본적으로 TRUE로 설정됩니다. 그런 다음 처리기 함수는 인수를 FALSE로 설정하여 메시지를 처리하지 않았음을 나타낼 수 있습니다. 이 경우 ATL은 메시지 맵에서 처리기 함수를 계속 찾습니다. 이 인수를 FALSE로 설정하면 먼저 메시지에 대한 응답으로 일부 작업을 수행한 다음, 기본 처리기 또는 다른 처리기 함수가 메시지 처리를 완료하도록 허용할 수 있습니다.
연결된 메시지 지도
또한 ATL을 사용하면 메시지 맵을 연결하여 메시지 처리를 다른 클래스에 정의된 메시지 맵으로 보낼 수 있습니다. 예를 들어 별도의 클래스에서 일반적인 메시지 처리를 구현하여 해당 클래스에 대한 모든 창 체인에 대한 균일한 동작을 제공할 수 있습니다. 기본 클래스 또는 클래스의 데이터 멤버에 연결할 수 있습니다.
또한 ATL은 동적 체인을 지원하므로 런타임에 다른 개체의 메시지 맵에 연결할 수 있습니다. 동적 체인을 구현하려면 CDynamicChain에서 클래스를 파생해야 합니다. 그런 다음 메시지 맵에서 CHAIN_MSG_MAP_DYNAMIC 매크로를 선언합니다. CHAIN_MSG_MAP_DYNAMIC 연결하려는 개체와 메시지 맵을 식별하는 고유 번호가 필요합니다. 호출을 통해 이 고유 값을 정의해야 합니다 CDynamicChain::SetChainEntry
.
CMessageMap에서 클래스가 파생된 경우 메시지 맵을 선언하는 모든 클래스에 연결할 수 있습니다. CMessageMap
를 사용하면 개체가 메시지 맵을 다른 개체에 노출할 수 있습니다. CWindowImpl
이미 .에서 CMessageMap
파생됩니다.
대체 메시지 지도
마지막으로 ATL은 ALT_MSG_MAP 매크로로 선언된 대체 메시지 맵을 지원합니다. 각 대체 메시지 맵은 ALT_MSG_MAP 전달하는 고유한 숫자로 식별됩니다. 대체 메시지 맵을 사용하여 하나의 맵에서 여러 창의 메시지를 처리할 수 있습니다. 기본적으로 대체 메시지 맵은 CWindowImpl
사용하지 않습니다. 이 지원을 추가하려면 파생 클래스의 메서드를 재정의 WindowProc
하고 메시지 맵 식별자를 사용하여 호출 ProcessWindowMessage
합니다CWindowImpl
.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기