Derivazione di controlli da un controllo standard
Come per qualsiasi classe derivata da CWnd, è possibile modificare il comportamento di un controllo derivando una nuova classe da una classe di controllo esistente.
Per creare una classe di controllo derivata
Derivare la classe da una classe di controllo esistente ed eseguire facoltativamente l'override della
Create
funzione membro in modo che fornisca gli argomenti necessari alla funzione della classeCreate
base.Fornire funzioni membro del gestore messaggi e voci di mapping messaggi per modificare il comportamento del controllo in risposta a messaggi specifici di Windows. Vedere Mapping dei messaggi alle funzioni.
Fornire nuove funzioni membro per estendere la funzionalità del controllo (facoltativo).
L'uso di un controllo derivato in una finestra di dialogo richiede un lavoro aggiuntivo. I tipi e le posizioni dei controlli in una finestra di dialogo vengono in genere specificati in una risorsa modello di finestra di dialogo. Se si crea una classe di controllo derivata, non è possibile specificarla in un modello di finestra di dialogo perché il compilatore di risorse non conosce nulla sulla classe derivata.
Per inserire il controllo derivato in una finestra di dialogo
Incorporare un oggetto della classe di controllo derivata nella dichiarazione della classe del dialogo derivata.
Eseguire l'override della
OnInitDialog
funzione membro nella classe dialog per chiamare laSubclassDlgItem
funzione membro per il controllo derivato.
SubclassDlgItem
"sottoclassi dinamicamente" un controllo creato da un modello di finestra di dialogo. Quando un controllo viene sottoclassato in modo dinamico, si esegue l'hook in Windows, si elaborano alcuni messaggi all'interno della propria applicazione, quindi passano i messaggi rimanenti a Windows. Per altre informazioni, vedere la funzione membro SubclassDlgItem della classe CWnd
nella guida di riferimento MFC. Nell'esempio seguente viene illustrato come scrivere un override di OnInitDialog
per chiamare SubclassDlgItem
:
BOOL CSubDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);
return TRUE;
}
Poiché il controllo derivato è incorporato nella classe dialog, verrà costruito quando viene costruita la finestra di dialogo e verrà eliminato definitivamente quando la finestra di dialogo viene eliminata definitivamente. Confrontare questo codice con l'esempio in Aggiunta di controlli per mano.