Partager via


CContainedWindowT, classe

Cette classe implémente une fenêtre contenue dans un autre objet.

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 TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase

Paramètres

TBase
Classe de base de votre nouvelle classe. La classe de base par défaut est CWindow.

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

Remarque

CContainedWindow est une spécialisation de CContainedWindowT. Si vous souhaitez modifier la classe de base ou les caractéristiques, utilisez CContainedWindowT directement.

Membres

Constructeurs publics

Nom Description
CContainedWindowT ::CContainedWindowT Constructeur. Initialise les membres de données pour spécifier la carte de messages qui traite les messages de la fenêtre autonome.

Méthodes publiques

Nom Description
CContainedWindowT ::Create Crée une fenêtre.
CContainedWindowT ::D efWindowProc Fournit le traitement du message par défaut.
CContainedWindowT ::GetCurrentMessage Retourne le message actuel.
CContainedWindowT ::RegisterWndSuperclass Inscrit la classe de fenêtre de la fenêtre autonome.
CContainedWindowT ::SubclassWindow Sous-classe une fenêtre.
CContainedWindowT ::SwitchMessageMap Modifications utilisées pour traiter les messages de la fenêtre autonome.
CContainedWindowT ::UnsubclassWindow Restaure une fenêtre précédemment sous-classée.
CContainedWindowT ::WindowProc (Statique) Traite les messages envoyés à la fenêtre autonome.

Membres de données publics

Nom Description
CContainedWindowT ::m_dwMsgMapID Identifie la carte des messages qui traite les messages de la fenêtre autonome.
CContainedWindowT ::m_lpszClassName Spécifie le nom d’une classe de fenêtre existante sur laquelle une nouvelle classe de fenêtre sera basée.
CContainedWindowT ::m_pfnSuperWindowProc Pointe vers la procédure de fenêtre d'origine de la classe de fenêtre.
CContainedWindowT ::m_pObject Pointe vers l’objet conteneur.

Notes

CContainedWindowT implémente une fenêtre contenue dans un autre objet. CContainedWindowTLa procédure de fenêtre utilise un mappage de messages dans l’objet conteneur pour diriger les messages vers les gestionnaires appropriés. Lors de la construction d’un CContainedWindowT objet, vous spécifiez le mappage de messages à utiliser.

CContainedWindowT vous permet de créer une fenêtre en superclassant une classe de fenêtre existante. La Create méthode inscrit d’abord une classe de fenêtre basée sur une classe existante, mais utilise CContainedWindowT::WindowProc. Create crée ensuite une fenêtre basée sur cette nouvelle classe de fenêtre. Chaque instance de CContainedWindowT peut superclasser une classe de fenêtre différente.

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

Remarque

Pour un objet donnéCContainedWindowT, appelez ou SubclassWindowCreate . Vous ne devez pas appeler les deux méthodes sur le même objet.

Lorsque vous utilisez le contrôle Ajouter en fonction de l’option de l’Assistant Projet ATL, l’Assistant ajoute automatiquement un CContainedWindowT membre de données à la classe implémentant le contrôle. L’exemple suivant montre comment la fenêtre autonome est déclarée :

public:
   // Declare a contained window data member
   CContainedWindow m_ctlEdit;

   // Initialize the contained window:
   // 1. Pass "Edit" to specify that the contained 
   //    window should be based on the standard 
   //    Windows Edit box
   // 2. Pass 'this' pointer to specify that CAtlEdit 
   //    contains the message map to be used for the 
   //    contained window's message processing
   // 3. Pass the identifier of the message map. '1'
   //    identifies the alternate message map declared
   //    with ALT_MSG_MAP(1)
   CAtlEdit()
      : m_ctlEdit(_T("Edit"), this, 1)
   {
      m_bWindowOnly = TRUE;
   }

 

// Declare the default message map, identified by '0'
BEGIN_MSG_MAP(CAtlEdit)
   MESSAGE_HANDLER(WM_CREATE, OnCreate)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
   CHAIN_MSG_MAP(CComControl<CAtlEdit>)
// Declare an alternate message map, identified by '1'
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_CHAR, OnChar)
END_MSG_MAP()

 

