Partager via


CWindowImpl, classe

Fournit des méthodes pour créer ou sous-classer une fenêtre.

Important

Cette classe et ses membres ne peuvent pas être utilisés dans les applications qui s’exécutent dans Windows Runtime.

Syntaxe

template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>

Paramètres

T
Votre nouvelle classe, dérivée de CWindowImpl.

To ase
Classe de base de votre classe. Par défaut, la classe de base est CWindow.

TWinTraits
Classe de caractéristiques qui définit des styles pour votre fenêtre. Par défaut, il s’agit de CControlWinTraits.

Membres

Méthodes publiques

Nom Description
CWindowImpl ::Create Crée une fenêtre.

Méthodes CWindowImplBaseT

Nom Description
DefWindowProc Fournit le traitement du message par défaut.
GetCurrentMessage Retourne le message actuel.
GetWindowProc Retourne la procédure de fenêtre active.
OnFinalMessage Appelé après la réception du dernier message (généralement WM_NCDESTROY).
SubclassWindow Sous-classe une fenêtre.
UnsubclassWindow Restaure une fenêtre précédemment sous-classée.

Méthodes statiques

Nom Description
GetWndClassInfo Retourne une instance statique de CWndClassInfo, qui gère les informations de classe de fenêtre.
WindowProc Traite les messages envoyés à la fenêtre.

Données membres

Nom Description
m_pfnSuperWindowProc Pointe vers la procédure de fenêtre d'origine de la classe de fenêtre.

Notes

Vous pouvez utiliser CWindowImpl pour créer une fenêtre ou une sous-classe d’une fenêtre existante. la CWindowImpl procédure de fenêtre utilise un mappage de messages pour diriger les messages vers les gestionnaires appropriés.

CWindowImpl::Create crée une fenêtre basée sur les informations de classe de fenêtre gérées par CWndClassInfo. CWindowImpl contient la macro DECLARE_WND_CLASS , ce qui signifie CWndClassInfo qu’elle inscrit une nouvelle classe de fenêtre. Si vous souhaitez superclasser une classe de fenêtre existante, dérivez votre classe et CWindowImpl incluez la macro DECLARE_WND_SUPERCLASS . Dans ce cas, CWndClassInfo enregistre une classe de fenêtre basée sur une classe existante mais utilise CWindowImpl::WindowProc. Par exemple :

