Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir pencere uygulamak için öğesinden CWindowImplbir sınıf türetin. Türetilmiş sınıfınızda bir ileti eşlemesi ve ileti işleyici işlevleri bildirin. Artık sınıfınızı üç farklı şekilde kullanabilirsiniz:
Yeni Bir Windows Sınıfını Temel Alan Pencere Oluşturma
CWindowImpl
, Windows sınıf bilgilerini bildirmek için DECLARE_WND_CLASS makroyu içerir. Bu makro, yeni bir Windows sınıfının bilgilerini tanımlamak için CWndClassInfoGetWndClassInfoişlevini uygular. Çağrıldığında CWindowImpl::Create , bu Windows sınıfı kaydedilir ve yeni bir pencere oluşturulur.
Not
CWindowImpl makroya NULL geçirir; bu da ATL'nin DECLARE_WND_CLASS bir Windows sınıf adı oluşturacağı anlamına gelir. Kendi adınızı belirtmek için türetilmiş sınıfınızdaki CWindowImplDECLARE_WND_CLASS bir dize geçirin.
Örnek: Pencere uygulama
Aşağıda, yeni bir Windows sınıfını temel alan bir pencere uygulayan bir sınıf örneği verilmiştir:
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;
}
};
Pencere oluşturmak için öğesinin bir örneğini CMyWindow oluşturun ve yöntemini çağırın Create .
Not
Varsayılan Windows sınıf bilgilerini geçersiz kılmak için, üyeleri uygun değerlere ayarlayarak GetWndClassInfo türetilmiş sınıfınızda yöntemini uygulayınCWndClassInfo.
Mevcut Bir Windows Sınıfını Üst Sınıfa Alma
DECLARE_WND_SUPERCLASS makro, var olan bir Windows sınıfının üst sınıflarını oluşturan bir pencere oluşturmanıza olanak tanır. Türetilmiş sınıfınızda CWindowImplbu makroyı belirtin. Diğer tüm ATL pencerelerinde olduğu gibi iletiler de bir ileti eşlemesi tarafından işlenir.
DECLARE_WND_SUPERCLASS kullandığınızda yeni bir Windows sınıfı kaydedilir. Bu yeni sınıf, belirttiğiniz mevcut sınıfla aynı olur, ancak pencere yordamını ( CWindowImpl::WindowProc veya bu yöntemi geçersiz kılan işlevinizle) değiştirir.
Örnek: Edit sınıfını üst sınıfa ekleme
Aşağıda standart Edit sınıfını üst sınıfa alan bir sınıf örneği verilmiştir:
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;
}
};
Üst sınıf Düzenleme penceresini oluşturmak için öğesinin CMyEdit bir örneğini oluşturun ve yöntemini çağırın Create .
Var Olan Bir Pencereyi Alt Sınıflama
Var olan bir pencereyi alt sınıfa almak için, önceki iki örnekte olduğu gibi öğesinden CWindowImpl bir sınıf türetin ve bir ileti eşlemesi bildirin. Ancak, zaten var olan bir pencerenin alt sınıfını oluşturacağınız için herhangi bir Windows sınıf bilgisi belirtmediğinize dikkat edin.
çağrısı Createyapmak yerine çağırın SubclassWindow ve alt sınıf olarak kullanmak istediğiniz var olan pencereye tanıtıcıyı geçirin. Pencere alt sınıflandırıldıktan sonra, iletileri ileti eşlemesine yönlendirmek için (veya bu yöntemi geçersiz kılan işlevinizi) kullanır CWindowImpl::WindowProc . Alt sınıf bir pencereyi nesnenizden ayırmak için çağrısı yapın UnsubclassWindow. Ardından pencerenin özgün pencere yordamı geri yüklenir.