Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Um ein Fenster zu implementieren, leiten Sie eine Klasse von CWindowImpl.In der abgeleiteten Klasse deklarieren Sie eine Meldungszuordnung und die Meldungshandlerfunktionen.Sie können die Klasse auf drei Arten jetzt verwenden:
Erstellen Sie ein Fenster auf Grundlage einer neue Windows-Klasse erstellt
Übergeordnete Klasse eine vorhandene Windows-Klasse
Ordnen Sie ein vorhandenes Fenster unter
Erstellen eines Fensters auf Grundlage einer neue Windows-Klasse
CWindowImpl enthält das DECLARE_WND_CLASS-Makro, um Windows-Klasseninformationen zu deklarieren.Dieses Makro implementiert die GetWndClassInfo-Funktion, die CWndClassInfo verwendet, um Informationen einer neue Windows-Klasse zu definieren.Wenn CWindowImpl::Create aufgerufen wird, wird diese Windows-Klasse registriert und ein neues Fenster wird erstellt.
Hinweis |
|---|
CWindowImpl führt NULL zum DECLARE_WND_CLASS-Makro, das bedeutet, dass ATL einen Windows-Klassennamen generiert.Um einen eigenen Namen anzugeben, übergeben Sie eine Zeichenfolge zu DECLARE_WND_CLASS im CWindowImpl von abgeleitete Klasse. |
Beispiel
Das folgende Beispiel zeigt eine Klasse, die ein Fenster auf Grundlage einer neue Windows-Klasse implementiert:
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;
}
};
Um ein Fenster zu erstellen, erstellen Sie eine Instanz von CMyWindow und rufen dann die Create-Methode auf.
Hinweis |
|---|
Um die Standardeinstellungen Windows-Klasseninformationen zu überschreiben, implementieren Sie die GetWndClassInfo-Methode in der abgeleiteten Klasse mit der CWndClassInfo-Member auf die entsprechenden Werte festlegen. |
Das folgende Beispiel zeigt eine Klasse, die die übergeordnete Klasse Standard-Bearbeiten-Klasse:
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;
}
};
Um das zu Bearbeitungsfenster zu erstellen, erstellen Sie eine Instanz von CMyEdit und rufen dann die Create-Methode auf.
Erstellen einer übergeordneten Klasse für eine vorhandene Windows-Klasse
Das DECLARE_WND_SUPERCLASS-Makro ermöglicht es Ihnen, ein Fenster erstellen, das übergeordnete Klasse eine vorhandene Windows-Klasse.Geben Sie dieses Makro im CWindowImpl von abgeleitete Klasse.wie jedes andere ATL-Fenster werden Meldungen durch eine Meldungszuordnung bearbeitet.
Wenn Sie DECLARE_WND_SUPERCLASS verwenden, wird eine neue Windows-Klasse registriert.Diese neue Klasse ist genauso, der die vorhandene Klasse Sie angeben, aber die Fensterprozedur durch CWindowImpl::WindowProc ersetzen werden (oder mit einer Funktion, die diese Methode überschreibt).
Erstellen von Unterklassen von einem vorhandenen Fensters
Um ein vorhandenes Fenster unterzuordnen, leiten Sie eine Klasse von CWindowImpl und deklarieren Sie eine Meldungszuordnung, wie in den vorherigen zwei Fällen.Beachten Sie jedoch die Sie keine Windows-Klasseninformationen angeben, wie Sie ein bereits vorhandenes Fenster unterordnen.
Anstatt aufzurufen, Create auf, rufen Sie SubclassWindow und führen Sie es das Handle zum vorhandenen Fenster, das Sie unterordnen möchten.Sobald das Fenster als Unterklasse definiert ist, wird CWindowImpl::WindowProc (oder die Funktion, die diese Methode überschreibt), um Meldungen auf die Meldungszuordnung zu verweisen.Um ein untergeordnetes Fenster aus dem Objekt aufzuheben, rufen Sie UnsubclassWindow auf.Die ursprüngliche Fensterprozedur des Fensters wird dann wiederhergestellt.
Hinweis