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. CContainedWindowT
La 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 SubclassWindow
Create
. 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
Create
ulté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