본문 바로가기
C++

MFC 표준 컨트롤에서 컨트롤 파생

by leo21c 2014. 2. 14.
SMALL

출처: http://msdn.microsoft.com/ko-kr/library/cc485501(v=vs.71).aspx#feedback


CWnd 파생 클래스를 사용하면 기존 컨트롤 클래스에서 새 클래스를 파생시켜 컨트롤의 동작을 수정할 수 있습니다.

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

  1. 기본 컨트롤 클래스에 클래스를 파생시키고 Create 멤버 함수를 재정의하여 기본 클래스 Create 함수에 필요한 인수를 제공하도록 합니다.
  2. 메시지 처리기 멤버 함수와 메시지 맵 엔트리를 제공하여 특정 Windows 메시지에 응답하는 컨트롤의 동작을 수정합니다. 함수에 메시지 매핑을 참조하십시오.
  3. 필요에 따라 새 멤버 함수를 제공하여 컨트롤의 기능을 확장합니다.

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

대화 상자에 파생 컨트롤을 놓으려면

  1. 파생 컨트롤 클래스에 있는 개체를 파생 대화 상자 클래스의 선언에 포함합니다.
  2. 대화 상자 클래스에 있는 OnInitDialog 멤버 함수를 재정의하여 해당 파생 컨트롤에 대한 SubclassDlgItem 멤버 함수를 호출합니다.

SubclassDlgItem은 대화 상자 템플릿에서 만든 컨트롤을 "동적으로 서브클래싱"합니다. 컨트롤이 동적으로 서브클래싱되면 Windows로 후크하고, 응용 프로그램 내에서 일부 메시지를 처리한 다음, 나머지 메시지를 Windows에 전달합니다. 자세한 내용은 MFC 참조에 있는 CWnd 클래스의 SubclassDlgItem 멤버 함수를 참조하십시오. 다음 예제에서는 OnInitDialog를 재정의하여 SubclassDlgItem을 호출하는 방법을 설명합니다.

BOOL CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();
    m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);
    return TRUE;
}

파생 컨트롤은 대화 상자 클래스에 포함되기 때문에 대화 상자가 생성될 때 생성되고, 대화 상자가 소멸될 때 소멸됩니다. 이 코드를 컨트롤 수동으로 추가의 예제와 비교합니다.

LIST

'C++' 카테고리의 다른 글

GetProcessMemoryInfo function  (0) 2014.03.04
VirtualQuery function  (0) 2014.03.04
MFC Custom Controls  (0) 2014.01.20
Adobe Photoshop Plugin Project  (1) 2013.12.11
Adobe Photoshop SDK  (0) 2013.12.11