메시지 맵(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
.