Aracılığıyla paylaş


CWindowImpl içeren bir pencere uygulama

Bir pencere uygulamak için bir sınıftan türer CWindowImpl.Türetilmiş sınıfınızda bir ileti harita ve ileti işleyicisi işlevler bildirir.Şimdi, sınıfınızın üç farklı yolla kullanabilirsiniz:

  • Yeni bir Windows sınıf tabanlı bir pencere oluşturma

  • Varolan bir Windows sınıfı üst sınıf

  • Varolan bir pencerenin alt sınıfı

Yeni bir Windows sınıf tabanlı bir pencere oluşturma

CWindowImpliçeren declare_wnd_class Windows sınıf bilgilerini bildirmek için makro.Bu makro uygulayan GetWndClassInfo kullanır işlev CWndClassInfo yeni bir Windows sınıfı bilgileri tanımlamak için.Zaman CWindowImpl::Create olarak adlandırılan, bu Windows sınıfı kayıtlı ve yeni bir pencere oluşturulur.

[!NOT]

CWindowImplgeçen null için DECLARE_WND_CLASS atl Windows sınıf adı üretmek anlamına gelir makro.Kendi adını belirtmek için bir dize geçmesi DECLARE_WND_CLASS , kendi CWindowImpl-türetilmiş sınıf.

Örnek

Yeni bir Windows sınıf tabanlı bir pencere uygulayan bir sınıf örneği aşağıda 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;
   }

};

Bir pencere oluşturmak için bir kopyasını oluşturmak CMyWindow ve sonra call Create yöntemi.

[!NOT]

Varsayılan Windows sınıfı bilgileri geçersiz kılmak için uygulayan GetWndClassInfo ayarlayarak, türetilmiş bir sınıf yöntemi CWndClassInfo üyeleri için uygun değerleri.

Aşağıdaki sınıf, üst sınıflardaki Standart Düzen örneğidir sınıfı:

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;
   }
};

Superclassed düzenleme penceresi oluşturmak için bir kopyasını oluşturmak CMyEdit ve sonra call Create yöntemi.

Varolan bir Windows sınıfı superclassing

declare_wnd_superclass makrosu, o üst sınıflardaki varolan Windows bir pencere oluşturmak verir sınıfı.Bu makro belirlemek sizin CWindowImpl-türetilmiş sınıf.Diğer atl pencere gibi iletileri bir ileti eşleme tarafından ele alınır.

Kullandığınızda, DECLARE_WND_SUPERCLASS, yeni bir Windows sınıf kayıtlı.Bu yeni sınıfı belirtir, ancak pencere yordamı ile değiştirecek varolan bir sınıfı ile aynı olacaktır CWindowImpl::WindowProc (veya işlevinizin bu yöntemi geçersiz kılar).

Varolan bir pencere sınıflara

Varolan bir pencerenin alt sınıf için bir sınıf türetin CWindowImpl ve iki önceki durumda olduğu gibi bir ileti eşleme bildirin.Ancak, alt sınıf zaten var olan bir pencere olacak bu yana herhangi bir Windows sınıfı bilgileri belirtmezseniz unutmayın.

Arama yerine Create, çağrı SubclassWindow ve alt sınıf için istediğiniz varolan pencere tanıtıcısı geçirmek.Pencerenin alt sınıfı bir kez kullanmak CWindowImpl::WindowProc (veya işlevinizin bu yöntemi geçersiz kılar) ileti eşleme iletileri yönlendirmek için.Nesnenizin subclassed penceresinden ayırmak için çağrı UnsubclassWindow.Pencerenin orijinal pencere yordamı daha sonra geri yüklenecektir.

Ayrıca bkz.

Başvuru

Bir pencere uygulama