Partager via


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 CAxDialogImplde , 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 CDialogImplclasse 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 CWindowImplclasse 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*/);
};

Voir aussi

Classes de fenêtre