Esempio SUBEDIT: creazione di una superclasse basata su un controllo Windows standard
Aggiornamento: novembre 2007
Nell'esempio SUBEDIT viene illustrato come creare un controllo ATL in grado di creare una superclasse basata sul controllo Edit standard di Windows.
In Esempio di attributi per SUBEDIT viene fornita la versione con gli attributi di questo esempio.
Nota sulla sicurezza: |
---|
Questo esempio di codice viene fornito solo a scopo dimostrativo e non deve essere utilizzato in applicazioni o siti Web, poiché potrebbe non implementare le tecniche migliori a livello di sicurezza. Microsoft esclude ogni responsabilità per danni diretti o indiretti derivanti dall'utilizzo dell'esempio di codice per scopi diversi da quelli previsti. |
Per ottenere gli esempi e le istruzioni per l'installazione:
In Visual Studio scegliere Esempi dal menu ?.
Per ulteriori informazioni, vedere Individuazione dei file di esempio.
La versione più recente e l'elenco completo degli esempi sono disponibili in linea alla pagina Visual Studio 2008 Samples.
È anche possibile trovare gli esempi sul disco rigido del computer. Per impostazione predefinita, gli esempi e il file Leggimi vengono copiati in una cartella nel percorso \Programmi\Visual Studio 9.0\Samples\. Per le versioni Express di Visual Studio, tutti gli esempi sono disponibili in linea.
Generazione ed esecuzione dell'esempio
Per generare ed eseguire l'esempio
Aprire il file di soluzione SubEdit.sln.
Scegliere Genera dal menu Genera.
Dopo la generazione dell'esempio, aprire AtlEdit.htm nel browser Web e provare a utilizzare il controllo.
Il controllo può essere verificato in ActiveX Control Test Container aprendo la classe ATLEdit. Per informazioni dettagliate sull'accesso a Test Container e sul relativo utilizzo per il test di un controllo, vedere Verifica di proprietà ed eventi tramite Test Container.
Creazione di una superclasse basata su un controllo Windows
ATL fornisce le funzionalità necessarie per creare un controllo in grado di creare una superclasse basata su un controllo Windows standard. La creazione di una superclasse consente di creare una classe finestra che è basata su una classe esistente ma utilizza una diversa routine della finestra. Si può quindi creare una finestra basata sulla nuova classe finestra. Quando si crea una superclasse basata su un controllo, prima dell'invio alla routine della finestra originale del controllo i messaggi vengono innanzitutto elaborati da una mappa messaggi ATL. In tal modo, è possibile modificare il comportamento predefinito dei controlli Windows standard.
Quando si utilizza la Creazione guidata controllo ATL per creare un controllo ActiveX, è possibile aggiungere un controllo basato su una classe finestra standard. In questo caso, durante la procedura di creazione guidata viene aggiunta una variabile membro di tipo CContainedWindow alla classe del controllo ActiveX. CContainedWindow::Create crea quindi una finestra che crea una superclasse basata sulla classe finestra specificata. Tale finestra utilizza CContainedWindow::WindowProc per inviare i propri messaggi tramite una mappa messaggi. I messaggi che devono essere ulteriormente elaborati vengono inviati alla routine della finestra originale della classe finestra.
Analisi del codice di esempio per SUBEDIT (AtlEdit.h)
Il costruttore della classe CAtlEdit imposta la variabile membro m_bWindowOnly su TRUE. Questa impostazione assicura che il controllo non verrà mai attivato come un controllo senza finestra.
La variabile membro CContainedWindow, corrispondente a m_EditCtrl, viene inizializzata dal costruttore CAtlEdit. Il costruttore CContainedWindow accetta tre parametri: il nome della classe finestra in base alla quale deve essere creata una superclasse (in questo caso, "EDIT"), un puntatore alla classe CAtlEdit, contenente la mappa messaggi, e l'identificatore della mappa messaggi che elaborerà i messaggi di m_EditCtrl. Per impostazione predefinita, m_EditCtrl utilizza una mappa messaggi alternativa dichiarata con la macro ALT_MSG_MAP.
La mappa messaggi predefinita dichiara i nomi delle funzioni di gestione dei messaggi WM_CREATE e WM_CTLCOLOREDIT inviati al controllo CAtlEdit. Il gestore OnCreate chiama CContainedWindow::Create per creare la finestra di m_EditCtrl. Il gestore OnCtlColorEdit specifica un nuovo colore di sfondo e di testo per m_EditCtrl.
La mappa messaggi alternativa dichiara una funzione di gestione per i messaggi WM_CHAR inviati a m_EditCtrl. Questo gestore, che accetta soltanto caratteri e non simboli o numeri, passa quindi il messaggio WM_CHAR alla routine della finestra originale definita dalla classe Edit di Windows.
Parole chiave
Nell'esempio vengono utilizzate le parole chiave seguenti:
CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRoot; CContainedWindow::DefWindowProc; DisableThreadLibraryCalls; GetStockObject; GetWindowRect; IDataObjectImpl; IDispatchImpl; IOleControlImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceObjectWindowlessImpl; IOleInPlaceObjectWindowlessImpl::SetObjectRects; IOleObjectImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; ISpecifyPropertyPagesImpl; IViewObjectExImpl; SetBkColor; SetTextColor; SetWindowPos