Condividi tramite


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

  1. 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 classe Create base.

  2. 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.

  3. 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

  1. Incorporare un oggetto della classe di controllo derivata nella dichiarazione della classe del dialogo derivata.

  2. Eseguire l'override della OnInitDialog funzione membro nella classe dialog per chiamare la SubclassDlgItem 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.

Vedi anche

Creazione e uso di controlli
Controlli