Classe CWindowImpl
Fornisce metodi per la creazione di una finestra o di una sottoclasse di finestra.
Importante
Questa classe e i relativi membri non possono essere usati nelle applicazioni eseguite in Windows Runtime.
Sintassi
template <class T, class TBase = CWindow, class TWinTraits = CControlWinTraits>
class ATL_NO_VTABLE CWindowImpl : public CWindowImplBaseT<TBase, TWinTraits>
Parametri
T
La nuova classe, derivata da CWindowImpl
.
TBase
Classe base della classe. Per impostazione predefinita, la classe base è CWindow.
TWinTraits
Classe traits che definisce gli stili per la finestra. Il valore predefinito è CControlWinTraits
.
Membri
Metodi pubblici
Nome | Descrizione |
---|---|
CWindowImpl::Create | Crea una finestra. |
Metodi CWindowImplBaseT
Nome | Descrizione |
---|---|
DefWindowProc | Fornisce l'elaborazione dei messaggi predefinita. |
GetCurrentMessage | Restituisce il messaggio corrente. |
GetWindowProc | Restituisce la procedura della finestra corrente. |
OnFinalMessage | Chiamato dopo la ricezione dell'ultimo messaggio (in genere WM_NCDESTROY). |
SottoclasseWindow | Crea una sottoclasse di una finestra. |
UnsubclassWindow | Ripristina una finestra precedentemente impostata come sottoclasse. |
Metodi statici
Nome | Descrizione |
---|---|
GetWndClassInfo | Restituisce un'istanza statica di CWndClassInfo, che gestisce le informazioni sulla classe della finestra. |
WindowProc | Elabora i messaggi inviati alla finestra. |
Membri dei dati
Nome | Descrizione |
---|---|
m_pfnSuperWindowProc | Punta alla procedura della finestra originale della classe della finestra. |
Osservazioni:
È possibile usare CWindowImpl
per creare una finestra o una sottoclasse di una finestra esistente. la CWindowImpl
procedura della finestra usa un mapping dei messaggi per indirizzare i messaggi ai gestori appropriati.
CWindowImpl::Create
crea una finestra in base alle informazioni sulla classe della finestra gestite da CWndClassInfo. CWindowImpl
contiene la macro DECLARE_WND_CLASS , ovvero CWndClassInfo
registra una nuova classe finestra. Se si vuole sovraclassare una classe finestra esistente, derivare la classe da CWindowImpl
e includere la macro DECLARE_WND_SUPERCLASS . In questo caso, CWndClassInfo
registra una classe della finestra basata su una classe esistente, ma utilizza CWindowImpl::WindowProc
. Ad esempio:
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
Nota
Poiché CWndClassInfo
gestisce le informazioni per una sola classe della finestra, ogni finestra creata tramite un'istanza di CWindowImpl
è basata sulla stessa classe della finestra.
CWindowImpl
supporta inoltre la creazione di una sottoclasse della finestra. Il metodo SubclassWindow
associa una finestra esistente all'oggetto CWindowImpl
e modifica la procedura della finestra in CWindowImpl::WindowProc
. Ogni istanza di CWindowImpl
può creare una sottoclasse di una finestra diversa.
Nota
Per qualsiasi oggetto specificato CWindowImpl
, chiamare Create
o SubclassWindow
. Non richiamare entrambi i metodi sullo stesso oggetto.
Oltre a CWindowImpl
, ATL fornisce CContainedWindow per creare una finestra contenuta in un altro oggetto.
Il distruttore della classe di base (~ CWindowImplRoot
) garantisce che la finestra venga eliminata prima che l'oggetto venga eliminato definitivamente.
CWindowImpl
deriva da , che deriva da CWindowImplBaseT
CWindowImplRoot
, che deriva da TBase
e CMessageMap.
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 |
Gerarchia di ereditarietà
TBase
CWindowImplRoot
CWindowImplBaseT
CWindowImpl
Requisiti
Intestazione: atlwin.h
CWindowImpl::Create
Crea una finestra basata su una nuova classe finestra.
HWND Create(
HWND hWndParent,
_U_RECT rect = NULL,
LPCTSTR szWindowName = NULL,
DWORD dwStyle = 0,
DWORD dwExStyle = 0,
_U_MENUorID MenuOrID = 0U,
LPVOID lpCreateParam = NULL);
Parametri
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. Questo valore viene combinato con lo stile fornito dalla classe traits per la finestra. Il valore predefinito fornisce alla classe traits il controllo completo sullo stile. Per un elenco dei valori possibili, vedere CreateWindow in Windows SDK.
dwExStyle
[in] Stile della finestra estesa. Questo valore viene combinato con lo stile fornito dalla classe traits per la finestra. Il valore predefinito fornisce alla classe traits il controllo completo sullo stile. 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 nella finestra appena creata. In caso contrario, NULL.
Osservazioni:
Create
registra prima di tutto la classe della finestra se non è ancora stata registrata. La finestra appena creata viene collegata automaticamente all'oggetto CWindowImpl
.
Nota
Non chiamare Create
se è già stato chiamato SubclassWindow.
Per usare una classe window basata su una classe finestra esistente, derivare la classe da CWindowImpl
e includere la macro DECLARE_WND_SUPERCLASS . La routine della finestra della classe finestra esistente viene salvata in m_pfnSuperWindowProc. Per altre informazioni, vedere la panoramica di CWindowImpl .
Nota
Se 0 viene usato come valore per il parametro MenuOrID , deve essere specificato come 0U (valore predefinito) per evitare un errore del compilatore.
CWindowImpl::D efWindowProc
Chiamato da WindowProc per elaborare i messaggi non gestiti dalla mappa dei messaggi.
LRESULT DefWindowProc(
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
LRESULT DefWindowProc();
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.
La funzione senza parametri recupera automaticamente i parametri necessari dal messaggio corrente.
CWindowImpl::GetCurrentMessage
Restituisce il messaggio corrente, incluso nella MSG
struttura .
const MSG* GetCurrentMessage();
Valore restituito
Messaggio corrente.
CWindowImpl::GetWindowProc
Restituisce WindowProc
, la routine della finestra corrente.
virtual WNDPROC GetWindowProc();
Valore restituito
Routine della finestra corrente.
Osservazioni:
Eseguire l'override di questo metodo per sostituire la routine window con la propria.
CWindowImpl::GetWndClassInfo
Chiamato da Create per accedere alle informazioni sulla classe della finestra.
static CWndClassInfo& GetWndClassInfo();
Valore restituito
Istanza statica di CWndClassInfo.
Osservazioni:
Per impostazione predefinita, CWindowImpl
ottiene questo metodo tramite la macro DECLARE_WND_CLASS , che specifica una nuova classe finestra.
Per sovraclassare una classe finestra esistente, derivare la classe da CWindowImpl
e includere la macro DECLARE_WND_SUPERCLASS per eseguire l'override GetWndClassInfo
di . Per altre informazioni, vedere la panoramica di CWindowImpl .
Oltre a usare le macro DECLARE_WND_CLASS e DECLARE_WND_SUPERCLASS, è possibile eseguire l'override con la propria implementazione GetWndClassInfo
.
CWindowImpl::m_pfnSuperWindowProc
A seconda della finestra, punta a una delle procedure della finestra seguenti.
WNDPROC m_pfnSuperWindowProc;
Osservazioni:
Tipo di finestra | Procedura finestra |
---|---|
Finestra basata su una nuova classe di finestra, specificata tramite la macro DECLARE_WND_CLASS . | Funzione DefWindowProc Win32. |
Finestra basata su una classe window che modifica una classe esistente, specificata tramite la macro DECLARE_WND_SUPERCLASS . | Routine della finestra della classe finestra esistente. |
Finestra sottoclassata. | Routine della finestra originale della finestra sottoclassata. |
CWindowImpl::D efWindowProc invia informazioni sul messaggio alla routine della finestra salvata in m_pfnSuperWindowProc
.
CWindowImpl::OnFinalMessage
Chiamato dopo aver ricevuto l'ultimo messaggio (in genere WM_NCDESTROY).
virtual void OnFinalMessage(HWND hWnd);
Parametri
hWnd
[in] Handle per la finestra distrutta.
Osservazioni:
L'implementazione predefinita di non esegue alcuna operazione, ma è possibile eseguire l'override di questa funzione per gestire la pulizia prima di OnFinalMessage
eliminare una finestra. Se si desidera eliminare automaticamente l'oggetto dopo la distruzione della finestra, è possibile chiamare delete this;
in questa funzione.
CWindowImpl::SubclassWindow
Sottoclassa la finestra identificata da hWnd e la collega all'oggetto CWindowImpl
.
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 CWindowImpl::WindowProc. La procedura della finestra originale viene salvata in m_pfnSuperWindowProc.
Nota
Non chiamare SubclassWindow
se è già stato chiamato Create.
CWindowImpl::UnsubclassWindow
Scollega la finestra sottoclassata dall'oggetto CWindowImpl
e ripristina la routine della finestra originale, salvata in m_pfnSuperWindowProc.
HWND UnsubclassWindow();
Valore restituito
Handle della finestra precedentemente sottoclassata.
CWindowImpl::WindowProc
Questa funzione statica 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
usa la mappa dei messaggi predefinita (dichiarata con BEGIN_MSG_MAP) per indirizzare i messaggi ai gestori appropriati. Se necessario, WindowProc
chiama DefWindowProc per un'ulteriore elaborazione dei messaggi. Se il messaggio finale non viene gestito, WindowProc
esegue le operazioni seguenti:
Esegue unsubclassing se la finestra non è stata sottoclassata.
m_hWnd
Cancella .Chiama OnFinalMessage prima che la finestra venga eliminata definitivamente.
È possibile eseguire l'override WindowProc
per fornire un meccanismo diverso per la gestione dei messaggi.
Vedi anche
BEGIN_MSG_MAP
Classe CComControl
Cenni preliminari sulla classe