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
.
TBase
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 SubclassWindow
Create
. 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
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é Create
SubclassWindow.
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 le nettoyage 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é SubclassWindow
Create.
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_hWnd
Efface .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