Aracılığıyla paylaş


CWindowImpl Sınıfı

Pencere oluşturma veya alt sınıflama yöntemleri sağlar.

Önemli

Bu sınıf ve üyeleri Windows Çalışma Zamanı yürütülen uygulamalarda kullanılamaz.

Sözdizimi

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

Parametreler

T
öğesinden CWindowImpltüretilen yeni sınıfınız.

TBase
Sınıfınızın temel sınıfı. Varsayılan olarak, temel sınıf CWindow'dır.

TWinTraits
Pencerenizin stillerini tanımlayan bir nitelik sınıfı. Varsayılan değer: CControlWinTraits.

Üyeler

Genel Yöntemler

Veri Akışı Adı Açıklama
CWindowImpl::Create Bir pencere oluşturur.

CWindowImplBaseT Yöntemleri

Veri Akışı Adı Açıklama
DefWindowProc Varsayılan ileti işlemeyi sağlar.
GetCurrentMessage Geçerli iletiyi döndürür.
GetWindowProc Geçerli pencere yordamını döndürür.
OnFinalMessage Son ileti alındıktan sonra çağrılır (genellikle WM_NCDESTROY).
Alt SınıfWindow Bir pencereyi alt sınıflar.
UnsubclassWindow Daha önce alt sınıflanmış bir pencereyi geri yükler.

Statik Yöntemler

Veri Akışı Adı Açıklama
GetWndClassInfo Pencere sınıfı bilgilerini yöneten CWndClassInfo'nun statik bir örneğini döndürür.
WindowProc Pencereye gönderilen iletileri işler.

Veri Üyeleri

Veri Akışı Adı Açıklama
m_pfnSuperWindowProc Pencere sınıfının özgün pencere yordamını gösterir.

Açıklamalar

Var olan bir pencereyi pencere veya alt sınıf oluşturmak için kullanabilirsiniz CWindowImpl . pencere yordamı, CWindowImpl iletileri uygun işleyicilere yönlendirmek için bir ileti eşlemesi kullanır.

CWindowImpl::Create, CWndClassInfo tarafından yönetilen pencere sınıfı bilgilerini temel alan bir pencere oluşturur. CWindowImplDECLARE_WND_CLASS makroyu içerir; yani CWndClassInfo yeni bir pencere sınıfı kaydeder. Varolan bir pencere sınıfını üst sınıfa almak istiyorsanız, sınıfınızı öğesinden CWindowImpl türetin ve DECLARE_WND_SUPERCLASS makroyu ekleyin. Bu durumda, CWndClassInfo var olan bir sınıfı temel alan ancak kullanan CWindowImpl::WindowProcbir pencere sınıfı kaydeder. Örneğin:

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

Not

CWndClassInfo Yalnızca bir pencere sınıfı için bilgileri yönettiğinden, örneği CWindowImpl aracılığıyla oluşturulan her pencere aynı pencere sınıfını temel alır.

CWindowImpl ayrıca pencere alt sınıflamasını da destekler. SubclassWindow yöntemi nesneye CWindowImpl var olan bir pencere ekler ve pencere yordamını olarak CWindowImpl::WindowProcdeğiştirir. Her örneği CWindowImpl farklı bir pencereyi alt sınıfa alabilir.

Not

Belirli CWindowImpl bir nesne için veya SubclassWindowçağrısı yapınCreate. Aynı nesnede her iki yöntemi de çağırmayın.

ATL'ye CWindowImplek olarak, başka bir nesnede bulunan bir pencere oluşturmak için CContainedWindow sağlar.

Temel sınıf yıkıcısı (~ CWindowImplRoot), nesne yok edilmeden önce pencerenin gitmesini sağlar.

CWindowImpl, ve CMessageMap'ten CWindowImplBaseTCWindowImplRoottüretilen ' den TBase türetilir.

Bunun hakkında daha fazla bilgi için: Bkz:
Denetim oluşturma ATL Öğreticisi
ATL'de pencereleri kullanma ATL Pencere Sınıfları
ATL Proje Sihirbazı ATL Projesi Oluşturma

Devralma Hiyerarşisi

CMessageMap

TBase

CWindowImplRoot

CWindowImplBaseT

CWindowImpl

Gereksinimler

Üst bilgi: atlwin.h

