메시지 맵 매크로(ATL)
이러한 매크로는 메시지 맵 및 항목을 정의합니다.
속성 | 설명 |
---|---|
ALT_MSG_MAP | 대체 메시지 맵의 시작을 표시합니다. |
BEGIN_MSG_MAP | 기본 메시지 맵의 시작을 표시합니다. |
CHAIN_MSG_MAP_ALT | 기본 클래스의 대체 메시지 맵에 연결합니다. |
CHAIN_MSG_MAP_ALT_MEMBER | 클래스의 데이터 멤버에 있는 대체 메시지 맵에 연결합니다. |
CHAIN_MSG_MAP | 기본 클래스의 기본 메시지 맵에 연결합니다. |
CHAIN_MSG_MAP_DYNAMIC | 런타임에 다른 클래스의 메시지 맵에 연결합니다. |
CHAIN_MSG_MAP_MEMBER | 클래스의 데이터 멤버에서 기본 메시지 맵에 연결합니다. |
COMMAND_CODE_HANDLER | 알림 코드에 따라 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
COMMAND_HANDLER | 알림 코드 및 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자에 따라 처리기 함수에 WM_COMMAND 메시지를 매핑합니다. |
COMMAND_ID_HANDLER | 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자에 따라 처리기 함수에 WM_COMMAND 메시지를 매핑합니다. |
COMMAND_RANGE_CODE_HANDLER | 알림 코드 및 연속된 컨트롤 식별자 범위에 따라 처리기 함수에 WM_COMMAND 메시지를 매핑합니다. |
COMMAND_RANGE_HANDLER | 연속된 컨트롤 식별자 범위에 따라 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
DECLARE_EMPTY_MSG_MAP | 빈 메시지 맵을 구현합니다. |
DEFAULT_REFLECTION_HANDLER | 그렇지 않으면 처리되지 않는 반영된 메시지에 대한 기본 처리기를 제공합니다. |
END_MSG_MAP | 메시지 맵의 끝을 표시합니다. |
FORWARD_NOTIFICATIONS | 부모 창에 알림 메시지를 전달합니다. |
MESSAGE_HANDLER | Windows 메시지를 처리기 함수에 매핑합니다. |
MESSAGE_RANGE_HANDLER | 인접한 범위의 Windows 메시지를 처리기 함수에 매핑합니다. |
NOTIFY_CODE_HANDLER | 알림 코드에 따라 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
NOTIFY_HANDLER | 알림 코드 및 컨트롤 식별자를 기반으로 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
NOTIFY_ID_HANDLER | 컨트롤 식별자를 기반으로 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
NOTIFY_RANGE_CODE_HANDLER | 알림 코드 및 연속된 컨트롤 식별자 범위에 따라 처리기 함수에 WM_NOTIFY 메시지를 매핑합니다. |
NOTIFY_RANGE_HANDLER | 연속된 컨트롤 식별자 범위에 따라 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
REFLECT_NOTIFICATIONS | 알림 메시지를 보낸 창에 다시 반영합니다. |
REFLECTED_COMMAND_CODE_HANDLER | 알림 코드에 따라 반영된 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_COMMAND_HANDLER | 알림 코드 및 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자에 따라 반영된 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_COMMAND_ID_HANDLER | 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자에 따라 반영된 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | 알림 코드 및 연속된 컨트롤 식별자 범위에 따라 반영된 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_COMMAND_RANGE_HANDLER | 연속된 컨트롤 식별자 범위에 따라 반영된 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_NOTIFY_CODE_HANDLER | 알림 코드에 따라 반영된 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_NOTIFY_HANDLER | 알림 코드 및 컨트롤 식별자에 따라 반영된 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_NOTIFY_ID_HANDLER | 컨트롤 식별자에 따라 반영된 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | 알림 코드 및 연속된 컨트롤 식별자 범위에 따라 반영된 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_NOTIFY_RANGE_HANDLER | 연속된 컨트롤 식별자 범위에 따라 반영된 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
요구 사항
헤더: atlwin.h
ALT_MSG_MAP
대체 메시지 맵의 시작을 표시합니다.
ALT_MSG_MAP(msgMapID)
매개 변수
msgMapID
[in] 메시지 맵 식별자입니다.
설명
ATL은 각 메시지 맵을 숫자로 식별합니다. 기본 메시지 맵(BEGIN_MSG_MAP 매크로로 선언됨)은 0으로 식별됩니다. 대체 메시지 맵은 msgMapID로 식별됩니다.
메시지 맵은 창으로 전송된 메시지를 처리하는 데 사용됩니다. 예를 들어 CContainedWindow 를 사용하면 포함된 개체에서 메시지 맵의 식별자를 지정할 수 있습니다. CContainedWindow::WindowProc 는 이 메시지 맵을 사용하여 포함된 창의 메시지를 적절한 처리기 함수 또는 다른 메시지 맵으로 전달합니다. 처리기 함수를 선언하는 매크로 목록은 BEGIN_MSG_MAP 참조하세요.
항상 BEGIN_MSG_MAP 사용하여 메시지 맵을 시작합니다. 그런 다음 후속 대체 메시지 맵을 선언할 수 있습니다.
END_MSG_MAP 매크로는 메시지 맵의 끝을 표시합니다. BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스는 항상 하나만 있습니다.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
예시
다음 예제에서는 각각 하나의 처리기 함수를 포함하는 기본 메시지 맵과 하나의 대체 메시지 맵을 보여줍니다.
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
다음 예제에서는 두 개의 대체 메시지 맵을 보여줍니다. 기본 메시지 맵이 비어 있습니다.
BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
요구 사항
헤더: atlwin.h
BEGIN_MSG_MAP
기본 메시지 맵의 시작을 표시합니다.
BEGIN_MSG_MAP(theClass)
매개 변수
theClass
[in] 메시지 맵을 포함하는 클래스의 이름입니다.
설명
CWindowImpl::WindowProc 는 기본 메시지 맵을 사용하여 창으로 전송된 메시지를 처리합니다. 메시지 맵은 메시지를 적절한 처리기 함수 또는 다른 메시지 맵으로 전달합니다.
다음 매크로는 메시지를 처리기 함수에 매핑합니다. 이 함수는 theClass에서 정의해야 합니다.
매크로 | 설명 |
---|---|
MESSAGE_HANDLER | Windows 메시지를 처리기 함수에 매핑합니다. |
MESSAGE_RANGE_HANDLER | 인접한 범위의 Windows 메시지를 처리기 함수에 매핑합니다. |
COMMAND_HANDLER | 알림 코드 및 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자에 따라 처리기 함수에 WM_COMMAND 메시지를 매핑합니다. |
COMMAND_ID_HANDLER | 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자에 따라 처리기 함수에 WM_COMMAND 메시지를 매핑합니다. |
COMMAND_CODE_HANDLER | 알림 코드에 따라 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
COMMAND_RANGE_HANDLER | 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자에 따라 연속된 범위의 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
NOTIFY_HANDLER | 알림 코드 및 컨트롤 식별자를 기반으로 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
NOTIFY_ID_HANDLER | 컨트롤 식별자를 기반으로 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
NOTIFY_CODE_HANDLER | 알림 코드에 따라 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
NOTIFY_RANGE_HANDLER | 컨트롤 식별자를 기반으로 연속된 범위의 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
다음 매크로는 메시지를 다른 메시지 맵으로 전달합니다. 이 프로세스를 "체인"이라고 합니다.
매크로 | 설명 |
---|---|
CHAIN_MSG_MAP | 기본 클래스의 기본 메시지 맵에 연결합니다. |
CHAIN_MSG_MAP_MEMBER | 클래스의 데이터 멤버에서 기본 메시지 맵에 연결합니다. |
CHAIN_MSG_MAP_ALT | 기본 클래스의 대체 메시지 맵에 연결합니다. |
CHAIN_MSG_MAP_ALT_MEMBER | 클래스의 데이터 멤버에 있는 대체 메시지 맵에 연결합니다. |
CHAIN_MSG_MAP_DYNAMIC | 런타임에 다른 클래스의 기본 메시지 맵에 연결합니다. |
다음 매크로는 부모 창에서 "반영된" 메시지를 전달합니다. 예를 들어 컨트롤은 일반적으로 처리를 위해 부모 창에 알림 메시지를 보내지만 부모 창은 메시지를 컨트롤에 다시 반영할 수 있습니다.
매크로 | 설명 |
---|---|
REFLECTED_COMMAND_HANDLER | 알림 코드 및 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자에 따라 반영된 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_COMMAND_ID_HANDLER | 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자에 따라 반영된 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_COMMAND_CODE_HANDLER | 알림 코드에 따라 반영된 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_COMMAND_RANGE_HANDLER | 연속된 컨트롤 식별자 범위에 따라 반영된 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | 알림 코드 및 연속된 컨트롤 식별자 범위에 따라 반영된 WM_COMMAND 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_NOTIFY_HANDLER | 알림 코드 및 컨트롤 식별자에 따라 반영된 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_NOTIFY_ID_HANDLER | 컨트롤 식별자에 따라 반영된 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_NOTIFY_CODE_HANDLER | 알림 코드에 따라 반영된 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_NOTIFY_RANGE_HANDLER | 연속된 컨트롤 식별자 범위에 따라 반영된 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | 알림 코드 및 연속된 컨트롤 식별자 범위에 따라 반영된 WM_NOTIFY 메시지를 처리기 함수에 매핑합니다. |
예시
class CMyExtWindow : public CMyBaseWindow
{
public:
BEGIN_MSG_MAP(CMyExtWindow)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
CHAIN_MSG_MAP(CMyBaseWindow)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnSetFocus(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
개체가 CMyExtWindow
WM_PAINT 메시지를 받으면 메시지가 실제 처리를 위해 전달 CMyExtWindow::OnPaint
됩니다. 메시지에 추가 처리가 필요한 경우 OnPaint
메시지는 기본 메시지 맵 CMyBaseWindow
으로 전달됩니다.
기본 메시지 맵 외에도 ALT_MSG_MAP 사용하여 대체 메시지 맵을 정의할 수 있습니다. 항상 BEGIN_MSG_MAP 사용하여 메시지 맵을 시작합니다. 그런 다음 후속 대체 메시지 맵을 선언할 수 있습니다. 다음 예제에서는 각각 하나의 처리기 함수를 포함하는 기본 메시지 맵과 하나의 대체 메시지 맵을 보여줍니다.
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
다음 예제에서는 두 개의 대체 메시지 맵을 보여줍니다. 기본 메시지 맵이 비어 있습니다.
BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
END_MSG_MAP 매크로는 메시지 맵의 끝을 표시합니다. BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스는 항상 하나만 있습니다.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
요구 사항
헤더: atlwin.h
CHAIN_MSG_MAP_ALT
메시지 맵의 항목을 정의합니다.
CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)
매개 변수
theChainClass
[in] 메시지 맵을 포함하는 기본 클래스의 이름입니다.
msgMapID
[in] 메시지 맵 식별자입니다.
설명
CHAIN_MSG_MAP_ALT 기본 클래스의 대체 메시지 맵으로 메시지를 전달합니다. 이 대체 메시지 맵 을 ALT_MSG_MAP(msgMapID)로 선언해야 합니다. 기본 클래스의 기본 메시지 맵(BEGIN_MSG_MAP 사용하여 선언됨)으로 메시지를 보내려면 CHAIN_MSG_MAP 사용합니다. 예제는 CHAIN_MSG_MAP 참조하세요.
참고 항목
항상 BEGIN_MSG_MAP 사용하여 메시지 맵을 시작합니다. 그런 다음 ALT_MSG_MAP 사용하여 후속 대체 메시지 맵을 선언할 수 있습니다. END_MSG_MAP 매크로는 메시지 맵의 끝을 표시합니다. 모든 메시지 맵에는 정확히 하나의 BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스가 있어야 합니다.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
요구 사항
헤더: atlwin.h
CHAIN_MSG_MAP_ALT_MEMBER
메시지 맵의 항목을 정의합니다.
CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)
매개 변수
theChainMember
[in] 메시지 맵을 포함하는 데이터 멤버의 이름입니다.
msgMapID
[in] 메시지 맵 식별자입니다.
설명
CHAIN_MSG_MAP_ALT_MEMBER 메시지를 데이터 멤버의 대체 메시지 맵으로 전달합니다. 이 대체 메시지 맵 을 ALT_MSG_MAP(msgMapID)로 선언해야 합니다. BEGIN_MSG_MAP 사용하여 선언된 데이터 멤버의 기본 메시지 맵으로 메시지를 보내려면 CHAIN_MSG_MAP_MEMBER 사용합니다. 예제는 CHAIN_MSG_MAP_MEMBER 참조하세요.
참고 항목
항상 BEGIN_MSG_MAP 사용하여 메시지 맵을 시작합니다. 그런 다음 ALT_MSG_MAP 사용하여 후속 대체 메시지 맵을 선언할 수 있습니다. END_MSG_MAP 매크로는 메시지 맵의 끝을 표시합니다. 모든 메시지 맵에는 정확히 하나의 BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스가 있어야 합니다.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
요구 사항
헤더: atlwin.h
CHAIN_MSG_MAP
메시지 맵의 항목을 정의합니다.
CHAIN_MSG_MAP(theChainClass)
매개 변수
theChainClass
[in] 메시지 맵을 포함하는 기본 클래스의 이름입니다.
설명
CHAIN_MSG_MAP 기본 클래스의 기본 메시지 맵(BEGIN_MSG_MAP 선언됨)으로 메시지를 전달합니다. 메시지를 기본 클래스의 대체 메시지 맵(ALT_MSG_MAP 사용하여 선언됨)으로 보내려면 CHAIN_MSG_MAP_ALT 사용합니다.
참고 항목
항상 BEGIN_MSG_MAP 사용하여 메시지 맵을 시작합니다. 그런 다음 ALT_MSG_MAP 사용하여 후속 대체 메시지 맵을 선언할 수 있습니다. END_MSG_MAP 매크로는 메시지 맵의 끝을 표시합니다. 모든 메시지 맵에는 정확히 하나의 BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스가 있어야 합니다.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
예시
class CMyExtClass : public CMyBaseClass
{
public:
BEGIN_MSG_MAP(CMyExtClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
// chain to default message map in CMyBaseClass
CHAIN_MSG_MAP(CMyBaseClass)
ALT_MSG_MAP(1)
// chain to first alternative message map in CMyBaseClass
CHAIN_MSG_MAP(CMyBaseClass)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CHAR, OnChar)
// chain to alternate message map in CMyBaseClass
CHAIN_MSG_MAP_ALT(CMyBaseClass, 1)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
이 예제에서는 다음을 보여 줍니다.
창 프로시저가 '의 기본 메시지 맵을 사용하고
CMyClass
메시지를OnPaint
처리하지 않는 경우 메시지는 처리를 위해 '의 기본 메시지 맵으로 전달CMyBaseClass
됩니다.창 프로시저에서 첫 번째 대체 메시지 맵을
CMyClass
사용하는 경우 모든 메시지는 '의 기본 메시지 맵으로 전달CMyBaseClass
됩니다.창 프로시저가 '두 번째 대체 메시지 맵을 사용하고
CMyClass
메시지를OnChar
처리하지 않는 경우 메시지는 지정된 대체 메시지 맵으로CMyBaseClass
전달됩니다.CMyBaseClass
는 이 메시지 맵을 ALT_MSG_MAP(1)로 선언해야 합니다.
요구 사항
헤더: atlwin.h
CHAIN_MSG_MAP_DYNAMIC
메시지 맵의 항목을 정의합니다.
CHAIN_MSG_MAP_DYNAMIC(dynaChainID)
매개 변수
dynaChainID
[in] 개체의 메시지 맵에 대한 고유 식별자입니다.
설명
CHAIN_MSG_MAP_DYNAMIC 런타임에 메시지를 다른 개체의 기본 메시지 맵으로 전달합니다. 개체와 해당 메시지 맵은 CDynamicChain::SetChainEntry를 통해 정의하는 dynaChainID와 연결됩니다. CHAIN_MSG_MAP_DYNAMIC 사용하려면 클래스 CDynamicChain
를 파생시켜야 합니다. 예를 들어 CDynamicChain 개요를 참조하세요.
참고 항목
항상 BEGIN_MSG_MAP 사용하여 메시지 맵을 시작합니다. 그런 다음 ALT_MSG_MAP 사용하여 후속 대체 메시지 맵을 선언할 수 있습니다. END_MSG_MAP 매크로는 메시지 맵의 끝을 표시합니다. 모든 메시지 맵에는 정확히 하나의 BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스가 있어야 합니다.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
요구 사항
헤더: atlwin.h
CHAIN_MSG_MAP_MEMBER
메시지 맵의 항목을 정의합니다.
CHAIN_MSG_MAP_MEMBER(theChainMember)
매개 변수
theChainMember
[in] 메시지 맵을 포함하는 데이터 멤버의 이름입니다.
설명
CHAIN_MSG_MAP_MEMBER BEGIN_MSG_MAP 선언된 데이터 멤버의 기본 메시지 맵으로 메시지를 전달합니다. ALT_MSG_MAP 사용하여 선언된 데이터 멤버의 대체 메시지 맵으로 메시지를 보내려면 CHAIN_MSG_MAP_ALT_MEMBER 사용합니다.
참고 항목
항상 BEGIN_MSG_MAP 사용하여 메시지 맵을 시작합니다. 그런 다음 ALT_MSG_MAP 사용하여 후속 대체 메시지 맵을 선언할 수 있습니다. END_MSG_MAP 매크로는 메시지 맵의 끝을 표시합니다. 모든 메시지 맵에는 정확히 하나의 BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스가 있어야 합니다.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
예시
class CMyContainerClass : public CWindowImpl<CMyContainerClass>
{
public:
CMyContainedClass m_obj;
BEGIN_MSG_MAP(CMyContainerClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
// chain to default message map of m_obj
CHAIN_MSG_MAP_MEMBER(m_obj)
ALT_MSG_MAP(1)
// chain to default message map of m_obj
CHAIN_MSG_MAP_MEMBER(m_obj)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CHAR, OnChar)
// chain to alternate message map of m_obj
CHAIN_MSG_MAP_ALT_MEMBER(m_obj, 1)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
이 예제에서는 다음을 보여 줍니다.
창 프로시저가 '의 기본 메시지 맵을 사용하고
CMyClass
메시지를OnPaint
처리하지 않는 경우 메시지는 처리를 위해 '의 기본 메시지 맵으로 전달m_obj
됩니다.창 프로시저에서 첫 번째 대체 메시지 맵을
CMyClass
사용하는 경우 모든 메시지는 '의 기본 메시지 맵으로 전달m_obj
됩니다.창 프로시저가 '의 두 번째 대체 메시지 맵을 사용하고
CMyClass
메시지를OnChar
처리하지 않는 경우 메시지는 지정된 대체 메시지 맵으로m_obj
전달됩니다. 클래스CMyContainedClass
는 이 메시지 맵을 ALT_MSG_MAP(1)로 선언해야 합니다.
요구 사항
헤더: atlwin.h
COMMAND_CODE_HANDLER
COMMAND_HANDLER 비슷하지만 알림 코드에 따라 WM_COMMAND 메시지를 매핑합니다.
COMMAND_CODE_HANDLER(code, func)
매개 변수
code
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
COMMAND_HANDLER
메시지 맵의 항목을 정의합니다.
COMMAND_HANDLER(id, code, func)
매개 변수
id
[in] 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자입니다.
code
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
설명
COMMAND_HANDLER 알림 코드 및 컨트롤 식별자에 따라 지정된 처리기 함수에 WM_COMMAND 메시지를 매핑 합니다. 예시:
class ATL_NO_VTABLE CPolyProp :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CPolyProp, &CLSID_PolyProp>,
public IPropertyPageImpl<CPolyProp>,
public CDialogImpl<CPolyProp>
{
public:
BEGIN_COM_MAP(CPolyProp)
COM_INTERFACE_ENTRY(IPropertyPage)
END_COM_MAP()
BEGIN_MSG_MAP(CPolyProp)
COMMAND_HANDLER(IDC_SIDES, EN_CHANGE, OnEnChangeSides)
CHAIN_MSG_MAP(IPropertyPageImpl<CPolyProp>)
END_MSG_MAP()
// When a CPolyProp object receives a WM_COMMAND message identified
// by IDC_SIDES and EN_CHANGE, the message is directed to
// CPolyProp::OnEnChangeSides for the actual processing.
LRESULT OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/,
BOOL& /*bHandled*/);
COMMAND_HANDLER 매크로에 지정된 함수는 다음과 같이 정의해야 합니다.
LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
메시지 맵이 호출되기 전에 CommandHandler
TRUE로 설정 bHandled
됩니다. CommandHandler
메시지를 완전히 처리하지 않으면 메시지가 추가 처리가 필요함을 나타내기 위해 FALSE로 설정 bHandled
해야 합니다.
참고 항목
항상 BEGIN_MSG_MAP 사용하여 메시지 맵을 시작합니다. 그런 다음 ALT_MSG_MAP 사용하여 후속 대체 메시지 맵을 선언할 수 있습니다. END_MSG_MAP 매크로는 메시지 맵의 끝을 표시합니다. 모든 메시지 맵에는 정확히 하나의 BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스가 있어야 합니다.
COMMAND_HANDLER 외에도 MESSAGE_HANDLER 사용하여 식별자 또는 코드와 관계없이 WM_COMMAND 메시지를 매핑할 수 있습니다. 이 경우 MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction)
모든 WM_COMMAND 메시지를 .으로 전달합니다 OnHandlerFunction
.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
요구 사항
헤더: atlwin.h
COMMAND_ID_HANDLER
COMMAND_HANDLER 비슷하지만 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자만 기반으로 WM_COMMAND 메시지를 매핑 합니다.
COMMAND_ID_HANDLER(id, func)
매개 변수
id
[in] 메시지를 보내는 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
COMMAND_RANGE_CODE_HANDLER
COMMAND_RANGE_HANDLER 비슷하지만 WM_COMMAND 메시지를 컨트롤 범위에서 단일 처리기 함수로 특정 알림 코드로 매핑합니다.
COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)
매개 변수
idFirst
[in] 연속된 컨트롤 식별자 범위의 시작을 표시합니다.
idLast
[in] 연속된 컨트롤 식별자 범위의 끝을 표시합니다.
code
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
설명
이 범위는 메시지를 보내는 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자를 기반으로 합니다.
요구 사항
헤더: atlwin.h
COMMAND_RANGE_HANDLER
COMMAND_HANDLER 비슷하지만 WM_COMMAND 메시지를 컨트롤 범위에서 단일 처리기 함수로 매핑합니다.
COMMAND_RANGE_HANDLER( idFirst, idLast, func)
매개 변수
idFirst
[in] 연속된 컨트롤 식별자 범위의 시작을 표시합니다.
idLast
[in] 연속된 컨트롤 식별자 범위의 끝을 표시합니다.
func
[in] 메시지 처리기 함수의 이름입니다.
설명
이 범위는 메시지를 보내는 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자를 기반으로 합니다.
요구 사항
헤더: atlwin.h
DECLARE_EMPTY_MSG_MAP
빈 메시지 맵을 선언합니다.
DECLARE_EMPTY_MSG_MAP()
설명
DECLARE_EMPTY_MSG_MAP BEGIN_MSG_MAP 매크로를 호출하고 END_MSG_MAP 빈 메시지 맵을 만드는 편리한 매크로 입니다.
BEGIN_MSG_MAP(CExample)
END_MSG_MAP()
DEFAULT_REFLECTION_HANDLER
반영된 메시지를 받을 자식 창(컨트롤)에 대한 기본 처리기를 제공합니다. 처리기가 처리되지 않은 메시지를 올바르게 전달합니다 DefWindowProc
.
DEFAULT_REFLECTION_HANDLER()
요구 사항
헤더: atlwin.h
END_MSG_MAP
메시지 맵의 끝을 표시합니다.
END_MSG_MAP()
설명
항상 BEGIN_MSG_MAP 매크로를 사용하여 메시지 맵의 시작을 표시합니다. ALT_MSG_MAP 사용하여 후속 대체 메시지 맵을 선언합니다.
BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스는 항상 하나만 있습니다.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
예시
다음 예제에서는 각각 하나의 처리기 함수를 포함하는 기본 메시지 맵과 하나의 대체 메시지 맵을 보여줍니다.
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
다음 예제에서는 두 개의 대체 메시지 맵을 보여줍니다. 기본 메시지 맵이 비어 있습니다.
BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
요구 사항
헤더: atlwin.h
FORWARD_NOTIFICATIONS
부모 창에 알림 메시지를 전달합니다.
FORWARD_NOTIFICATIONS()
설명
메시지 맵의 일부로 이 매크로를 지정합니다.
요구 사항
헤더: atlwin.h
MESSAGE_HANDLER
메시지 맵의 항목을 정의합니다.
MESSAGE_HANDLER( msg, func )
매개 변수
msg
[in] Windows 메시지입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
설명
MESSAGE_HANDLER 지정된 처리기 함수에 Windows 메시지를 매핑합니다.
MESSAGE_HANDLER 매크로에 지정된 함수는 다음과 같이 정의해야 합니다.
LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
메시지 맵이 호출되기 전에 MessageHandler
TRUE로 설정 bHandled
됩니다. MessageHandler
메시지를 완전히 처리하지 않으면 메시지가 추가 처리가 필요함을 나타내기 위해 FALSE로 설정 bHandled
해야 합니다.
참고 항목
항상 BEGIN_MSG_MAP 사용하여 메시지 맵을 시작합니다. 그런 다음 ALT_MSG_MAP 사용하여 후속 대체 메시지 맵을 선언할 수 있습니다. END_MSG_MAP 매크로는 메시지 맵의 끝을 표시합니다. 모든 메시지 맵에는 정확히 하나의 BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스가 있어야 합니다.
MESSAGE_HANDLER 외에도 COMMAND_HANDLER 및 NOTIFY_HANDLER 사용하여 각각 WM_COMMAND 및 WM_NOTIFY 메시지를 매핑할 수 있습니다.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
예시
class CMyBaseWindow : public CWindowImpl<CMyBaseWindow>
{
public:
BEGIN_MSG_MAP(CMyBaseWindow)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
// When a CMyBaseWindow object receives a WM_CREATE message, the message
// is directed to CMyBaseWindow::OnCreate for the actual processing.
LRESULT OnCreate(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
요구 사항
헤더: atlwin.h
MESSAGE_RANGE_HANDLER
MESSAGE_HANDLER 비슷하지만 Windows 메시지 범위를 단일 처리기 함수에 매핑합니다.
MESSAGE_RANGE_HANDLER( msgFirst, msgLast, func )
매개 변수
msgFirst
[in] 연속된 메시지 범위의 시작을 표시합니다.
msgLast
[in] 연속된 메시지 범위의 끝을 표시합니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
NOTIFY_CODE_HANDLER
NOTIFY_HANDLER 비슷하지만 알림 코드에 따라 WM_NOTIFY 메시지를 매핑합니다.
NOTIFY_CODE_HANDLER(cd, func)
매개 변수
cd
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
NOTIFY_HANDLER
메시지 맵의 항목을 정의합니다.
NOTIFY_HANDLER( id, cd, func )
매개 변수
id
[in] 메시지를 보내는 컨트롤의 식별자입니다.
cd
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
설명
NOTIFY_HANDLER 알림 코드 및 컨트롤 식별자에 따라 지정된 처리기 함수에 WM_NOTIFY 메시지를 매핑 합니다.
NOTIFY_HANDLER 매크로에 지정된 함수는 다음과 같이 정의해야 합니다.
LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
메시지 맵이 호출되기 전에 NotifyHandler
TRUE로 설정 bHandled
됩니다. NotifyHandler
메시지를 완전히 처리하지 않으면 메시지가 추가 처리가 필요함을 나타내기 위해 FALSE로 설정 bHandled
해야 합니다.
참고 항목
항상 BEGIN_MSG_MAP 사용하여 메시지 맵을 시작합니다. 그런 다음 ALT_MSG_MAP 사용하여 후속 대체 메시지 맵을 선언할 수 있습니다. END_MSG_MAP 매크로는 메시지 맵의 끝을 표시합니다. 모든 메시지 맵에는 정확히 하나의 BEGIN_MSG_MAP 및 END_MSG_MAP 인스턴스가 있어야 합니다.
NOTIFY_HANDLER 외에도 MESSAGE_HANDLER 사용하여 식별자 또는 코드와 관계없이 WM_NOTIFY 메시지를 매핑할 수 있습니다. 이 경우 MESSAGE_HANDLER(WM_NOTIFY, OnHandlerFunction)
모든 WM_NOTIFY 메시지를 .으로 전달합니다 OnHandlerFunction
.
ATL에서 메시지 맵을 사용하는 방법에 대한 자세한 내용은 메시지 맵을 참조 하세요.
예시
class CMyDialog2 : public CDialogImpl<CMyDialog2>
{
public:
enum { IDD = IDD_MYDLG };
BEGIN_MSG_MAP(CMyDialog2)
NOTIFY_HANDLER(IDC_TREE1, NM_CLICK, OnNMClickTree1)
END_MSG_MAP()
public:
// When a CMyDialog2 object receives a WM_NOTIFY message
// identified by IDC_TREE1 and NM_CLICK, the message is
// directed to CMyDialog2::OnNMClickTree1 for the actual
// processing.
LRESULT OnNMClickTree1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/);
};
요구 사항
헤더: atlwin.h
NOTIFY_ID_HANDLER
NOTIFY_HANDLER 비슷하지만 컨트롤 식별자만 기반으로 WM_NOTIFY 메시지를 매핑합니다.
NOTIFY_ID_HANDLER( id, func )
매개 변수
id
[in] 메시지를 보내는 컨트롤의 식별자입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
NOTIFY_RANGE_CODE_HANDLER
NOTIFY_RANGE_HANDLER 비슷하지만 WM_NOTIFY 메시지를 컨트롤 범위에서 단일 처리기 함수로 특정 알림 코드로 매핑합니다.
NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )
매개 변수
idFirst
[in] 연속된 컨트롤 식별자 범위의 시작을 표시합니다.
idLast
[in] 연속된 컨트롤 식별자 범위의 끝을 표시합니다.
cd
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
설명
이 범위는 메시지를 보내는 컨트롤의 식별자를 기반으로합니다.
요구 사항
헤더: atlwin.h
NOTIFY_RANGE_HANDLER
NOTIFY_HANDLER 비슷하지만 WM_NOTIFY 메시지를 컨트롤 범위에서 단일 처리기 함수로 매핑합니다.
NOTIFY_RANGE_HANDLER( idFirst, idLast, func )
매개 변수
idFirst
[in] 연속된 컨트롤 식별자 범위의 시작을 표시합니다.
idLast
[in] 연속된 컨트롤 식별자 범위의 끝을 표시합니다.
func
[in] 메시지 처리기 함수의 이름입니다.
설명
이 범위는 메시지를 보내는 컨트롤의 식별자를 기반으로합니다.
요구 사항
헤더: atlwin.h
REFLECT_NOTIFICATIONS
알림 메시지를 보낸 자식 창(컨트롤)에 다시 반영합니다.
REFLECT_NOTIFICATIONS()
설명
부모 창의 메시지 맵의 일부로 이 매크로를 지정합니다.
요구 사항
헤더: atlwin.h
REFLECTED_COMMAND_CODE_HANDLER
COMMAND_CODE_HANDLER 비슷하지만 부모 창에서 반영된 맵 명령입니다.
REFLECTED_COMMAND_CODE_HANDLER( code, func )
매개 변수
code
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
REFLECTED_COMMAND_HANDLER
COMMAND_HANDLER 비슷하지만 부모 창에서 반영된 맵 명령입니다.
REFLECTED_COMMAND_HANDLER( id, code, func )
매개 변수
id
[in] 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자입니다.
code
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
REFLECTED_COMMAND_ID_HANDLER
COMMAND_ID_HANDLER 비슷하지만 부모 창에서 반영된 맵 명령입니다.
REFLECTED_COMMAND_ID_HANDLER( id, func )
매개 변수
id
[in] 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
REFLECTED_COMMAND_RANGE_CODE_HANDLER
COMMAND_RANGE_CODE_HANDLER 비슷하지만 부모 창에서 반영된 맵 명령입니다.
REFLECTED_COMMAND_RANGE_CODE_HANDLER( idFirst, idLast, code, func )
매개 변수
idFirst
[in] 연속된 컨트롤 식별자 범위의 시작을 표시합니다.
idLast
[in] 연속된 컨트롤 식별자 범위의 끝을 표시합니다.
code
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
REFLECTED_COMMAND_RANGE_HANDLER
COMMAND_RANGE_HANDLER 비슷하지만 부모 창에서 반영된 맵 명령입니다.
REFLECTED_COMMAND_RANGE_HANDLER( idFirst, idLast, func )
매개 변수
idFirst
[in] 연속된 컨트롤 식별자 범위의 시작을 표시합니다.
idLast
[in] 연속된 컨트롤 식별자 범위의 끝을 표시합니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
REFLECTED_NOTIFY_CODE_HANDLER
NOTIFY_CODE_HANDLER 비슷하지만 부모 창에서 반영된 알림을 매핑합니다.
REFLECTED_NOTIFY_CODE_HANDLER_EX( cd, func )
매개 변수
cd
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
REFLECTED_NOTIFY_HANDLER
NOTIFY_HANDLER 비슷하지만 부모 창에서 반영된 알림을 매핑합니다.
REFLECTED_NOTIFY_HANDLER( id, cd, func )
매개 변수
id
[in] 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자입니다.
cd
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
REFLECTED_NOTIFY_ID_HANDLER
NOTIFY_ID_HANDLER 비슷하지만 부모 창에서 반영된 알림을 매핑합니다.
REFLECTED_NOTIFY_ID_HANDLER( id, func )
매개 변수
id
[in] 메뉴 항목, 컨트롤 또는 액셀러레이터의 식별자입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
REFLECTED_NOTIFY_RANGE_CODE_HANDLER
NOTIFY_RANGE_CODE_HANDLER 비슷하지만 부모 창에서 반영된 알림을 매핑합니다.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )
매개 변수
idFirst
[in] 연속된 컨트롤 식별자 범위의 시작을 표시합니다.
idLast
[in] 연속된 컨트롤 식별자 범위의 끝을 표시합니다.
cd
[in] 알림 코드입니다.
func
[in] 메시지 처리기 함수의 이름입니다.
요구 사항
헤더: atlwin.h
REFLECTED_NOTIFY_RANGE_HANDLER
NOTIFY_RANGE_HANDLER 비슷하지만 부모 창에서 반영된 알림을 매핑합니다.
REFLECTED_NOTIFY_RANGE_HANDLER( idFirst, idLast, func )
매개 변수
idFirst
[in] 연속된 컨트롤 식별자 범위의 시작을 표시합니다.
idLast
[in] 연속된 컨트롤 식별자 범위의 끝을 표시합니다.
func
[in] 메시지 처리기 함수의 이름입니다.