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 CWindowImpl
tü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. CWindowImpl
DECLARE_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::WindowProc
bir 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::WindowProc
değ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 CWindowImpl
ek 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 CWindowImplBaseT
CWindowImplRoot
tü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
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 GetWndClassInfo
iç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_pfnSuperWindowProc
kaydedilen 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
.