CWindowImpl 클래스

창을 만들거나 서브클래싱하기 위한 메서드를 제공합니다.

Important

이 클래스와 해당 멤버는 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다.

구문

template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>

매개 변수

T
CWindowImpl에서 파생된 새 클래스입니다.

TBase
클래스의 기본 클래스입니다. 기본적으로 기본 클래스는 CWindow입니다.

TWinTraits
창의 스타일을 정의하는 특성 클래스입니다. 기본값은 CControlWinTraits입니다.

멤버

공용 메서드

이름 설명
CWindowImpl::Create 창을 만듭니다.

CWindowImplBaseT 메서드

이름 설명
DefWindowProc 기본 메시지 처리를 제공합니다.
GetCurrentMessage 현재 메시지를 반환합니다.
GetWindowProc 현재 창 프로시저를 반환합니다.
OnFinalMessage 마지막 메시지를 받은 후 호출됩니다(일반적으로 WM_NCDESTROY).
SubclassWindow 창을 서브클래싱합니다.
UnsubclassWindow 이전에 서브클래싱된 창을 복원합니다.

정적 메서드

이름 설명
GetWndClassInfo 창 클래스 정보를 관리하는 CWndClassInfo정적 인스턴스를 반환합니다.
WindowProc 창으로 보내는 메시지를 처리합니다.

데이터 멤버

이름 설명
m_pfnSuperWindowProc 창 클래스의 원본 창 프로시저를 가리킵니다.

설명

창을 만들거나 기존 창을 서브클래싱하는 데 사용할 CWindowImpl 수 있습니다. 창 프로시저는 CWindowImpl 메시지 맵을 사용하여 메시지를 적절한 처리기로 전달합니다.

CWindowImpl::Create는 CWndClassInfo에서 관리하는 창 클래스 정보를 기반으로 창을 만듭니다. CWindowImpl 에는 DECLARE_WND_CLASS 매크로가 포함되어 있습니다. 즉 CWndClassInfo , 새 창 클래스를 등록합니다. 기존 창 클래스를 superclass하려면 클래스 CWindowImpl 를 파생시키고 DECLARE_WND_SUPERCLASS 매크로를 포함합니다. 이 경우 CWndClassInfo는 기존 클래스를 기반으로 하는 창 클래스 등록하지만 CWindowImpl::WindowProc를 사용합니다. 예시:

