Sdílet prostřednictvím


Provádění okno s CWindowImpl

Provádět okno odvození třídy z CWindowImpl .V odvozené třídě Deklarujte mapa zprávy a funkce zpracování zpráv.Nyní můžete své třídy třemi různými způsoby:

  • Vytvoření nové třídy Windows na základě okna

  • Existující třídy Windows supertřída

  • Existující okno podtřídy

Vytváření okna podle nové třídy Windows

CWindowImplobsahuje DECLARE_WND_CLASS makro deklarovat třídu informace systému Windows.Implementuje toto makro GetWndClassInfo funkce, která používá CWndClassInfo k definování informací o nové třídy Windows.Při CWindowImpl::Create se nazývá tohoto systému Windows je registrována třída a vytváření nového okna.

[!POZNÁMKA]

CWindowImplpředává NULL se DECLARE_WND_CLASS makro, což znamená ATL bude generovat název třídy systému Windows.Zadat vlastní název, předat řetězec DECLARE_WND_CLASS ve vaší CWindowImpl -odvozené třídy.

Příklad

Následuje příklad třídy, která implementuje okna podle nové třídy 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;
   }

};

Vytvořit okno, vytvořte instanci CMyWindow a potom volat vytvořit metoda.

[!POZNÁMKA]

Přepsat výchozí informace třídy Windows, provede GetWndClassInfo metoda odvozené třídy nastavením CWndClassInfo členům příslušné hodnoty.

Následující příklad třídy je tato standardní úpravy nadřazených tříd třídy:

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

Vytvořit superclassed okna upravit, vytvořit instanci CMyEdit a potom volat vytvořit metoda.

Existující třídy Windows superclassing

DECLARE_WND_SUPERCLASS makro umožňuje vytvořit okno této nadřazené třídy existující Windows třídy.Toto makro zadejte vaše CWindowImpl -odvozené třídy.Podobně jako ostatní okna ATL zprávy zpracovávány mapy zprávy.

Při použití DECLARE_WND_SUPERCLASS , bude registrován nové třídy Windows.Tato nová třída bude stejný jako existující třídy, ale nahradí procedury okna s CWindowImpl::WindowProc (nebo funkcí, která přepíše tato metoda).

Subclassing existujícího okna

Podtřídu existující okno odvození třídy z CWindowImpl a deklarovat mapy zprávy podle dvou předchozích případech.Upozorňujeme však, protože se již existující okno podtřídy není zadat jakékoli informace o systému Windows třídy.

Místo volání vytvořit, volání SubclassWindow a předat popisovače na existující okno chcete podtřídy.Jakmile rozčlenění okna bude používat CWindowImpl::WindowProc (nebo funkce, přepíše tato metoda) přímého zprávy zpráva mapy.Odpojit okno subclassed z vašeho objektu, zavolejte na UnsubclassWindow .Potom bude obnoveno původní okno postupu v okně.

Viz také

Referenční dokumentace

Provádění okna