Implementazione di una finestra di dialogo

Ci sono due modi per aggiungere una casella di dialogo al progetto ATL: utilizzare la creazione guidata oggetto o aggiungerlo manualmente.

Aggiunta di una finestra di dialogo con la creazione guidata oggetto

L'oggetto ATL guidata (menuInserisci , Nuovo oggetto ATL comando), evidenziare le varie categoria nel riquadro sinistro, quindi fare doppio clic sulla finestra di dialogo oggetto nel riquadro destro di una finestra di dialogo Aggiungi al progetto ATL. Riempire nella finestra di dialogo Proprietà dell'oggetto ATL guidata appropriata e fare clic su OK. La creazione guidata oggetto aggiunge una classe derivata da CAxDialogImpl al progetto e si apre l'editor risorse con il modello di finestra di dialogo.

&Notanbsp;  Se la finestra di dialogo derivata da CAxDialogImpl , esso può ospitare controlli ActiveX sia Windows. Se non si desidera il sovraccarico di supporto ActiveX control nella classe di finestra di dialogo, utilizzare invece CSimpleDialog o CDialogImpl.

I gestori del messaggio e l'evento possono essere aggiunto alla propria classe di finestra di dialogo dalla ClassView nello stesso modo come per una classe MFC. In ClassView, destro della classe, scegliere Aggiungi gestore dei messaggi Windows per aprire la finestra di dialogo nuovo messaggio Windows e gestori eventi . Per ulteriori informazioni, vedere aggiunta di un gestore messaggi.

Per aprire la finestra di dialogo nuovo messaggio Windows e i gestori eventi dal modello casella di dialogo, fare clic su un controllo nel modello di casella di dialogo e scegliere il comando di eventi dal menu di scelta rapida. In un progetto ATL, la classe box di dialogo è evidenziata nella casella oggetto di gestire o di classe ; considerando che, per un progetto MFC, viene evidenziato il controllo.

Aggiunta di una finestra di dialogo manualmente

L'implementazione di una finestra di dialogo è simile all'implementazione di una finestra. Puoi derivare una classe da CAxDialogImpl, CDialogImplo CSimpleDialog e dichiarare una mappa dei messaggi per gestire i messaggi. Tuttavia, è necessario inoltre specificare un ID di risorsa modello di finestra di dialogo nella classe derivata. La classe deve avere un membro dati denominato IDD per contenere questo valore.

&Notanbsp;  Quando si crea una finestra di dialogo utilizzando la creazione guidata oggetto, la procedura guidata aggiunge automaticamente il IDD membro come un tipo enum.

CDialogImpl consente di implementare un modale o una finestra di dialogo non modali che ospita i controlli di Windows. CAxDialogImpl consente di implementare un modale o una finestra di dialogo non modali che ospita i controlli ActiveX sia Windows.

Per creare una finestra di dialogo modale, creare un'istanza di tuo CDialogImpl-derivati (o CAxDialogImpl-derivati) classe e quindi chiamare il metodo DoModal . Per chiudere una finestra di dialogo modale, chiamare il metodo EndDialog da un gestore messaggi. Per creare una finestra di dialogo non modali, chiamare il metodo Create invece di DoModal. Per distruggere una finestra di dialogo non modali, chiamare DestroyWindow.

Se il tuo oggetto casella di dialogo contiene controlli ActiveX e si gestisce gli eventi di questi controlli, sarà necessario consigliare e unadvise tutte le interfacce del controllo ActiveX. Questo può essere fatto aggiungendo la seguente riga di codice per vostro InitDialog funzione:

AtlAdviseSinkMap (pMyDlg, TRUE)

Per unadvise tutti i controlli ActiveX, aggiungere la seguente riga di codice per vostro EndDialog funzione (o la funzione richiamata alla cessazione del tuo oggetto casella di dialogo):

AtlAdviseSinkMap (pMyDlg, FALSE)

Implementare i gestori di messaggi della finestra di dialogo, come si farebbe con i gestori in un CWindowImpl-classe derivata. Se c'è un valore restituito messaggio specifico, restituirlo come un LRESULT . Restituito LRESULT valori vengono mappati da ATL per gestione corretta dal gestore di finestre di dialogo. Per informazioni dettagliate, vedere il codice sorgente per CDialogImplBaseT::DialogProc in atlwin.

Esempio

La classe seguente implementa una finestra di dialogo:

classe CMyDialog: CDialogImpllt pubblica;CMyDialog >,...
{
pubblica:
   enum {IDD = IDD_MYDIALOG};

BEGIN_MSG_MAP(CMyDialog)
      MESSAGE_HANDLER (WM_INITDIALOG, OnInitDialog)
   END_MSG_MAP()

LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
      / / Do qualche inizializzazione codice
      restituire 1;
   }
}

Index