Condividi tramite


Classe CContainedWindowT

Questa classe implementa una finestra contenuta all'interno di un altro oggetto .

Importante

Questa classe e i relativi membri non possono essere usati nelle applicazioni eseguite in Windows Runtime.

Sintassi

template <class TBase = CWindow, class TWinTraits = CControlWinTraits>
class CContainedWindowT : public TBase

Parametri

TBase
Classe di base della nuova classe. La classe base predefinita è CWindow.

TWinTraits
Classe traits che definisce gli stili per la finestra. Il valore predefinito è CControlWinTraits.

Nota

CContainedWindow è una specializzazione di CContainedWindowT. Se si desidera modificare la classe o i tratti di base, usare CContainedWindowT direttamente.

Membri

Costruttori pubblici

Nome Descrizione
CContainedWindowT::CContainedWindowT Costruttore. Inizializza i membri dati per specificare la mappa dei messaggi che elabora i messaggi della finestra contenuta.

Metodi pubblici

Nome Descrizione
CContainedWindowT::Create Crea una finestra.
CContainedWindowT::D efWindowProc Fornisce l'elaborazione dei messaggi predefinita.
CContainedWindowT::GetCurrentMessage Restituisce il messaggio corrente.
CContainedWindowT::RegisterWndSuperclass Registra la classe di finestra della finestra contenuta.
CContainedWindowT::SubclassWindow Crea una sottoclasse di una finestra.
CContainedWindowT::SwitchMessageMap Modifica la mappa dei messaggi utilizzata per elaborare i messaggi della finestra contenuta.
CContainedWindowT::UnsubclassWindow Ripristina una finestra precedentemente impostata come sottoclasse.
CContainedWindowT::WindowProc (Statico) Elabora i messaggi inviati alla finestra contenuta.

Membri dati pubblici

Nome Descrizione
CContainedWindowT::m_dwMsgMapID Identifica la mappa dei messaggi che elabora i messaggi della finestra contenuta.
CContainedWindowT::m_lpszClassName Specifica il nome di una classe finestra esistente in cui verrà basata una nuova classe di finestra.
CContainedWindowT::m_pfnSuperWindowProc Punta alla procedura della finestra originale della classe della finestra.
CContainedWindowT::m_pObject Punta all'oggetto contenitore.

Osservazioni:

CContainedWindowT implementa una finestra contenuta all'interno di un altro oggetto . CContainedWindowTLa routine della finestra usa una mappa messaggi nell'oggetto contenitore per indirizzare i messaggi ai gestori appropriati. Quando si costruisce un CContainedWindowT oggetto, specificare la mappa dei messaggi da usare.

CContainedWindowT consente di creare una nuova finestra sovraclassando una classe finestra esistente. Il Create metodo registra innanzitutto una classe window basata su una classe esistente, ma usa CContainedWindowT::WindowProc. Create crea quindi una finestra basata su questa nuova classe finestra. Ogni istanza di CContainedWindowT può sovraclassere una classe finestra diversa.

CContainedWindowT supporta inoltre la creazione di una sottoclasse della finestra. Il metodo SubclassWindow associa una finestra esistente all'oggetto CContainedWindowT e modifica la procedura della finestra in CContainedWindowT::WindowProc. Ogni istanza di CContainedWindowT può creare una sottoclasse di una finestra diversa.

Nota

Per qualsiasi oggetto specificato CContainedWindowT , chiamare Create o SubclassWindow. Non è consigliabile richiamare entrambi i metodi sullo stesso oggetto.

Quando si usa l'opzione Aggiungi controllo in base all'opzione della Creazione guidata progetto ATL, la procedura guidata aggiungerà automaticamente un CContainedWindowT membro dati alla classe che implementa il controllo. L'esempio seguente mostra come viene dichiarata la finestra contenuta:

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;
}
Per ulteriori informazioni su Vedere
Creazione di controlli Esercitazione ATL
Uso delle finestre in ATL Classi di finestra ATL
Creazione guidata progetto ATL Creazione di un progetto ATL
Finestre Argomenti di Windows e successivi in Windows SDK

Gerarchia di ereditarietà

TBase

CContainedWindowT

Requisiti

Intestazione: atlwin.h

CContainedWindowT::CContainedWindowT

Il costruttore inizializza i membri dati.

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

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

Parametri

lpszClassName
[in] Nome di una classe di finestra esistente in cui verrà basata la finestra contenuta.

pObject
[in] Puntatore all'oggetto contenitore che dichiara la mappa messaggi. La classe di questo oggetto deve derivare da CMessageMap.

dwMsgMapID
[in] Identifica la mappa dei messaggi che elabora i messaggi della finestra contenuta. Il valore predefinito, 0, specifica la mappa dei messaggi predefinita dichiarata con BEGIN_MSG_MAP. Per usare una mappa messaggi alternativa dichiarata con ALT_MSG_MAP(msgMapID), passare msgMapID.

Osservazioni:

