Implémenter une boîte de dialogue
Il existe deux façons d'ajouter une boîte de dialogue ATL à votre projet : utilisez l'Assistant Dialogue ATL ou ajoutez -le manuellement.
Ajouter une boîte de dialogue à l'aide de Dialogue ATL
Dans ajoutez la boîte de dialogue de classe, sélectionnez l'objet dialog ATL pour ajouter une boîte de dialogue à votre projet ATL. Remplissez Assistant Dialogue ATL en conséquence et cliquez sur Finish. l'assistant ajoute une classe dérivée de CAxDialogImpl à votre projet. Ouvrez l'affichage des ressources de menu Affichage , localisez votre dialogue, et double-cliquez dessus pour l'ouvrir dans l'éditeur de ressources.
Notes
Si votre boîte de dialogue est dérivée d' CAxDialogImpl, il peut héberger des contrôles ActiveX et Windows.Si vous ne souhaitez pas la charge mémoire de la prise en charge de contrôles ActiveX dans votre classe de boîte de dialogue, utilisez CSimpleDialog ou CDialogImpl à la place.
Le message et les gestionnaires d'événements peuvent être ajoutés à votre classe de boîte de dialogue 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
Implémenter une boîte de dialogue est semblable à implémenter une fenêtre. Vous dérivez une classe de CAxDialogImpl, de CDialogImpl, ou de CSimpleDialog et déclarez table des messages messages de handle. Toutefois, vous devez également spécifier un ID de ressource modèle de boîte de dialogue dans votre classe dérivée. Votre classe doit avoir un membre appelée IDD pour stocker cette valeur.
Notes
Lorsque vous créez une boîte de dialogue à l'aide de l'Assistant Dialogue ATL, l'assistant ajoute automatiquement le membre d' IDD comme type d' enum .
CDialogImpl vous permet d'implémenter un modal ou une boîte de dialogue non modale qui héberge des contrôles Windows. CAxDialogImpl vous permet d'implémenter un modal ou une boîte de dialogue non modale qui héberge des contrôles ActiveX et Windows.
Pour créer une boîte de dialogue modale, créez une instance de votre CDialogImpl()dérivé) la classe dérivée (ou CAxDialogImplet appelez la méthode de DoModal . Pour fermer la boîte de dialogue modale, appelez la méthode d' EndDialog d'un gestionnaire de messages. Pour créer une boîte de dialogue non modale, appelez la méthode de création au lieu d' DoModal. Pour détruire une boîte de dialogue non modale, appelez DestroyWindow.
Jambage descendant des événements est automatiquement effectuée dans CAxDialogImpl. Implémentez les gestionnaires de messages de la boîte de dialogue lorsque vous les gestionnaires dans CWindowImplclasse dérivée. Si une valeur de retour de message- spécifique, renvoyez- la comme LRESULT. Les valeurs retournées par LRESULT sont mappées par ATL pour la gestion appropriée par le gestionnaire de dialogue windows. Pour plus d'informations, consultez le code source de CDialogImplBaseT::DialogProc 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*/);
};