// Define OnCreate handler
// When the containing window receives a WM_CREATE
// message, create the contained window by calling
// CContainedWindow::Create
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
   BOOL& /*bHandled*/)
{
   RECT rc;
   GetWindowRect(&rc);
   rc.right -= rc.left;
   rc.bottom -= rc.top;
   rc.top = rc.left = 0;
   m_ctlEdit.Create(m_hWnd, rc, _T("hello"), WS_CHILD | WS_VISIBLE | 
      ES_MULTILINE | ES_AUTOVSCROLL);
   return 0;
}
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
Windows Rubriques Windows et suivantes dans le Kit de développement logiciel (SDK) Windows

Hiérarchie d'héritage

TBase

CContainedWindowT

Spécifications

En-tête : atlwin.h

CContainedWindowT ::CContainedWindowT

Le constructeur initialise les membres de données.

CContainedWindowT(
    LPTSTR lpszClassName,
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0);

CContainedWindowT(
    CMessageMap* pObject,
    DWORD dwMsgMapID = 0)
    CContainedWindowT();

Paramètres

lpszClassName
[in] Nom d’une classe de fenêtre existante sur laquelle la fenêtre autonome sera basée.

pObject
[in] Pointeur vers l’objet conteneur qui déclare le mappage de messages. La classe de cet objet doit dériver de CMessageMap.

dwMsgMapID
[in] Identifie la carte des messages qui traite les messages de la fenêtre autonome. La valeur par défaut, 0, spécifie la carte de messages par défaut déclarée avec BEGIN_MSG_MAP. Pour utiliser une autre carte de messages déclarée avec ALT_MSG_MAP(msgMapID), passez msgMapID.

Notes

Si vous souhaitez créer une nouvelle fenêtre via Create, vous devez passer le nom d’une classe de fenêtre existante pour le paramètre lpszClassName . Pour obtenir un exemple, consultez la vue d’ensemble de CContainedWindow .

Il existe trois constructeurs :

  • Le constructeur avec trois arguments est généralement appelé.

  • Le constructeur avec deux arguments utilise le nom de classe à partir de TBase::GetWndClassName.

  • Le constructeur sans arguments n’est utilisé si vous souhaitez fournir les arguments ultérieurement. Vous devez fournir le nom de la classe de fenêtre, l’objet de mappage de messages et l’ID de carte de messages lorsque vous appelez Createultérieurement.

Si vous sous-classez une fenêtre existante via SubclassWindow, la valeur lpszClassName n’est pas utilisée . Par conséquent, vous pouvez passer NULL pour ce paramètre.

CContainedWindowT ::Create

Appelle RegisterWndSuperclass pour inscrire une classe de fenêtre basée sur une classe existante, mais utilise CContainedWindowT ::WindowProc.

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

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

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

Paramètres

lpszClassName
[in] Nom d’une classe de fenêtre existante sur laquelle la fenêtre autonome sera basée.

pObject
[in] Pointeur vers l’objet conteneur qui déclare le mappage de messages. La classe de cet objet doit dériver de CMessageMap.

dwMsgMapID
[in] Identifie la carte des messages qui traite les messages de la fenêtre autonome. La valeur par défaut, 0, spécifie la carte de messages par défaut déclarée avec BEGIN_MSG_MAP. Pour utiliser une autre carte de messages déclarée avec ALT_MSG_MAP(msgMapID), passez msgMapID.

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. La valeur par défaut est WS_CHILD | WS_VISIBLE. 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. La valeur par défaut est 0, ce qui signifie qu’aucun style étendu n’est appliqué. 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 vers la fenêtre nouvellement créée ; sinon, NULL.

Notes

Le nom de classe de fenêtre existant est enregistré dans m_lpszClassName. Create crée ensuite une fenêtre basée sur cette nouvelle classe. La fenêtre nouvellement créée est automatiquement attachée à l’objet CContainedWindowT .

Remarque

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

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.

CContainedWindowT ::D efWindowProc

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

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

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.

CContainedWindowT ::GetCurrentMessage

Retourne le message actuel (m_pCurrentMsg).

const _ATL_MSG* GetCurrentMessage();

Valeur de retour

Message actuel, empaqueté dans la MSG structure.

CContainedWindowT ::m_dwMsgMapID

Contient l’identificateur de la carte de messages actuellement utilisée pour la fenêtre autonome.

DWORD m_dwMsgMapID;

Notes

Ce mappage de messages doit être déclaré dans l’objet conteneur.

La carte de messages par défaut, déclarée avec BEGIN_MSG_MAP, est toujours identifiée par zéro. Une autre carte de messages, déclarée avec ALT_MSG_MAP(msgMapID), est identifiée par msgMapID.