class ATL_NO_VTABLE CMyWindow :
   OtherInheritedClasses
   public CComControl<CMyWindow>
          // CComControl derives from CWindowImpl
{
public:
   // 1. The NULL parameter means ATL will generate a
   //    name for the superclass
   // 2. The "EDIT" parameter means the superclass is
   //    based on the standard Windows Edit box
   DECLARE_WND_SUPERCLASS(NULL, _T("EDIT"))

   // Remainder of class declaration omitted

참고 항목

CWndClassInfo는 한 윈도우 클래스의 정보만 관리하기 때문에, CWindowImpl의 인스턴스를 통해 생성된 각 창은 동일한 창 클래스를 기반으로 합니다.

CWindowImpl은 또한 창 서브클래싱도 지원합니다. SubclassWindow 메서드는 기존 창을 CWindowImpl 개체에 연결하고 창 프로시저를 CWindowImpl::WindowProc로 변경합니다. CWindowImpl의 각 인스턴스는 다른 창을 서브클래싱할 수 있습니다.

참고 항목

지정된 CWindowImpl 개체에 대해 또는 Create .를 호출합니다 SubclassWindow. 동일한 개체에서 두 메서드를 모두 호출하지는 마십시오.

또한 CWindowImplATL은 CContainedWindow를 제공하여 다른 개체에 포함된 창을 만듭니다.

기본 클래스 소멸자(~ CWindowImplRoot)는 개체가 제거되기 전에 창이 사라지도록 합니다.

CWindowImplCWindowImplBaseT에서 파생CWindowImplRoot되는 및 CMessageMap에서 TBase 파생됩니다.

에 대한 자세한 내용은 참조
컨트롤 만들기 ATL 자습서
ATL에서 창 사용하기 ATL 창 클래스
ATL 프로젝트 마법사 ATL 프로젝트 만들기

상속 계층 구조

CMessageMap

TBase

CWindowImplRoot

CWindowImplBaseT

CWindowImpl

요구 사항

헤더: atlwin.h

CWindowImpl::Create

새 창 클래스를 기반으로 창을 만듭니다.

HWND Create(
    HWND hWndParent,
    _U_RECT rect = NULL,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

매개 변수

hWndParent
[in] 부모 또는 소유자 창에 대한 핸들입니다.

rect
[in] 창의 위치를 지정하는 RECT 구조체입니다. 포인터 RECT 또는 참조로 전달할 수 있습니다.

szWindowName
[in] 창의 이름을 지정합니다. 기본값은 NULL입니다.

dwStyle
[in] 창의 스타일입니다. 이 값은 창의 특성 클래스에서 제공하는 스타일과 결합됩니다. 기본값은 특성 클래스에 스타일을 완전히 제어합니다. 가능한 값 목록은 Windows SDK의 CreateWindow를 참조하세요.

dwExStyle
[in] 확장 창 스타일입니다. 이 값은 창의 특성 클래스에서 제공하는 스타일과 결합됩니다. 기본값은 특성 클래스에 스타일을 완전히 제어합니다. 가능한 값 목록은 Windows SDK의 CreateWindowEx를 참조하세요.

MenuOrID
[in] 자식 창의 경우 창 식별자입니다. 최상위 창의 경우 창에 대한 메뉴 핸들입니다. 기본값은 0U입니다.

lpCreateParam
[in] 창 만들기 데이터에 대한 포인터입니다. 전체 설명은 CreateWindowEx에 대한 최종 매개 변수에 대한 설명을 참조하세요.

Return Value

성공하면 새로 만든 창에 대한 핸들입니다. 그렇지 않으면 NULL입니다.

설명

Create 먼저 아직 등록되지 않은 경우 창 클래스를 등록합니다. 새로 만든 창이 개체에 CWindowImpl 자동으로 연결됩니다.

참고 항목

이미 SubclassWindow를 호출한 경우에는 Create를 호출하지 마세요.

기존 창 클래스를 기반으로 하는 창 클래스를 사용하려면 클래스 CWindowImpl 를 파생시키고 DECLARE_WND_SUPERCLASS 매크로를 포함합니다. 기존 창 클래스의 창 프로시저는 m_pfnSuperWindowProc 저장됩니다. 자세한 내용은 CWindowImpl 개요를 참조하세요.

참고 항목

0이 MenuOrID 매개 변수의 값으로 사용되는 경우 컴파일러 오류를 방지하려면 0U(기본값)로 지정해야 합니다.

CWindowImpl::D efWindowProc

메시지 맵에서 처리되지 않는 메시지를 처리하기 위해 WindowProc 에서 호출됩니다.

LRESULT DefWindowProc(
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

LRESULT DefWindowProc();

매개 변수

uMsg
[in] 창에 보낸 메시지입니다.

wParam
[in] 추가 메시지 관련 정보입니다.

lParam
[in] 추가 메시지 관련 정보입니다.

Return Value

메시지 처리의 결과입니다.

설명

기본적으로 DefWindowProc CallWindowProc Win32 함수를 호출하여 메시지 정보를 m_pfnSuperWindowProc 지정된 창 프로시저로 보냅니다.

매개 변수가 없는 함수는 현재 메시지에서 필요한 매개 변수를 자동으로 검색합니다.

CWindowImpl::GetCurrentMessage

구조체에 패키지된 현재 메시지를 반환합니다 MSG .

const MSG* GetCurrentMessage();

Return Value

현재 메시지입니다.

CWindowImpl::GetWindowProc

현재 창 프로시저를 반환 WindowProc합니다.

virtual WNDPROC GetWindowProc();

Return Value

현재 창 프로시저입니다.

설명

창 프로시저를 사용자 고유의 프로시저로 바꾸려면 이 메서드를 재정의합니다.

CWindowImpl::GetWndClassInfo

창 클래스 정보에 액세스하기 위해 Create에서 호출됩니다.

static CWndClassInfo& GetWndClassInfo();

Return Value

CWndClassInfo정적 인스턴스입니다.

설명

기본적으로 CWindowImpl 새 창 클래스를 지정하는 DECLARE_WND_CLASS 매크로를 통해 이 메서드를 가져옵니다.

기존 창 클래스를 슈퍼 클래스로 지정하려면 클래스 CWindowImpl 를 파생시키고 재정GetWndClassInfo할 DECLARE_WND_SUPERCLASS 매크로를 포함합니다. 자세한 내용은 CWindowImpl 개요를 참조하세요.

DECLARE_WND_CLASS 및 DECLARE_WND_SUPERCLASS 매크로를 사용하는 것 외에도 고유한 구현으로 재정 GetWndClassInfo 의할 수 있습니다.

CWindowImpl::m_pfnSuperWindowProc

창에 따라 다음 창 프로시저 중 하나를 가리킵니다.

WNDPROC m_pfnSuperWindowProc;

설명

창 유형 창 프로시저
DECLARE_WND_CLASS 매크로를 통해 지정된 새 창 클래스를 기반으로 하는 창입니다. DefWindowProc Win32 함수입니다.
DECLARE_WND_SUPERCLASS 매크로를 통해 지정된 기존 클래스를 수정하는 창 클래스를 기반으로 하는 창입니다. 기존 창 클래스의 창 프로시저입니다.
서브클래스된 창입니다. 서브클래스된 창의 원래 창 프로시저입니다.

CWindowImpl::D efWindowProc 에서 저장된 m_pfnSuperWindowProc창 프로시저로 메시지 정보를 보냅니다.

CWindowImpl::OnFinalMessage

마지막 메시지를 받은 후 호출됩니다(일반적으로 WM_NCDESTROY).

virtual void OnFinalMessage(HWND hWnd);

매개 변수

hWnd
[in] 제거되는 창에 대한 핸들입니다.

설명

기본 구현은 아무 작업도 수행하지 않지만 창을 삭제하기 전에 클린up을 처리하도록 이 함수를 재정의 OnFinalMessage 할 수 있습니다. 창이 파괴될 때 개체를 자동으로 삭제하려면 이 함수에서 호출 delete this; 할 수 있습니다.

CWindowImpl::SubclassWindow

hWnd로 식별된 창을 서브클래싱하고 개체에 CWindowImpl 연결합니다.

BOOL SubclassWindow(HWND hWnd);

매개 변수

hWnd
[in] 서브클래스되는 창에 대한 핸들입니다.

Return Value

창이 성공적으로 서브클래스된 경우 TRUE입니다. 그렇지 않으면 FALSE입니다.

설명

이제 서브클래스된 창에서 CWindowImpl::WindowProc을 사용합니다. 원래 창 프로시저는 m_pfnSuperWindowProc 저장됩니다.

참고 항목

이미 Create를 호출한 경우에는 SubclassWindow를 호출하지 마세요.

CWindowImpl::UnsubclassWindow

개체에서 CWindowImpl 서브클래스된 창을 분리하고 m_pfnSuperWindowProc 저장된 원래 창 프로시저를 복원합니다.

HWND UnsubclassWindow();

Return Value

이전에 서브클래스된 창에 대한 핸들입니다.

CWindowImpl::WindowProc

이 정적 함수는 창 프로시저를 구현합니다.

static LRESULT CALLBACK WindowProc(
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

매개 변수

hWnd
[in] 창에 대한 핸들입니다.

uMsg
[in] 창에 보낸 메시지입니다.

wParam
[in] 추가 메시지 관련 정보입니다.

lParam
[in] 추가 메시지 관련 정보입니다.

Return Value

메시지 처리의 결과입니다.

설명

WindowProc는 기본 메시지 맵(BEGIN_MSG_MAP 사용하여 선언됨)을 사용하여 메시지를 적절한 처리기로 전달합니다. 필요한 WindowProc 경우 추가 메시지 처리를 위해 DefWindowProc를 호출합니다. 최종 메시지가 처리되지 WindowProc 않으면 다음을 수행합니다.

  • 창이 서브클래싱되지 않은 경우 구독 취소를 수행합니다.

  • m_hWnd을 지웁니다.

  • 창이 제거되기 전에 OnFinalMessage를 호출합니다.

메시지를 처리하기 위한 다른 메커니즘을 제공하도록 재정 WindowProc 의할 수 있습니다.

참고 항목

BEGIN_MSG_MAP
CComControl 클래스
클래스 개요