Cwindowimpl로 창 구현
창을 구현 하는 클래스에서 파생 CWindowImpl.파생된 클래스에서 메시지 맵과 메시지 처리기 함수를 선언 합니다.이제 세 가지 방법으로 클래스를 사용할 수 있습니다.
새 Windows 클래스를 기반으로 창 만들기
기존 Windows 클래스를 슈퍼 클래스
기존 창 서브 클래스
새 Windows 클래스를 기반으로 창 만들기
CWindowImpl포함 된 DECLARE_WND_CLASS Windows 클래스를 선언 하는 매크로.이 매크로 구현 된 GetWndClassInfo 함수를 사용 하 여 CWndClassInfo 정보 새 Windows 클래스를 정의 합니다.때 CWindowImpl::Create 이라고,이 Windows 클래스 등록 되지 및 새 창이 만들어집니다.
[!참고]
CWindowImpl전달 NULL 에 있는 DECLARE_WND_CLASS 매크로 ATL Windows 클래스 이름을 생성 합니다.자신의 이름을 지정 하려면 문자열을 전달 DECLARE_WND_CLASS 에서 사용자 CWindowImpl-클래스를 파생 합니다.
예제
다음은 새 Windows 클래스를 기반으로 창을 구현 하는 클래스의 예입니다.
class CMyCustomWnd : public CWindowImpl<CMyCustomWnd>
{
public:
// Optionally specify name of the new Windows class
DECLARE_WND_CLASS(_T("MyName"))
// If this macro is not specified in your
// class, ATL will generate a class name
BEGIN_MSG_MAP(CMyCustomWnd)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some painting code
return 0;
}
};
창을 만들려면 인스턴스 만들기 CMyWindow 다음 호출에서 만들기 메서드.
[!참고]
기본 Windows 클래스 정보를 무시 하려면 구현에서 GetWndClassInfo 메서드를 설정 하 여 파생된 클래스에는 CWndClassInfo 멤버를 적절 한 값.
다음 해당 수퍼 클래스 표준 편집 클래스의 예는 클래스:
class CMyEdit : public CWindowImpl<CMyEdit>
{
public:
// "Edit" is the name of the standard Windows class.
// "MyEdit" is the name of the new Windows class
// that will be based on the Edit class.
DECLARE_WND_SUPERCLASS(_T("MyEdit"), _T("Edit"))
BEGIN_MSG_MAP(CMyEdit)
MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some character handling code
return 0;
}
};
슈퍼 편집 창을 만들기 위해 인스턴스 만들기 CMyEdit 다음 호출에서 만들기 메서드.
기존 Windows 클래스를 슈퍼 클 래 싱
DECLARE_WND_SUPERCLASS 매크로 사용 하면 기존 Windows는 해당 수퍼 클래스는 창을 만들 수 클래스.이 매크로에 지정 하면 CWindowImpl-파생 클래스.다른 ATL 창 처럼 메시지는 메시지 맵에서 처리 합니다.
사용 하는 경우 DECLARE_WND_SUPERCLASS, 새 Windows 클래스를 등록 합니다.이 새 클래스는 기존 클래스를 지정 하지만 창 프로시저를 대체 합니다 수 CWindowImpl::WindowProc (또는이 메서드를 재정의 하는 함수).
기존 창 서브클래싱
기존 창을 서브 클래스 하는 클래스에서 파생 CWindowImpl 하 고 앞의 두 경우와 같이 메시지 맵을 선언 합니다.이미 기존 창을 서브 클래스를 것 이므로 Windows 클래스 정보를 지정 하지 않는 것 단.
대신 전화 만들기, 호출 SubclassWindow 하 고 서브클래싱하려면 원하는 기존 창 핸들을 전달 합니다.창이 서브클래싱된 후 사용 CWindowImpl::WindowProc (또는이 메서드를 재정의 하는 함수) 메시지 맵에 메시지를 보내도록 합니다.서브클래싱된 창의 개체 로부터 분리 하려면 호출 UnsubclassWindow.다음은 창의 원래 창 프로시저를 복원 됩니다.