Implementazione di una finestra di dialogo
Esistono due modi per aggiungere una finestra di dialogo al progetto ATL: usare la Creazione guidata finestra di dialogo ATL o aggiungerla manualmente.
Aggiunta di una finestra di dialogo con la creazione guidata finestra di dialogo ATL
Nella finestra di dialogo Aggiungi classe selezionare l'oggetto Dialogo ATL per aggiungere una finestra di dialogo al progetto ATL. Compilare la Procedura guidata finestra di dialogo ATL in base alle esigenze e fare clic su Fine. La procedura guidata aggiunge una classe derivata da CAxDialogImpl al progetto. Aprire Visualizzazione risorse dal menu Visualizza , individuare la finestra di dialogo e fare doppio clic su di essa per aprirla nell'editor di risorse.
Nota
Se la finestra di dialogo è derivata da CAxDialogImpl
, può ospitare sia controlli ActiveX che Windows. Se non si vuole che il sovraccarico del supporto del controllo ActiveX nella classe della finestra di dialogo, usare invece CSimpleDialog o CDialogImpl.
I gestori di messaggi ed eventi possono essere aggiunti alla classe della finestra di dialogo da Visualizzazione classi. Per altre informazioni, vedere Aggiunta di un gestore messaggi ATL.
Aggiunta manuale di una finestra di dialogo
L'implementazione di una finestra di dialogo è simile all'implementazione di una finestra. Si deriva una classe da CAxDialogImpl, CDialogImpl o CSimpleDialog e si dichiara una mappa messaggi per gestire i messaggi. È tuttavia necessario specificare anche un ID risorsa modello di finestra di dialogo nella classe derivata. La classe deve avere un membro dati chiamato IDD
per contenere questo valore.
Nota
Quando si crea una finestra di dialogo utilizzando la Creazione guidata finestra di dialogo ATL, la procedura guidata aggiunge automaticamente il IDD
membro come enum
tipo.
CDialogImpl
consente di implementare una finestra di dialogo modale o senza modalità che ospita i controlli Windows. CAxDialogImpl
consente di implementare una finestra di dialogo modale o senza modalità che ospita controlli ActiveX e Windows.
Per creare una finestra di dialogo modale, creare un'istanza della CDialogImpl
classe derivata (o derivata) e CAxDialogImpl
quindi chiamare il metodo DoModal . Per chiudere una finestra di dialogo modale, chiamare il metodo EndDialog da un gestore di messaggi. Per creare una finestra di dialogo senza modalità, chiamare il metodo Create anziché DoModal
. Per eliminare definitivamente una finestra di dialogo senza modalità, chiamare DestroyWindow.
Gli eventi di sink vengono eseguiti automaticamente in CAxDialogImpl. Implementare i gestori di messaggi della finestra di dialogo come si farebbe con i gestori in una CWindowImpl
classe derivata da . Se è presente un valore restituito specifico del messaggio, restituirlo come LRESULT
. I valori restituiti vengono mappati LRESULT
da ATL per una corretta gestione da parte di Gestione finestre di dialogo di Windows. Per informazioni dettagliate, vedere il codice sorgente per CDialogImplBaseT::D ialogProc in atlwin.h.
Esempio
La classe seguente implementa una finestra di dialogo:
class CMyDialog : public CDialogImpl<CMyDialog>
{
public:
enum { IDD = IDD_MYDLG };
BEGIN_MSG_MAP(CMyDialog)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnBnClickedCancel)
END_MSG_MAP()
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some initialization code
return 1;
}
public:
LRESULT OnBnClickedCancel(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
};