다음을 통해 공유


표준 컨트롤에서 컨트롤 파생시키기

CWnd 파생 클래스와 마찬가지로 기존 컨트롤 클래스에서 새 클래스를 파생시켜 컨트롤의 동작을 수정할 수 있습니다.

파생 컨트롤 클래스를 만들려면

  1. 기존 컨트롤 클래스에서 클래스를 파생시키고 필요에 따라 멤버 함수를 재정의 Create 하여 기본 클래스 Create 함수에 필요한 인수를 제공합니다.

  2. 메시지 처리기 멤버 함수 및 메시지 맵 항목을 제공하여 특정 Windows 메시지에 대한 응답으로 컨트롤의 동작을 수정합니다. 함수에 메시지 매핑을 참조 하세요.

  3. 컨트롤의 기능을 확장하는 새 멤버 함수를 제공합니다(선택 사항).

대화 상자에서 파생 컨트롤을 사용하려면 추가 작업이 필요합니다. 대화 상자에서 컨트롤의 형식과 위치는 일반적으로 대화 상자 템플릿 리소스에 지정됩니다. 파생 컨트롤 클래스를 만드는 경우 리소스 컴파일러가 파생 클래스에 대해 아무것도 알지 못하므로 대화 상자 템플릿에서 지정할 수 없습니다.

대화 상자에 파생 컨트롤을 배치하려면

  1. 파생된 컨트롤 클래스의 개체를 파생된 대화 상자 클래스의 선언에 포함합니다.

  2. 파생된 컨트롤에 OnInitDialog 대한 멤버 함수를 호출하도록 대화 상자 클래스의 SubclassDlgItem 멤버 함수를 재정의합니다.

SubclassDlgItem 대화 상자 템플릿에서 만든 컨트롤을 "동적으로 서브클래스"합니다. 컨트롤이 동적으로 서브클래싱되면 Windows에 연결하고, 사용자 고유의 애플리케이션 내에서 일부 메시지를 처리한 다음, 다시 기본 메시지를 Windows에 전달합니다. 자세한 내용은 MFC 참조에서 클래스의 SubclassDlgItem 멤버 함수를 참조CWnd하세요. 다음 예제에서는 호출SubclassDlgItem에 대한 재정의 OnInitDialog 를 작성하는 방법을 보여줍니다.

BOOL CSubDialog::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);

   return TRUE;
}

파생된 컨트롤은 대화 상자 클래스에 포함되므로 대화 상자가 생성될 때 생성되고 대화 상자가 제거되면 제거됩니다. 이 코드를 직접 컨트롤 추가의 예제와 비교합니다.

참고 항목

컨트롤 만들기 및 사용
컨트롤