Se si vuole creare una nuova finestra tramite Crea, è necessario passare il nome di una classe finestra esistente per il parametro lpszClassName. Per un esempio, vedere la panoramica di CContainedWindow .

Esistono tre costruttori:

  • Il costruttore con tre argomenti è quello in genere chiamato.

  • Il costruttore con due argomenti usa il nome della classe da TBase::GetWndClassName.

  • Il costruttore senza argomenti viene usato se si desidera specificare gli argomenti in un secondo momento. È necessario specificare il nome della classe della finestra, l'oggetto mappa dei messaggi e l'ID mappa messaggi quando si chiama Createin un secondo momento .

Se si sottoclassa una finestra esistente tramite SubclassWindow, il valore lpszClassName non verrà usato. Pertanto, è possibile passare NULL per questo parametro.

CContainedWindowT::Create

Chiama RegisterWndSuperclass per registrare una classe window basata su una classe esistente, ma usa 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);

Parametri

lpszClassName
[in] Nome di una classe di finestra esistente in cui verrà basata la finestra contenuta.

pObject
[in] Puntatore all'oggetto contenitore che dichiara la mappa messaggi. La classe di questo oggetto deve derivare da CMessageMap.

dwMsgMapID
[in] Identifica la mappa dei messaggi che elabora i messaggi della finestra contenuta. Il valore predefinito, 0, specifica la mappa dei messaggi predefinita dichiarata con BEGIN_MSG_MAP. Per usare una mappa messaggi alternativa dichiarata con ALT_MSG_MAP(msgMapID), passare msgMapID.

hWndParent
[in] Handle per la finestra padre o proprietario.

rect
[in] Struttura RECT che specifica la posizione della finestra. L'oggetto RECT può essere passato dal puntatore o dal riferimento.

szWindowName
[in] Specifica il nome della finestra. Il valore predefinito è NULL.

dwStyle
[in] Stile della finestra. Il valore predefinito è WS_CHILD | WS_VISIBLE. Per un elenco dei valori possibili, vedere CreateWindow in Windows SDK.

dwExStyle
[in] Stile della finestra estesa. Il valore predefinito è 0, ovvero nessun stile esteso. Per un elenco dei valori possibili, vedere CreateWindowEx in Windows SDK.

MenuOrID
[in] Per una finestra figlio, l'identificatore della finestra. Per una finestra di primo livello, un handle di menu per la finestra. Il valore predefinito è 0U.

lpCreateParam
[in] Puntatore ai dati di creazione della finestra. Per una descrizione completa, vedere la descrizione del parametro finale per CreateWindowEx.

Valore restituito

In caso di esito positivo, l'handle alla finestra appena creata; in caso contrario, NULL.

Osservazioni:

Il nome della classe della finestra esistente viene salvato in m_lpszClassName. Create crea quindi una finestra basata su questa nuova classe. La finestra appena creata viene collegata automaticamente all'oggetto CContainedWindowT .

Nota

Non chiamare Create se è già stato chiamato SubclassWindow.

Nota

Se 0 viene usato come valore per il parametro MenuOrID , deve essere specificato come 0U (valore predefinito) per evitare un errore del compilatore.

CContainedWindowT::D efWindowProc

Chiamato da WindowProc per elaborare i messaggi non gestiti dalla mappa dei messaggi.

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

Parametri

uMsg
[in] Messaggio inviato alla finestra.

wParam
[in] Informazioni aggiuntive specifiche del messaggio.

lParam
[in] Informazioni aggiuntive specifiche del messaggio.

Valore restituito

Risultato dell'elaborazione del messaggio.

Osservazioni:

Per impostazione predefinita, DefWindowProc chiama la funzione CallWindowProc Win32 per inviare le informazioni del messaggio alla routine della finestra specificata in m_pfnSuperWindowProc.

CContainedWindowT::GetCurrentMessage

Restituisce il messaggio corrente (m_pCurrentMsg).

const _ATL_MSG* GetCurrentMessage();

Valore restituito

Messaggio corrente, incluso nella MSG struttura .

CContainedWindowT::m_dwMsgMapID

Contiene l'identificatore della mappa messaggi attualmente in uso per la finestra contenuta.

DWORD m_dwMsgMapID;

Osservazioni:

La mappa dei messaggi deve essere dichiarata nell'oggetto contenitore.

La mappa dei messaggi predefinita, dichiarata con BEGIN_MSG_MAP, viene sempre identificata da zero. Una mappa dei messaggi alternativa, dichiarata con ALT_MSG_MAP(msgMapID), viene identificata da msgMapID.

m_dwMsgMapID viene prima inizializzato dal costruttore e può essere modificato chiamando SwitchMessageMap. Per un esempio, vedere Panoramica di CContainedWindowT.

CContainedWindowT::m_lpszClassName

Specifica il nome di una classe finestra esistente.

LPTSTR m_lpszClassName;

Osservazioni:

Quando si crea una finestra, Crea registra una nuova classe di finestra basata su questa classe esistente, ma usa CContainedWindowT::WindowProc.

