창을 구현, CWindowImpl에서 클래스를 파생 합니다. 파생된 클래스에서 메시지 맵과 메시지 처리기 함수를 선언 합니다. 이제 세 가지 방법으로 클래스를 사용할 수 있습니다.:
CWindowImpl DECLARE_WND_CLASS 매크로 선언 Windows 클래스 정보를 포함 합니다. 이 매크로 CWndClassInfo 를 사용 하 여 새 Windows 클래스 정보를 정의 하는 GetWndClassInfo 함수를 구현 합니다. CWindowImpl::Create 가 호출 될 때이 Windows 클래스를 등록 하 고 새 창이 생성。
메모nbsp;??ATL 창 클래스 이름 생성 됩니다 것을 의미 하는 DECLARE_WND_CLASS 매크로 CWindowImpl NULL 전달 합니다. 자신의 이름을 지정 하려면 문자열 CWindowImpl에서 DECLARE_WND_CLASS 을 전달-파생 클래스(&N)。
다음은 새 Windows 클래스를 기반으로 창을 구현 하는 클래스의 예:
cMyWindow 클래스: 공용 CWindowImpllt;CMyWindow >,...
{
공개:
? / / 필요한 경우 새 Windows 클래스의 이름을 지정
? DECLARE_WND_CLASS("MyName") / /이 매크로에 지정 하지 않은 경우 귀하의
???????????? / / 클래스, ATL 클래스 이름 생성
? ...
BEGIN_MSG_MAP(CMyWindow)
???? MESSAGE_HANDLER (WM_PAINT, OnPaint)
? END_MSG_MAP()
LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
? {
???? / / 일부 그림 코드
???? 0; 반환
? }
}
창을 만들의 인스턴스를 만들고 CMyWindow 다음 Create 메서드를 호출 하 고。
메모nbsp;??기본 Windows 클래스 정보를 재정의 하려면 GetWndClassInfo 메서드를 파생된 클래스에서 구현 적절 한 값을 CWndClassInfo 멤버를 설정 하 여(&N)。
DECLARE_WND_SUPERCLASS 매크로 사용 하면 그 수퍼 기존 윈도우 창을 만들 수 있습니다 클래스. CWindowImpl에서이 매크로 지정-클래스를 파생 합니다. 다른 ATL 창 처럼 메시지를 메시지 맵을 통해 처리。
DECLARE_WND_SUPERCLASS를 사용할 때 새 창 클래스를 등록 됩니다. 이 새 클래스를 지정 하지만 CWindowImpl::WindowProc (또는이 메서드를 재정의 하는 함수) 창 프로시저를 대체 하는 기존 클래스와 같은 것입니다.
다음은 클래스의 예는 수퍼 표준 편집 클래스:
cMyEdit 클래스: 공용 CWindowImpllt;CMyEdit >,...
{
공개:
? / / "편집" 표준 Windows 클래스의 이름입니다.
? / / "MyEdit"는 새 Windows 클래스의 이름을
? / / 그 편집 클래스에 따라 달라 집니다.
? DECLARE_WND_SUPERCLASS ("편집", "MyEdit")
...
? BEGIN_MSG_MAP(CMyEdit)
???? MESSAGE_HANDLER (WM_CHAR, OnChar)
? END_MSG_MAP()
LRESULT OnChar(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
? {
???? / / 코드를 처리 하는 일부 문자를 할
? }
}
컨트롤인 경우 편집 창을 만들려면의 인스턴스를 만들고 CMyEdit 다음 Create 메서드를 호출 하 고。
Superclassing에 대 한 자세한 내용은 참조 Win32 SDK 에서 창 프로시저 Superclassing。
기존 창 서브 클래스 하 CWindowImpl 에서 클래스를 파생 하 고 메시지 맵을 두 이전 경우에서와 같이 선언 합니다. 단, 이미 기존 창을 서브 것 이다 이후 어떤 Windows 클래스 정보를 지정 하지 않으면。
Create를 호출 하는 대신 SubclassWindow 를 호출 하 고 기존 창을 서브 클래스 하에 핸들을 전달 합니다. 창이 서브클래싱된 일단 CWindowImpl::WindowProc (또는이 메서드를 재정의 하는 함수)를 사용 하 여 직접 메시지를 메시지 맵 것입니다 그것. 개체에서 서브클래싱된 창을 분리, UnsubclassWindow를 호출 합니다. 그런 다음 복원할 창의 원래 창 프로시저。
서브클래싱에 대 한 자세한 내용은 참조 Win32 SDK 에서 창 프로시저 서브클래싱。