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
. 동일한 개체에서 두 메서드를 모두 호출하지는 마십시오.
또한 CWindowImpl
ATL은 CContainedWindow를 제공하여 다른 개체에 포함된 창을 만듭니다.
기본 클래스 소멸자(~ CWindowImplRoot
)는 개체가 제거되기 전에 창이 사라지도록 합니다.
CWindowImpl
CWindowImplBaseT
에서 파생CWindowImplRoot
되는 및 CMessageMap에서 TBase
파생됩니다.
에 대한 자세한 내용은 | 참조 |
---|---|
컨트롤 만들기 | ATL 자습서 |
ATL에서 창 사용하기 | ATL 창 클래스 |
ATL 프로젝트 마법사 | ATL 프로젝트 만들기 |
상속 계층 구조
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] 제거되는 창에 대한 핸들입니다.
설명
기본 구현은 아무 작업도 수행하지 않지만 창을 삭제하기 전에 정리를 처리하도록 이 함수를 재정의 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
의할 수 있습니다.