표준 Windows 메시지 처리기

기본 표준 Windows 메시지 처리기 (WM_) 클래스에서 미리 정의 된 CWnd.이 처리기의 이름은 해당 메시지 이름을 기반으로 하는 클래스 라이브러리.예를 들어, 처리기는 WM_PAINT 메시지에서 선언 CWnd 로:

afx_msg void OnPaint();

Afx_msg 키워드는 C++의 제안 가상 처리기를 구분 하 여 키워드 CWnd 멤버 함수입니다.이러한 함수는 실제로 가상 수 없습니다 단. 대신 메시지 맵은 통해 구현 됩니다.메시지 맵을 표준 전처리기 매크로 C++ 언어 확장에 전적으로 사용자에 따라 달라 집니다.Afx_msg 전처리 후에 공백 키워드를 해결 합니다.

기본 클래스에 정의 된 처리기를 재정의 하려면 단순히 동일한 프로토타입 사용 하는 함수 처리기에 대 한 메시지 맵 엔트리를 만들려면 하 고 파생된 클래스에 정의 합니다.처리기 "재정의" 처리기를 클래스의 기본 클래스에서 같은 이름의.

경우에 따라서는 처리기의 기본 클래스 및 Windows 메시지에서 작동할 수 있도록 기본 클래스의 재정의 된 처리기를 호출 해야 합니다.사용자가 재정의할 때 기본 클래스 처리기를 호출 하는 위치는 상황에 따라 달라 집니다.때로는 먼저 기본 클래스 처리기를 호출 하 고 때로는 마지막으로 해야 합니다.메시지를 직접 처리 하지 않도록 선택 하면 때때로 기본 클래스 처리기를 조건부로 호출.때로는 기본 클래스 처리기를 호출한 다음 고유한 값 이나 기본 클래스 처리기가 반환 하는 상태에 따라 처리기 코드를 조건부로 실행 해야 합니다.

주의 정보주의

이러한 기본 클래스 처리기에 전달 하려는 경우 처리기에 전달 된 인수를 수정 하는 것이 안전 하지 않습니다.예를 들어,를 수정할 수 있습니다는 nChar 의 인수는 OnChar 처리기 (대문자로 변환할 예를 들어,).이 문제를 상당히 불분명 하지만이 효과 위해 수행 해야 할 경우 사용 하는 CWnd 멤버 함수 SendMessage 대신.

어떻게 특정된 메시지를 무시 하는 적절 한 방법을 알 수 있습니까?속성 창의 처리기 함수는 지정 된 메시지에 대 한 기초를 씁니다 때 —는 OnCreate 에 대 한 처리기 WM_CREATE, 예를 들어-이 권장 하는 재정의 된 멤버 함수의 형태로 스케치.다음 예제에서는 처리기 먼저 기본 클래스 처리기를 호출만-1를 반환 하지 않는 따라 조건을 진행 것이 좋습니다.

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   if (CFormView::OnCreate(lpCreateStruct) == -1)
      return -1;

   // TODO:  Add your specialized creation code here

   return 0;
}

규칙에 따라이 처리기의 이름은 접두사로 "에서" 시작 다른 몇 가지를 작성 하는 동안 일부 이러한 처리기 인수를 취하지 합니다.일부는 반환 형식 이외의 void.모든 기본 처리기 WM_ 는 메시지 설명에 MFC 참조 클래스의 멤버 함수는 CWnd 이름이 시작 "을 사용 합니다." 멤버 함수 선언에서 CWnd 앞에 있는 afx_msg.

참고 항목

개념

메시지 처리기 함수를 선언합니다.