CWindowImpl::Create

Yeni bir pencere sınıfını temel alan bir pencere oluşturur.

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

Parametreler

hWndParent
[in] Üst veya sahip penceresinin tutamacı.

Rect
[in] Pencerenin konumunu belirten bir RECT yapısı. işaretçisi RECT veya başvuru ile geçirilebilir.

szWindowName
[in] Pencerenin adını belirtir. Varsayılan değer NULL'dir.

dwStyle
[in] Pencerenin stili. Bu değer, pencere için nitelikler sınıfı tarafından sağlanan stille birleştirilir. Varsayılan değer, nitelik sınıfına stil üzerinde tam denetim sağlar. Olası değerlerin listesi için bkz . Windows SDK'sında CreateWindow .

dwExStyle
[in] Genişletilmiş pencere stili. Bu değer, pencere için nitelikler sınıfı tarafından sağlanan stille birleştirilir. Varsayılan değer, nitelik sınıfına stil üzerinde tam denetim sağlar. Olası değerlerin listesi için bkz . Windows SDK'sında CreateWindowEx .

MenuOrID
[in] Alt pencere için pencere tanımlayıcısı. En üst düzey pencere için pencere için bir menü tutamacı. Varsayılan değer 0U'dur.

lpCreateParam
[in] Pencere oluşturma verilerinin işaretçisi. Tam açıklama için CreateWindowEx'e son parametrenin açıklamasına bakın.

Dönüş Değeri

Başarılı olursa, yeni oluşturulan pencerenin tanıtıcısı. Aksi takdirde NULL.

Açıklamalar

Create önce henüz kaydedilmemişse pencere sınıfını kaydeder. Yeni oluşturulan pencere nesneye CWindowImpl otomatik olarak eklenir.

Not

SubclassWindow'u zaten çağırdıysanız aramayınCreate.

Var olan bir pencere sınıfını temel alan bir pencere sınıfı kullanmak için, sınıfınızı öğesinden CWindowImpl türetin ve DECLARE_WND_SUPERCLASS makroyu ekleyin. Mevcut pencere sınıfının pencere yordamı m_pfnSuperWindowProc kaydedilir. Daha fazla bilgi için bkz . CWindowImpl'e genel bakış.

Not

MenuOrID parametresinin değeri olarak 0 kullanılıyorsa, derleyici hatasından kaçınmak için 0U (varsayılan değer) olarak belirtilmelidir.

CWindowImpl::D efWindowProc

İleti eşlemesi tarafından işlenmeyen iletileri işlemek için WindowProc tarafından çağrılır.

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

LRESULT DefWindowProc();

Parametreler

uMsg
[in] Pencereye gönderilen ileti.

wParam
[in] İletiye özgü ek bilgiler.

lParam
[in] İletiye özgü ek bilgiler.

Dönüş Değeri

İleti işlemenin sonucu.

Açıklamalar

Varsayılan olarak, DefWindowProc ileti bilgilerini m_pfnSuperWindowProc'de belirtilen pencere yordamına göndermek için CallWindowProc Win32 işlevini çağırır.

Parametresiz işlevi, gerekli parametreleri geçerli iletiden otomatik olarak alır.

CWindowImpl::GetCurrentMessage

Yapıda MSG paketlenmiş geçerli iletiyi döndürür.

const MSG* GetCurrentMessage();

Dönüş Değeri

Geçerli ileti.

CWindowImpl::GetWindowProc

Geçerli pencere yordamını döndürür WindowProc.

virtual WNDPROC GetWindowProc();

Dönüş Değeri

Geçerli pencere yordamı.

Açıklamalar

Pencere yordamını kendi yordamınızla değiştirmek için bu yöntemi geçersiz kılın.

CWindowImpl::GetWndClassInfo

Pencere sınıfı bilgilerine erişmek için Create tarafından çağrılır .

static CWndClassInfo& GetWndClassInfo();

Dönüş Değeri

CWndClassInfo'nun statik bir örneği.

Açıklamalar

Varsayılan olarak, CWindowImpl yeni bir pencere sınıfı belirten DECLARE_WND_CLASS makro aracılığıyla bu yöntemi alır.

