Implementieren eines Fensters mit CWindowImpl

Um ein Fenster zu implementieren, leiten Sie eine Klasse von CWindowImpl. Deklarieren Sie in der abgeleiteten Klasse eine Meldungszuordnung und die Meldungshandlerfunktionen. Sie können jetzt Ihre Klasse auf drei verschiedene Arten verwenden.:

Erstellen ein Fenster basierend auf einer neuen Windows-Klasse

CWindowImpl enthält das DECLARE_WND_CLASS -Makro um Informationen zur Windows-Klasse zu deklarieren. Dieses Makro implementiert die GetWndClassInfo -Funktion, die CWndClassInfo verwendet, um die Informationen einer neuen Windows-Klasse definieren. Wenn CWindowImpl::Create aufgerufen wird, ist diese Windows-Klasse registriert und ein neues Fenster erstellt.

Hinweis&Nbsp;CWindowImpl übergibt NULL an das DECLARE_WND_CLASS -Makro, das bedeutet, dass ATL einen Windows-Klassennamen erstellt wird. Um Ihren eigenen Namen angeben möchten, übergeben Sie eine Zeichenfolge an DECLARE_WND_CLASS in Ihrem CWindowImpl-abgeleitete Klasse.

Es folgt ein Beispiel einer Klasse, die ein Fenster basierend auf einer neuen Windows-Klasse implementiert:

klasse CMyWindow: öffentliche CWindowImpllt;CMyWindow >,...
{
Öffentliche:
   / / Optional angeben, Name der neuen Windows-Klasse
   DECLARE_WND_CLASS("MyName") / / Wenn dieses Makro nicht in angegeben ist Ihre
              / / Klasse, ATL generiert einen Klassennamen
   ...

BEGIN_MSG_MAP(CMyWindow)
      MESSAGE_HANDLER (WM_PAINT, OnPaint)
   END_MSG_MAP()

LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
      / / Einige Zeichnungscode zu tun
      return 0;
   }
}

Wenn Sie ein Fenster erstellen möchten, erstellen Sie eine Instanz von CMyWindow und rufen anschließend die Create -Methode.

Hinweis&Nbsp;  Um die standardmäßige Windows-Klasseninformationen zu überschreiben, implementieren Sie die GetWndClassInfo -Methode in der abgeleiteten Klasse durch Festlegen der CWndClassInfo -Member auf die entsprechenden Werte.

Erstellen von übergeordneten Klassen einer vorhandenen Windows-Klasse

Das DECLARE_WND_SUPERCLASS -Makro können Sie zum Erstellen eines Fensters die Oberklassen einer vorhandenen Windows Klasse. Geben Sie dieses Makro in Ihrer CWindowImpl-abgeleitete Klasse. Wie alle anderen ATL-Fenster werden Nachrichten durch eine Meldungszuordnung behandelt.

Wenn Sie DECLARE_WND_SUPERCLASSverwenden, wird eine neue Windows-Klasse registriert. Diese neue Klasse wird die vorhandene Klasse identisch sein, Sie angeben, aber ersetzt die Fensterprozedur, mit CWindowImpl::WindowProc (oder Ihre Funktion, die diese Methode überschreibt).

Folgende ist ein Beispiel für eine Klasse die Klassen der standard-Edit Klasse:

klasse CMyEdit: öffentliche CWindowImpllt;CMyEdit >,...
{
Öffentliche:
   / / "Bearbeiten" ist der Name der Windows-Standardklasse.
   / / "MyEdit" ist der Name der neuen Windows-Klasse
   / /, die basiert auf der Klasse bearbeiten.
   DECLARE_WND_SUPERCLASS ("Bearbeiten", "MyEdit")

...
   BEGIN_MSG_MAP(CMyEdit)
      MESSAGE_HANDLER (WM_CHAR, OnChar)
   END_MSG_MAP()

LRESULT OnChar(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
      / / Do einige Zeichen Code zur Behandlung
   }
}

Wenn das übergeordnete Klasse zu einem Fenster erstellen möchten, erstellen Sie eine Instanz von CMyEdit und rufen anschließend die Create -Methode.

Weitere Informationen zum Erstellen von übergeordneten Klassen finden Sie unter Fenster Prozedur Erstellen von übergeordneten Klassen in der Win32 SDK.

Bilden von Unterklassen für ein vorhandenes Fenster

Unterklasse eines vorhandenen Fensters leiten Sie eine Klasse von CWindowImpl und deklarieren Sie eine Meldungszuordnung, wie in den vorherigen Fällen. Beachten Sie jedoch, dass Sie keine Windows-Klasseninformationen, da Sie Unterklasse ein bereits vorhandenes Fensters werden angeben.

Anstelle eines Aufrufs Erstellen, rufen Sie SubclassWindow und übergeben sie das Handle an das vorhandene Fenster Unterklasse möchten. Sobald das Fenster als Unterklasse definiert ist, wird es CWindowImpl::WindowProc (oder Ihre Funktion, die diese Methode überschreibt) verwenden, um direkte Nachrichten an die Meldungszuordnung. Um eine untergeordnete Fenster aus Ihrem Objekt zu trennen, rufen Sie UnsubclassWindow. Ursprüngliche Fensterprozedur des Fensters werden dann wiederhergestellt.

Weitere Informationen über das Erstellen von Unterklassen finden Sie unter Window Subclassing Verfahren in der Win32 SDK.

Index