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 . CContainedWindowT
La 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
Create
in 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