Varolan bir pencere sınıfını üst sınıfa almak için, sınıfınızı öğesinden CWindowImpl türetin ve geçersiz kılmak GetWndClassInfoiçin DECLARE_WND_SUPERCLASS makroyu ekleyin. Daha fazla bilgi için bkz . CWindowImpl'e genel bakış.

DECLARE_WND_CLASS ve DECLARE_WND_SUPERCLASS makrolarını kullanmanın yanı sıra, kendi uygulamanızla geçersiz kılabilirsiniz GetWndClassInfo .

CWindowImpl::m_pfnSuperWindowProc

Pencereye bağlı olarak, aşağıdaki pencere yordamlarından birine işaret eder.

WNDPROC m_pfnSuperWindowProc;

Açıklamalar

Pencere türü Pencere yordamı
DECLARE_WND_CLASS makro aracılığıyla belirtilen yeni bir pencere sınıfını temel alan bir pencere. DefWindowProc Win32 işlevi.
DECLARE_WND_SUPERCLASS makro aracılığıyla belirtilen, var olan bir sınıfı değiştiren bir pencere sınıfını temel alan bir pencere. Mevcut pencere sınıfının pencere yordamı.
Alt sınıf bir pencere. Alt sınıf pencerenin özgün pencere yordamı.

CWindowImpl::D efWindowProc , içinde m_pfnSuperWindowProckaydedilen pencere yordamına ileti bilgilerini gönderir.

CWindowImpl::OnFinalMessage

Son iletiyi aldıktan sonra çağrılır (genellikle WM_NCDESTROY).

virtual void OnFinalMessage(HWND hWnd);

Parametreler

hWnd
[in] Yok edilen pencerenin tutamacı.

Açıklamalar

varsayılan uygulaması OnFinalMessage hiçbir şey yapmaz, ancak bir pencereyi yok etmeden önce temizlemeyi işlemek için bu işlevi geçersiz kılabilirsiniz. Pencere yok etme işlemi sırasında nesnenizi otomatik olarak silmek istiyorsanız, bu işlevi çağırabilirsiniz delete this; .

CWindowImpl::SubclassWindow

hWnd tarafından tanımlanan pencereyi alt sınıflara ekler ve nesneye CWindowImpl ekler.

BOOL SubclassWindow(HWND hWnd);

Parametreler

hWnd
[in] Alt sınıflandırılan pencerenin tutamacı.

Dönüş Değeri

Pencere başarıyla alt sınıflandırılırsa DOĞRU; aksi takdirde YANLIŞ.

Açıklamalar

Alt sınıflandırılmış pencere artık CWindowImpl::WindowProc kullanıyor. Özgün pencere yordamı m_pfnSuperWindowProc kaydedilir.

Not

Oluştur'u zaten çağırdıysanız aramayınSubclassWindow.

CWindowImpl::UnsubclassWindow

Alt sınıflanmış pencereyi nesneden CWindowImpl ayırır ve m_pfnSuperWindowProc kaydedilen özgün pencere yordamını geri yükler.

HWND UnsubclassWindow();

Dönüş Değeri

Daha önce alt sınıflanmış pencerenin tutamacı.

CWindowImpl::WindowProc

Bu statik işlev pencere yordamını uygular.

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

Parametreler

hWnd
[in] Pencerenin tutamacı.

uMsg
[in] Pencereye gönderilen ileti.

wParam
[in] İletiye özgü ek bilgiler.

lParam
[in] İletiye özgü ek bilgiler.

Dönüş Değeri

İleti işlemenin sonucu.

Açıklamalar

WindowProc, iletileri uygun işleyicilere yönlendirmek için varsayılan ileti eşlemesini (BEGIN_MSG_MAP ile bildirilmiş) kullanır. Gerekirse, WindowProc ek ileti işleme için DefWindowProc'ı çağırır. Son ileti işlenmezse aşağıdakileri WindowProc yapar:

  • Pencerenin aboneliği kaldırılmışsa, abonelikten kaldırma işlemi gerçekleştirir.

  • öğesini temizler m_hWnd.

  • Pencere yok edilmeden önce OnFinalMessage'i çağırır.

İletileri işlemek için farklı bir mekanizma sağlamak üzere geçersiz kılabilirsiniz WindowProc .

Ayrıca bkz.

BEGIN_MSG_MAP
CComControl Sınıfı
Sınıfa Genel Bakış