m_dwMsgMapID est d’abord initialisé par le constructeur et peut être modifié en appelant SwitchMessageMap. Pour obtenir un exemple, consultez la vue d’ensemble de CContainedWindowT.

CContainedWindowT ::m_lpszClassName

Spécifie le nom d’une classe de fenêtre existante.

LPTSTR m_lpszClassName;

Notes

Lorsque vous créez une fenêtre, Create inscrit une nouvelle classe de fenêtre basée sur cette classe existante, mais utilise CContainedWindowT ::WindowProc.

m_lpszClassName est initialisé par le constructeur. Pour obtenir un exemple, consultez la vue d’ensemble de CContainedWindowT .

CContainedWindowT ::m_pfnSuperWindowProc

Si la fenêtre autonome est sous-classée, m_pfnSuperWindowProc pointe vers la procédure de fenêtre d’origine de la classe de fenêtre.

WNDPROC m_pfnSuperWindowProc;

Notes

Si la fenêtre autonome est superclassée, cela signifie qu’elle est basée sur une classe de fenêtre qui modifie une classe existante, m_pfnSuperWindowProc pointe vers la procédure de fenêtre de la classe de fenêtre existante.

La méthode DefWindowProc envoie des informations de message à la procédure de fenêtre enregistrée dans m_pfnSuperWindowProc.

CContainedWindowT ::m_pObject

Pointe vers l’objet contenant l’objet CContainedWindowT .

CMessageMap* m_pObject;

Notes

Ce conteneur, dont la classe doit dériver de CMessageMap, déclare le mappage de messages utilisé par la fenêtre autonome.

m_pObject est initialisé par le constructeur. Pour obtenir un exemple, consultez la vue d’ensemble de CContainedWindowT .

CContainedWindowT ::RegisterWndSuperclass

Appelé par Create pour inscrire la classe de fenêtre de la fenêtre autonome.

ATOM RegisterWndSuperClass();

Valeur de retour

En cas de réussite, un atome qui identifie de façon unique la classe de fenêtre inscrite ; sinon, zéro.

Notes

Cette classe de fenêtre est basée sur une classe existante, mais utilise CContainedWindowT ::WindowProc. Le nom et la procédure de fenêtre de la classe de fenêtre existants sont enregistrés dans m_lpszClassName et m_pfnSuperWindowProc, respectivement.

CContainedWindowT ::SubclassWindow

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

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 CContainedWindowT ::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.

CContainedWindowT ::SwitchMessageMap

Modifications de la carte des messages qui seront utilisées pour traiter les messages de la fenêtre autonome.

void SwitchMessageMap(DWORD dwMsgMapID);

Paramètres

dwMsgMapID
[in] Identificateur du mappage de messages. Pour utiliser la carte de messages par défaut déclarée avec BEGIN_MSG_MAP, passez zéro. Pour utiliser une autre carte de messages déclarée avec ALT_MSG_MAP(msgMapID), passez msgMapID.

Notes

Le mappage de messages doit être défini dans l’objet conteneur.

Vous spécifiez initialement l’identificateur de mappage de messages dans le constructeur.

CContainedWindowT ::UnsubclassWindow

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

HWND UnsubclassWindow(BOOL bForce = FALSE);

Paramètres

bForce
[in] Définissez la valeur TRUE pour forcer la restauration de la procédure de fenêtre d’origine, même si la procédure de fenêtre de cet CContainedWindowT objet n’est pas active actuellement. Si bForce a la valeur FALSE et que la procédure de fenêtre de cet CContainedWindowT objet n’est pas active, la procédure de fenêtre d’origine n’est pas restaurée.

Valeur de retour

Handle de la fenêtre précédemment sous-classe. Si bForce a la valeur FALSE et que la procédure de fenêtre de cet CContainedWindowT objet n’est pas active, retourne NULL.

Notes

Utilisez cette méthode uniquement si vous souhaitez restaurer la procédure de fenêtre d’origine avant la destruction de la fenêtre. Sinon, WindowProc effectue automatiquement cette opération lorsque la fenêtre est détruite.

CContainedWindowT ::WindowProc

Cette méthode 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 dirige les messages vers la carte de messages identifiée par m_dwMsgMapID. Si nécessaire, WindowProc appelle DefWindowProc pour un traitement supplémentaire des messages.

Voir aussi

CWindow, classe
CWindowImpl, classe
CMessageMap, classe
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
Vue d’ensemble de la classe