m_lpszClassName viene inizializzato dal costruttore . Per un esempio, vedere la panoramica di CContainedWindowT .

CContainedWindowT::m_pfnSuperWindowProc

Se la finestra contenuta è sottoclassata, m_pfnSuperWindowProc punta alla routine della finestra originale della classe window.

WNDPROC m_pfnSuperWindowProc;

Osservazioni:

Se la finestra contenuta è superclassata, ovvero è basata su una classe finestra che modifica una classe esistente, m_pfnSuperWindowProc punta alla routine della finestra della classe finestra esistente.

Il metodo DefWindowProc invia informazioni sul messaggio alla routine della finestra salvata in m_pfnSuperWindowProc.

CContainedWindowT::m_pObject

Punta all'oggetto contenente l'oggetto CContainedWindowT .

CMessageMap* m_pObject;

Osservazioni:

Questo contenitore, la cui classe deve derivare da CMessageMap, dichiara la mappa messaggi usata dalla finestra contenuta.

m_pObject viene inizializzato dal costruttore . Per un esempio, vedere la panoramica di CContainedWindowT .

CContainedWindowT::RegisterWndSuperclass

Chiamato da Create per registrare la classe della finestra contenuta.

ATOM RegisterWndSuperClass();

Valore restituito

In caso di esito positivo, un atomo che identifica in modo univoco la classe finestra registrata; in caso contrario, zero.

Osservazioni:

Questa classe di finestra si basa su una classe esistente, ma usa CContainedWindowT::WindowProc. Il nome e la routine della finestra esistenti vengono salvati rispettivamente in m_lpszClassName e m_pfnSuperWindowProc.

CContainedWindowT::SubclassWindow

Sottoclassa la finestra identificata da hWnd e la collega all'oggetto CContainedWindowT .

BOOL SubclassWindow(HWND hWnd);

Parametri

hWnd
[in] Handle della finestra sottoclassata.

Valore restituito

TRUE se la finestra viene sottoclassata correttamente; in caso contrario, FALSE.

Osservazioni:

La finestra sottoclassata usa ora CContainedWindowT::WindowProc. La procedura della finestra originale viene salvata in m_pfnSuperWindowProc.

Nota

Non chiamare SubclassWindow se è già stato chiamato Create.

CContainedWindowT::SwitchMessageMap

Modifica la mappa dei messaggi che verrà usata per elaborare i messaggi della finestra contenuta.

void SwitchMessageMap(DWORD dwMsgMapID);

Parametri

dwMsgMapID
[in] Identificatore della mappa dei messaggi. Per usare la mappa dei messaggi predefinita dichiarata con BEGIN_MSG_MAP, passare zero. Per usare una mappa messaggi alternativa dichiarata con ALT_MSG_MAP(msgMapID), passare msgMapID.

Osservazioni:

La mappa dei messaggi deve essere definita nell'oggetto contenitore.

Inizialmente si specifica l'identificatore della mappa messaggi nel costruttore.

CContainedWindowT::UnsubclassWindow

Scollega la finestra sottoclassata dall'oggetto CContainedWindowT e ripristina la routine della finestra originale, salvata in m_pfnSuperWindowProc.

HWND UnsubclassWindow(BOOL bForce = FALSE);

Parametri

bForce
[in] Impostare su TRUE per forzare il ripristino della routine della finestra originale anche se la routine della finestra per questo CContainedWindowT oggetto non è attualmente attiva. Se bForce è impostato su FALSE e la routine della finestra per questo CContainedWindowT oggetto non è attualmente attiva, la routine della finestra originale non verrà ripristinata.

Valore restituito

Handle della finestra precedentemente sottoclassata. Se bForce è impostato su FALSE e la routine della finestra per questo CContainedWindowT oggetto non è attualmente attiva, restituisce NULL.

Osservazioni:

Utilizzare questo metodo solo se si desidera ripristinare la routine della finestra originale prima che la finestra venga eliminata definitivamente. In caso contrario, WindowProc eseguirà automaticamente questa operazione quando la finestra viene eliminata definitivamente.

CContainedWindowT::WindowProc

Questo metodo statico implementa la routine window.

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

Parametri

hWnd
[in] Handle per la finestra.

uMsg
[in] Messaggio inviato alla finestra.

wParam
[in] Informazioni aggiuntive specifiche del messaggio.

lParam
[in] Informazioni aggiuntive specifiche del messaggio.

Valore restituito

Risultato dell'elaborazione del messaggio.

Osservazioni:

WindowProc indirizza i messaggi alla mappa dei messaggi identificata da m_dwMsgMapID. Se necessario, WindowProc chiama DefWindowProc per un'ulteriore elaborazione dei messaggi.

Vedi anche

Classe CWindow
Classe CWindowImpl
Classe CMessageMap
BEGIN_MSG_MAP
ALT_MSG_MAP(msgMapID)
Cenni preliminari sulla classe