Implémentation d’une boîte de dialogue
Il existe deux façons d’ajouter une boîte de dialogue à votre projet ATL : utiliser l’Assistant Boîte de dialogue ATL ou l’ajouter manuellement.
Ajout d’une boîte de dialogue avec l’Assistant Boîte de dialogue ATL
Dans la boîte de dialogue Ajouter une classe, sélectionnez l’objet Boîte de dialogue ATL pour ajouter une boîte de dialogue à votre projet ATL. Renseignez l’Assistant Boîte de dialogue ATL selon les besoins, puis cliquez sur Terminer. L’Assistant ajoute une classe dérivée de CAxDialogImpl à votre projet. Ouvrez l’affichage des ressources dans le menu Affichage, recherchez votre boîte de dialogue et double-cliquez dessus pour l’ouvrir dans l’éditeur de ressources.
Remarque
Si votre boîte de dialogue est dérivée CAxDialogImpl
de , elle peut héberger à la fois les contrôles ActiveX et Windows. Si vous ne souhaitez pas que la prise en charge des contrôles ActiveX soit prise en charge dans votre classe de boîte de dialogue, utilisez CSimpleDialog ou CDialogImpl à la place.
Les gestionnaires de messages et d’événements peuvent être ajoutés à votre classe de boîte de dialogue à partir de l’affichage de classes. Pour plus d’informations, consultez Ajout d’un gestionnaire de messages ATL.
Ajout d’une boîte de dialogue manuellement
L’implémentation d’une boîte de dialogue est similaire à l’implémentation d’une fenêtre. Vous dérivez une classe de CAxDialogImpl, CDialogImpl ou CSimpleDialog et déclarez un mappage de messages pour gérer les messages. Toutefois, vous devez également spécifier un ID de ressource de modèle de boîte de dialogue dans votre classe dérivée. Votre classe doit avoir un membre de données appelé IDD
pour contenir cette valeur.
Remarque
Lorsque vous créez une boîte de dialogue à l’aide de l’Assistant Boîte de dialogue ATL, l’Assistant ajoute automatiquement le IDD
membre en tant que enum
type.
CDialogImpl
vous permet d’implémenter une boîte de dialogue modale ou sans mode qui héberge les contrôles Windows. CAxDialogImpl
vous permet d’implémenter une boîte de dialogue modale ou sans mode qui héberge les contrôles ActiveX et Windows.
Pour créer une boîte de dialogue modale, créez une instance de votre CDialogImpl
classe dérivée (ou CAxDialogImpl
-dérivée), puis appelez la méthode DoModal . Pour fermer une boîte de dialogue modale, appelez la méthode EndDialog à partir d’un gestionnaire de messages. Pour créer une boîte de dialogue sans mode, appelez la méthode Create au lieu de DoModal
. Pour détruire une boîte de dialogue sans mode, appelez DestroyWindow.
Les événements de récepteur sont automatiquement effectués dans CAxDialogImpl. Implémentez les gestionnaires de messages de la boîte de dialogue comme vous le feriez pour les gestionnaires d’une CWindowImpl
classe dérivée de -. S’il existe une valeur de retour spécifique au message, retournez-la en tant que LRESULT
. Les valeurs retournées sont mappées LRESULT
par ATL pour une gestion appropriée par le gestionnaire de boîtes de dialogue Windows. Pour plus d’informations, consultez le code source de CDialogImplBaseT ::D ialogProc dans atlwin.h.
Exemple
La classe suivante implémente une boîte de dialogue :
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*/);
};