class ATL_NO_VTABLE CMyWindow :
   OtherInheritedClasses
   public CComControl<CMyWindow>
          // CComControl derives from CWindowImpl
{
public:
   // 1. The NULL parameter means ATL will generate a
   //    name for the superclass
   // 2. The "EDIT" parameter means the superclass is
   //    based on the standard Windows Edit box
   DECLARE_WND_SUPERCLASS(NULL, _T("EDIT"))

   // Remainder of class declaration omitted

Remarque

Étant donné que CWndClassInfo gère les informations d'une seule classe de fenêtre, chaque fenêtre créée via une instance de CWindowImpl est basée sur la même classe de fenêtre.

CWindowImpl prend également en charge le sous-classement de fenêtre. La méthode SubclassWindow attache une fenêtre existante à l'objet CWindowImpl et remplace la procédure de fenêtre par CWindowImpl::WindowProc. Chaque instance de CWindowImpl peut sous-classer une fenêtre différente.

Remarque

Pour un objet donnéCWindowImpl, appelez ou SubclassWindowCreate . N'appelez pas les deux méthodes sur le même objet.

En plus de CWindowImpl, ATL fournit CContainedWindow pour créer une fenêtre contenue dans un autre objet.

Le destructeur de classe de base (~ CWindowImplRoot) garantit que la fenêtre est passée avant la destruction de l’objet.

CWindowImpl dérive de CWindowImplBaseT, qui dérive de CWindowImplRoot, qui dérive de TBase et CMessageMap.

Pour plus d'informations sur Consultez
Création de contrôles Tutoriel ATL
Utilisation de fenêtres dans ATL ATL, classes de fenêtre
Assistant Projet ATL Création d’un projet ATL

Hiérarchie d'héritage

CMessageMap

TBase

CWindowImplRoot

CWindowImplBaseT

CWindowImpl

Spécifications

En-tête : atlwin.h

CWindowImpl ::Create

Crée une fenêtre basée sur une nouvelle classe de fenêtre.

HWND Create(
    HWND hWndParent,
    _U_RECT rect = NULL,
    LPCTSTR szWindowName = NULL,
    DWORD dwStyle = 0,
    DWORD dwExStyle = 0,
    _U_MENUorID MenuOrID = 0U,
    LPVOID lpCreateParam = NULL);

Paramètres

hWndParent
[in] Handle de la fenêtre parent ou propriétaire.

Rect
[in] Structure RECT spécifiant la position de la fenêtre. Il RECT peut être passé par pointeur ou par référence.

szWindowName
[in] Spécifie le nom de la fenêtre. La valeur par défaut est NULL.

dwStyle
[in] Style de la fenêtre. Cette valeur est combinée au style fourni par la classe de caractéristiques de la fenêtre. La valeur par défaut donne le contrôle total de la classe traits sur le style. Pour obtenir la liste des valeurs possibles, consultez CreateWindow dans le Kit de développement logiciel (SDK) Windows.

dwExStyle
[in] Style de fenêtre étendu. Cette valeur est combinée au style fourni par la classe de caractéristiques de la fenêtre. La valeur par défaut donne le contrôle total de la classe traits sur le style. Pour obtenir la liste des valeurs possibles, consultez CreateWindowEx dans le Kit de développement logiciel (SDK) Windows.

MenuOrID
[in] Pour une fenêtre enfant, identificateur de la fenêtre. Pour une fenêtre de niveau supérieur, une poignée de menu pour la fenêtre. La valeur par défaut est 0U.

lpCreateParam
[in] Pointeur vers les données de création de fenêtre. Pour obtenir une description complète, consultez la description du paramètre final sur CreateWindowEx.

Valeur de retour

Si elle réussit, la poignée de la fenêtre nouvellement créée. Sinon, NULL.

Notes

Create inscrit d’abord la classe window si elle n’a pas encore été inscrite. La fenêtre nouvellement créée est automatiquement attachée à l’objet CWindowImpl .

Remarque

N’appelez pas si vous avez déjà appelé CreateSubclassWindow.

Pour utiliser une classe de fenêtre basée sur une classe de fenêtre existante, dérivez votre classe et CWindowImpl incluez la macro DECLARE_WND_SUPERCLASS . La procédure de fenêtre de la classe de fenêtre existante est enregistrée dans m_pfnSuperWindowProc. Pour plus d’informations, consultez la vue d’ensemble de CWindowImpl .

Remarque

Si 0 est utilisé comme valeur pour le paramètre MenuOrID , il doit être spécifié en tant que 0U (valeur par défaut) pour éviter une erreur du compilateur.

CWindowImpl ::D efWindowProc

Appelé par WindowProc pour traiter les messages non gérés par le mappage de messages.

LRESULT DefWindowProc(
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

LRESULT DefWindowProc();

Paramètres

uMsg
[in] Message envoyé à la fenêtre.

wParam
[in] Informations supplémentaires spécifiques aux messages.

lParam
[in] Informations supplémentaires spécifiques aux messages.

Valeur de retour

Résultat du traitement des messages.

Notes

Par défaut, DefWindowProc appelle la fonction CallWindowProc Win32 pour envoyer les informations de message à la procédure de fenêtre spécifiée dans m_pfnSuperWindowProc.

La fonction sans paramètre récupère automatiquement les paramètres nécessaires à partir du message actuel.

CWindowImpl ::GetCurrentMessage

Retourne le message actuel, empaqueté dans la MSG structure.

const MSG* GetCurrentMessage();

Valeur de retour

Message actuel.

CWindowImpl ::GetWindowProc

Retourne WindowProc, la procédure de fenêtre active.

virtual WNDPROC GetWindowProc();

Valeur de retour

Procédure de fenêtre active.

Notes

Remplacez cette méthode pour remplacer la procédure de fenêtre par la vôtre.

CWindowImpl ::GetWndClassInfo

Appelé par Create pour accéder aux informations de classe de fenêtre.

static CWndClassInfo& GetWndClassInfo();

Valeur de retour

Instance statique de CWndClassInfo.

Notes

Par défaut, CWindowImpl obtient cette méthode via la macro DECLARE_WND_CLASS , qui spécifie une nouvelle classe de fenêtre.

Pour superclasser une classe de fenêtre existante, dérivez votre classe et CWindowImpl incluez la macro DECLARE_WND_SUPERCLASS à remplacer GetWndClassInfo. Pour plus d’informations, consultez la vue d’ensemble de CWindowImpl .

Outre l’utilisation des macros DECLARE_WND_CLASS et DECLARE_WND_SUPERCLASS, vous pouvez remplacer GetWndClassInfo par votre propre implémentation.

CWindowImpl ::m_pfnSuperWindowProc

Selon la fenêtre, pointe vers l’une des procédures de fenêtre suivantes.

WNDPROC m_pfnSuperWindowProc;

Notes

Type de fenêtre Procédure de fenêtre
Fenêtre basée sur une nouvelle classe de fenêtre, spécifiée par le biais de la macro DECLARE_WND_CLASS . Fonction Win32 DefWindowProc .
Fenêtre basée sur une classe de fenêtre qui modifie une classe existante, spécifiée par le biais de la macro DECLARE_WND_SUPERCLASS . Procédure de fenêtre de la classe de fenêtre existante.
Fenêtre sous-classée. Procédure de fenêtre d’origine de la fenêtre sous-classée.

CWindowImpl ::D efWindowProc envoie des informations de message à la procédure de fenêtre enregistrée dans m_pfnSuperWindowProc.

CWindowImpl ::OnFinalMessage

Appelé après avoir reçu le dernier message (généralement WM_NCDESTROY).

virtual void OnFinalMessage(HWND hWnd);

Paramètres

hWnd
[in] Poignée de la fenêtre détruite.

Notes

L’implémentation par défaut ne OnFinalMessage fait rien, mais vous pouvez remplacer cette fonction pour gérer propre up avant de détruire une fenêtre. Si vous souhaitez supprimer automatiquement votre objet lors de la destruction de la fenêtre, vous pouvez appeler delete this; cette fonction.

CWindowImpl ::SubclassWindow

Sous-classe la fenêtre identifiée par hWnd et l’attache à l’objet CWindowImpl .

BOOL SubclassWindow(HWND hWnd);

Paramètres

hWnd
[in] Handle de la fenêtre en cours de sous-classe.

Valeur de retour

TRUE si la fenêtre est correctement sous-classée ; sinon, FALSE.

Notes

La fenêtre sous-classée utilise désormais CWindowImpl ::WindowProc. La procédure de fenêtre d’origine est enregistrée dans m_pfnSuperWindowProc.

Remarque

N’appelez pas si vous avez déjà appelé SubclassWindowCreate.

CWindowImpl ::UnsubclassWindow

Détache la fenêtre sous-classée de l’objet CWindowImpl et restaure la procédure de fenêtre d’origine, enregistrée dans m_pfnSuperWindowProc.

HWND UnsubclassWindow();

Valeur de retour

Handle de la fenêtre précédemment sous-classe.

CWindowImpl ::WindowProc

Cette fonction statique implémente la procédure de fenêtre.

static LRESULT CALLBACK WindowProc(
    HWND hWnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam);

Paramètres

hWnd
[in] Handle vers la fenêtre.

uMsg
[in] Message envoyé à la fenêtre.

wParam
[in] Informations supplémentaires spécifiques aux messages.

lParam
[in] Informations supplémentaires spécifiques aux messages.

Valeur de retour

Résultat du traitement des messages.

Notes

WindowProc utilise la carte de messages par défaut (déclarée avec BEGIN_MSG_MAP) pour diriger les messages vers les gestionnaires appropriés. Si nécessaire, WindowProc appelle DefWindowProc pour un traitement supplémentaire des messages. Si le message final n’est pas géré, WindowProc procédez comme suit :

  • Effectue unsubclassing si la fenêtre n’a pas été mise en classe.

  • m_hWndEfface .

  • Appelle OnFinalMessage avant la destruction de la fenêtre.

Vous pouvez remplacer WindowProc pour fournir un mécanisme différent pour la gestion des messages.

Voir aussi

BEGIN_MSG_MAP
CComControl, classe
Vue d’ensemble de la classe