Développement Orienté Objet

  Chapitre 2 : Application basé
     sur boite de dialogue


                  DOO
          ...
Plan
 Les Boites de dialogues
 Création d’une application Dialog based
 Les Contrôles
 Echange de données de boîtes de dia...
Les Boites de dialogues
 Les boîtes de dialogue représentent le moyen de
 communication courant entre les applications de
...
Création d’une application Dialog based
avec AppWizard(1)
                    Lancement de l’assistant AppWizard :
       ...
Création d’une application Dialog based
avec AppWizard(2)
  Compiler/Linker : lancer la commande [Build | Build (F7)]
  po...
Création d’une application Dialog based
avec AppWizard(3)

  Modifier la ressource de boîte de dialogue principale
  Visua...
Création d’une application Dialog based
   avec AppWizard(4)
      Ajouter des gestionnaires de message à l’aide de
      ...
Création d’une application Dialog based
avec AppWizard(5)
// MainDialogDlg.cpp (vue partielle)
//…
BEGIN_MESSAGE_MAP(CMain...
Création d’une application Dialog based
avec AppWizard(6)
   Ajout des variables membres aux contrôles
// class MainDialog...
Création d’une application Dialog based
avec AppWizard(7)
void CMainDialogDlg::OnButtonA()
{
// TODO: Add your control not...
Contrôles communs de Windows et
classes MFC
   Contrôle      Classe MFC               Description
Button        CButton   ...
Check Box ou case à cocher(1)
 Une case à cocher est un booléen (vrai ou faux)
 contrairement au bouton radio qui est un e...
Check Box ou case à cocher(2)
    Variables associées de type: Bool
    Supposons on a créer une boite de dialogue contena...
Check Box ou case à cocher(3)
       Si on veut paramètrer la valeur par défaut de la variable
       c’est dans le constr...
Les Combo Box ou zone de liste
modifiable(1)

 Ce contrôle sert à afficher une liste d’options.
 La page propriété vous pe...
Les Combo Box ou zone de liste
modifiable(2)
 Elle supporte plusieurs modes de
 fonctionnements conditionnés à la valeur d...
Les Combo Box ou zone de liste
modifiable(3)
     Le remplissage d’une CCombobox:
 Il peut se faire de deux manières:
  - ...
Les Combo Box ou zone de liste
   modifiable(4)
Créer une variable m_combo1 attaché au combobox de type CCombobox
   BOOL ...
Les Combo Box ou zone de liste
    modifiable(5)
Méthode        Role                        Exemple
InsertString   Même rô...
Edit Box (ou zone d’édition)
  A la différence du « label » ou « Static Box », ce contrôle permet à
  l’utilisateur de tap...
List Box ou zone de liste(1)
  Le plus simple est de travailler avec une Clistbox
  Utiliser une variable de la classe CLi...
List Box ou zone de liste(2)
Méthodes       Role                         Exemple
AddString      Insérer des éléments      ...
Radio Button (ou Boutons bascule)
Un bouton radio est un entier. Il permet donc de gérer un groupe
d’options.

Souvent on ...
Echange de données de boîtes de
   dialogue
  lorsque l’on associe des variables aux contrôles (category
  Value dans Clas...
Échange de données de boîtes de
       dialogue
 Le mécanisme DDX transmet les valeurs des variables membres aux contrôles...
Création et affichage de boîtes de
dialogue
 On peut, ajouter des boîtes de dialogue supplémentaires pour
 assurer la comm...
Boîtes de dialogue modales(1)

Définition:
Est la boite de dialogue la plus utilisée, elle interdit
l'accès au reste des f...
Boîtes de dialogue modales(2)
 Etapes de création
 ajouter une ressource de boîte de dialogue (Insert
 | Resource).
 Place...
Boîtes de dialogue modales(3)
Application:

une boîte de dialogue s’ouvre
sur un click sur le bouton Dlg.
Cette boîte de d...
Boîtes de dialogue modales(4)
Avec ClassWizard, associer des variables CString aux zones
d’édition de la boîte principale ...
Boîtes de dialogue non modales(1)

 Définition:
 Sont moins utilisées, elle autorise l'accès a l’application
 tant qu’elle...
Boîtes de dialogue non modales(2)

 Exemple:
 on crée une application Main avec AppWizard, de type «
 Dialog Based », dont...
Boîtes de dialogue non modales(3)
   Ajouter un membre de type CNonModaleDlg à la classe de la
   boîte de dialogue princi...
Boîtes de dialogue non modales(4)
 Ajout du gestionnaire de la commande du menu:

void CMainDlg::OnBoiteNonModale()
{
// g...
Les fenêtres de messages(1)
Bon nombre des dialogues avec l’utilisateur consistent à
poser des questions auxquelles l’util...
Les fenêtres de messages(2)
int AfxMessageBox( « chaîne de caractère a affiché », style de la boite =
    MB_OK );

   le ...
Les fenêtres de messages(3)
  La valeur de retour est :

 0 Si mémoire insuffisante pour afficher la boîte
 IDABORT Le bou...
Les fenêtres de messages(4)

int CWnd::MessageBox(« chaîne de caractère a
affichée», « titre de la boite », style de la bo...
Classes dialog communes
En plus de la classe CDialog, MFC fournit plusieurs classes dérivées de
CDialog qui encapsulent de...
Ajout d’un menu à une boîte de
     dialogue(1)

 Une boîte de dialogue peut exploiter un menu:
 Des gestionnaires d’événe...
Ajout d’un menu à une boîte de
    dialogue(2)
Etapes de création      Description
                        - Ajouter une r...
Fonctions membres fréquemment
 remplacées de la classe CDialog
   Fonction     Message auquel elle    Objet du remplacemen...
Interception des clicks sur les boutons
   OK/CANCEL de la boîte(1)
Exemple1
  L’exemple ci-dessous présente le traitement...
Interception des clicks sur les boutons
OK/CANCEL de la boîte(2)
void CTestDlg::OnOK()
{
UpdateData(); //MAJ de m_edit_str...
Interception des clicks sur les boutons
  OK/CANCEL de la boîte(3)

Exemple2
L’exemple ci-dessous montre comment s’assurer...
Interception des clicks sur les boutons
OK/CANCEL de la boîte(4)
void CTestDlg::OnCancel()
{
if (MessageBox("Voulez-vous r...
Prochain SlideShare
Chargement dans…5
×

Doo

1 153 vues

Publié le

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 153
Sur SlideShare
0
Issues des intégrations
0
Intégrations
8
Actions
Partages
0
Téléchargements
13
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Doo

  1. 1. Développement Orienté Objet Chapitre 2 : Application basé sur boite de dialogue DOO N. Bouzrara 1
  2. 2. Plan Les Boites de dialogues Création d’une application Dialog based Les Contrôles Echange de données de boîtes de dialogue Création et affichage de boîtes de dialogue Les fenêtres de messages Classes dialog communes Ajout d’un menu à une boîte de dialogue Fonctions membres fréquemment remplacées de la classe CDialog 2
  3. 3. Les Boites de dialogues Les boîtes de dialogue représentent le moyen de communication courant entre les applications de type Windows et l'utilisateur. La classe CDialog offre une interface de gestion des boîtes de dialogue l'Éditeur de boîtes de dialogue Visual C++ facilite la conception des boîtes de dialogue et la création de leurs ressources de modèle de boîte de dialogue Enfin, les Assistants Code simplifient le processus d'initialisation et de validation des contrôles dans une boîte de dialogue, ainsi que le processus de collecte des valeurs entrées par l'utilisateur. 3
  4. 4. Création d’une application Dialog based avec AppWizard(1) Lancement de l’assistant AppWizard : sélectionner File | New | Projects |MFC AppWizard (.exe) Project Name = nom du projet (ici MainDialog) Location : chemin du répertoire qui contiendra le projet Step 1 : sélectionner « Dialog Based » Step 2/4 : garder les options cochées par défaut (About box, 3D controls, ActiveX Controls) Step 3/4 : les assistants peuvent génèrer des commentaires (préférable de garder cette option). Step 4/4 : résume les classes générées (cliquer sur Finish) 4
  5. 5. Création d’une application Dialog based avec AppWizard(2) Compiler/Linker : lancer la commande [Build | Build (F7)] pour produire l’exécutable de ce projet puis l’exécuter (CTRL+F5). On a obtenu une application de type boite de dialogue Le rôle du programmeur est de faire évoluer ce squelette initial : en complétant les méthodes générées, en ajoutant de nouvelles en ajoutant des classes etc. un autre assistant nommé ClassWizard va nous permettre d’ajouter des gestionnaires de messages, de créer des classes associées à des ressources de boîte de dialogue, d’associer des objets à des contrôles etc. 5
  6. 6. Création d’une application Dialog based avec AppWizard(3) Modifier la ressource de boîte de dialogue principale Visualiser RessourceView a l’aide de l’onglet RessourcesView de la fenêtre Workspace Ajouter deux contrôles Button, deux zones d’édition de texte, deux textes statiques 6
  7. 7. Création d’une application Dialog based avec AppWizard(4) Ajouter des gestionnaires de message à l’aide de ClassWizard Ajouter les deux méthodes OnButtonA()et OnButtonB() comme réponse au message BN_CLICKED au deux boutons. // MainDialogDlg.h (vue partielle) class CMainDialogDlg : public CDialog {//… // Generated message map functions //{{AFX_MSG(CMainDialogDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void OnButtonA(); // prototypes ajoutés par ClassWizard afx_msg void OnButtonB(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; 7
  8. 8. Création d’une application Dialog based avec AppWizard(5) // MainDialogDlg.cpp (vue partielle) //… BEGIN_MESSAGE_MAP(CMainDialogDlg, CDialog) //{{AFX_MSG_MAP(CMainDialogDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTONA, OnButtonA) //ajout d’une entrée à la table des messages ON_BN_CLICKED(IDC_BUTTONB, OnButtonB) //ajout d’une entrée à la table des messages //}}AFX_MSG_MAP END_MESSAGE_MAP() 8
  9. 9. Création d’une application Dialog based avec AppWizard(6) Ajout des variables membres aux contrôles // class MainDialogDlg.h (vue partielle) class CMainDialogDlg : public CDialog { //… public: CMainDialogDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CMainDialogDlg) // bannières qu’il ne faut pas modifier ! enum { IDD = IDD_MAINDIALOG_DIALOG}; CEdit m_editB; // les objets membres créés par ClassWizard CEdit m_editA; CButton m_boutonB; CButton m_boutonA; //}}AFX_DATA // bannières qu’il ne faut pas modifier ! }; 9
  10. 10. Création d’une application Dialog based avec AppWizard(7) void CMainDialogDlg::OnButtonA() { // TODO: Add your control notification handler code here CString str; // CString est la classe MFC de gestion des chaînes m_editA.GetWindowText(str); //str est une sortie de CEdit::GetWindowText(CString &) m_editB.SetWindowText(str); //str est une entrée de CEdit::SetWindowText(LPCSTR) } void CMainDialogDlg::OnButtonB() { // TODO: Add your control notification handler code here CString str; m_editB.GetWindowText(str); m_editA.SetWindowText(str); 10 }
  11. 11. Contrôles communs de Windows et classes MFC Contrôle Classe MFC Description Button CButton Boutons de commande qui déclenchent une action, également utilisés pour les cases à cocher, les cases d'options et les zones de groupe combo box CComboBox Combinaison d'une zone d'édition et d'une zone de liste edit box CEdit Zones qui permettent d'entrer du texte list box CListBox Zone qui contient une liste de chaînes scroll bar CScrollBar Barre de défilement utilisée comme un contrôle dans une boîte de dialogue (pas dans une fenêtre) static-text CStatic Texte servant à étiqueter d'autres 11 contrôles
  12. 12. Check Box ou case à cocher(1) Une case à cocher est un booléen (vrai ou faux) contrairement au bouton radio qui est un entier et qui permet donc de gérer un groupe d’options. Créez autant de « Check Box» que nécessaire. Page propriété L’option « Tab stop » permet d’accéder à la case à cocher avec la touche tabulation. BN_CLICKED Messages BN_DOUBLE_CLICKED 12
  13. 13. Check Box ou case à cocher(2) Variables associées de type: Bool Supposons on a créer une boite de dialogue contenant deux Checkbox, on associe les variables booléennes : m_music et m_sport. Déclaration des variabes dans la classe de la boite de dialogue: class CControleDlg : public CDialog { // Construction public: CControleDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CControleDlg) enum { IDD = IDD_CONTROLE_DIALOG }; BOOL m_music; BOOL m_sport; //}}AFX_DATA 13
  14. 14. Check Box ou case à cocher(3) Si on veut paramètrer la valeur par défaut de la variable c’est dans le constructeur de la boite de dialogue. CControleDlg::CControleDlg(CWnd* pParent /*=NULL*/) : CDialog(CControleDlg::IDD, pParent) { //{{AFX_DATA_INIT(CControleDlg) m_music = FALSE; m_sport = TRUE; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } - L’option sport va être coché par défaut 14
  15. 15. Les Combo Box ou zone de liste modifiable(1) Ce contrôle sert à afficher une liste d’options. La page propriété vous permet de changez les propriétés si nécessaire. Un clic sur le point d’interrogation de la boite de dialogue vous donnera la signification de toutes ces options. L’option « sort » fait un tri alphabétique des données 15
  16. 16. Les Combo Box ou zone de liste modifiable(2) Elle supporte plusieurs modes de fonctionnements conditionnés à la valeur de la zone Type: Le mode simple Une zone d’édition et une zone fixe de choix réglable. Le mode Drop Down Une zone d’édition et une liste Déroulante popup pour les options Le mode Drop List Une liste déroulante pour les options celles-ci n'étant pas modifiables. 16
  17. 17. Les Combo Box ou zone de liste modifiable(3) Le remplissage d’une CCombobox: Il peut se faire de deux manières: - Les données sont fixes: Les données sont saisies au niveau de l’onglet « Data » . Pour passer à la ligne entre chaque élément de la liste, il suffit de cliquer sur « Ctrl+Enter ». - Le remplissage est dynamique: Il suffira de remplir la CCombobox par sa méthode AddString, dans la methode InitInstance() de la classe de boite de dialogue: 17
  18. 18. Les Combo Box ou zone de liste modifiable(4) Créer une variable m_combo1 attaché au combobox de type CCombobox BOOL CControleDlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_combo1.AddString(« Jaune"); m_combo1.AddString(« Rouge"); m_combo1.AddString(« Vert"); return TRUE; // return TRUE unless you set the 18 focus to a control}
  19. 19. Les Combo Box ou zone de liste modifiable(5) Méthode Role Exemple InsertString Même rôle que M_combo1.InsertString(-1,”jaune”) ; AddString, on précise Si l’index=-1: insertion en bout de liste l’emplacement de l’insertion. SetCurSel Sélection d’une ligne. Sélection du dernier élément de la comboxbox : elle retourne l’indice de Int nCount=m_combo1.GetCount() ; l’élément sélectionné If(nCount>0) SetCurSel(nCount-1); GetCurSel Récupération de la Récupération de l’indice de l’item en sélection: sélection en cours Int GetCurSel() ; Récupération d’une chaîne pour un numéro d'indice: CString str ; Int nIndex=m_combo1.GetCurSel(); M_combo1.GetLBText(nIndex,str); AfxMessageBox(str); DeleteString Suppression d’une Suppression de tous les éléments de la combobox : ligne For(int i=0;i<m_combo1.GetCount();i++) { M_combo1.DeleteString(i); } Ce code peut être écrit autrement: M_combo1.ResetContent(); 19
  20. 20. Edit Box (ou zone d’édition) A la différence du « label » ou « Static Box », ce contrôle permet à l’utilisateur de taper du texte réutilisable. Par contre, ces deux contrôles permettent d’afficher une valeur venant d’une autre source. Propriété du contrôle Edit: Le mode multi ligne La saisie exclusive de nombre La gestion du scroll horizontal et vertical du texte (passage a la ligne automatiquement) La saisie en mode mot de passe La mise en majuscule / minuscule La possibilité de mettre l’edit en lecture seule 20
  21. 21. List Box ou zone de liste(1) Le plus simple est de travailler avec une Clistbox Utiliser une variable de la classe CListBox attachée au contrôle et utiliser directement les méthodes de cette classe Les méthodes: - Supposons qu’on a créée une variable m_maliste de type CListBox attaché au contrôle ListBox 21
  22. 22. List Box ou zone de liste(2) Méthodes Role Exemple AddString Insérer des éléments CString str= « option1 » dans la liste m_maliste.AddString(str) ; GetText Récupérer le texte Récupérer le texte de la ligne sélectionnée: d’une ligne. CString str ; Int nIndex=m_maliste.GetCurSel() ; M_maliste.GetText(nIndex,str) ; AfxMessageBox(str); DeleteString Supprimer une ligne On doit chercher le numéro d’index de la ligne en utilisant la fonction FindString nIndex =m_maListe.FindString(0, « Coucou ») ; m_maliste.DeleteString(nIndex); Supprimer la ligne en cours de selection: Int nIndex =m_maliste.GetCurSel() ; m_maliste.DeleteString(nIndex) ; SetCurSel Sélectionner le Int nCount=m_maListe.GetCount() ; dernier élément If(nCount>0) m_maListe.SetCurSel(nCount-1); ResetContent Détruire tous les éléments M_maliste.ResetContent() ; 22
  23. 23. Radio Button (ou Boutons bascule) Un bouton radio est un entier. Il permet donc de gérer un groupe d’options. Souvent on crée un « Group Box » qui contiendra les boutons. Cette zone de groupe sert à rassembler de façon fonctionnelle les boutons radios et à indiquer le titre du groupe. choisir l’option « Group » pour le premier bouton de chaque groupe. On associe une variable au premier bouton du groupe de type entier. Les boutons radio d’un groupe sont considéré comme un tableau d’entier :0,1,2.. Pour donner une valeur de départ à l’affichage de la fenêtre il suffit d’initialiser la variable du bouton radio dans la fonction InitDialog 23
  24. 24. Echange de données de boîtes de dialogue lorsque l’on associe des variables aux contrôles (category Value dans ClassWizard), ce sont les appels de la méthode héritée CDialog::UpdatData(BOOL) qui activent les échanges entre les variables et les contrôles. Cette méthode utilise la méthode virtuelle CControlesDlg::DoDataExchange() surdéfinie dans notre classe spécifique (dérivée de CDialog) pour réaliser les transferts DDX (Dynamic Data eXchange) entre variables et contrôles. CDialog::UpdateData(TRUE); //transferts DDX dans le sens contrôles->variables CDialog::UpdateData(FALSE) ; //transferts DDX dans le sens variables->contrôles 24
  25. 25. Échange de données de boîtes de dialogue Le mécanisme DDX transmet les valeurs des variables membres aux contrôles de la boîte de dialogue, où elles apparaissent lorsque la boîte de dialogue elle-même apparaît. Le même mécanisme transmet les valeurs entre les contrôles et les variables membres lorsque l'utilisateur clique sur le bouton OK (ou à chaque fois que Vous appelez la fonction membre UpdateData avec l'argument TRUE). 25
  26. 26. Création et affichage de boîtes de dialogue On peut, ajouter des boîtes de dialogue supplémentaires pour assurer la communication avec l’utilisateur (saisie de données, affichage de données). La création d'un objet dialog se déroule en deux temps Etape1: construire l'objet dialog Etape2 : créer la fenêtre de la boîte de dialogue Création d'une boîte de dialogue Type de boîte de Méthode de création dialogue Non Modale Construisez CDialog, puis appelez la fonction membre Create. Modale Construisez CDialog, puis appelez la fonction membre DoModal. 26
  27. 27. Boîtes de dialogue modales(1) Définition: Est la boite de dialogue la plus utilisée, elle interdit l'accès au reste des fenêtres du programme tant qu’elle est ouverte. L’utilisateur ferme la boite de dialogue en cliquant sur le bouton: OK, CDialog::DoMolal() retourne alors la constante IDOK CANCEL, CDialog::DoMolal() retourne alors la constante IDCANCEL De FERMETURE x, CDialog::DoMolal() retourne alors la constante IDCANCEL 27
  28. 28. Boîtes de dialogue modales(2) Etapes de création ajouter une ressource de boîte de dialogue (Insert | Resource). Placer des contrôles dans cette nouvelle ressource de boîte de dialogue puis lancer ClassWizard. Associer une classe dérivée de CDialog à cette nouvelle ressource. créer un objet automatique de la classe créée, puis invoquer sa méthode DoModal() 28
  29. 29. Boîtes de dialogue modales(3) Application: une boîte de dialogue s’ouvre sur un click sur le bouton Dlg. Cette boîte de dialogue permet à l’utilisateur de saisir une chaîne de caractère. Cette chaîne s’affiche dans la zone d’édition de la boîte de dialogue principale si l’utilisateur ferme la boîte de saisie en cliquant sur OK. 29
  30. 30. Boîtes de dialogue modales(4) Avec ClassWizard, associer des variables CString aux zones d’édition de la boîte principale (CMainDlg::m_edit) et de la boîte fille (CSaisieDlg::m_edit). Créer un gestionnaire de message sur le click sur le bouton Dlg. // MainDlg.Cpp (vue partielle du fichier d’implémentation de la boîte principale) #include “SaisieDlg.h” // insertion du fichier header de la boîte de dialogue //… implémentation de CMainDlg // gestionnaire de click sur le bouton Dlg void CMainDlg::OnButtonDlg() { // TODO: Add your control notification handler code here CSaisieDlg dlg; // objet automatique de la classe CSaisieDlg if(dlg.DoModal()==IDOK) // DoModal() retourne IDOK si la boîte est fermée avec OK { m_edit=dlg.m_edit; // m_edit : associé au contrôle de la boîte principale // dlg.m_edit : associé au contrôle de la boîte dlg 30 UpdateData(FALSE);}}
  31. 31. Boîtes de dialogue non modales(1) Définition: Sont moins utilisées, elle autorise l'accès a l’application tant qu’elle est ouverte. Etapes de création Créer une ressource de boîte de dialogue (Insert | Resource). Associer une classe dérivée de CDialog à cette ressource via ClassWizard. Créer un objet de cette classe puis appeler sa méthode CDialog::Create(). 31
  32. 32. Boîtes de dialogue non modales(2) Exemple: on crée une application Main avec AppWizard, de type « Dialog Based », dont la classe de boîte de dialogue principale est CMainDlg. Cette boîte de dialogue principale contient un menu dont la seule entrée est une commande intitulée « Boîte non modale ». Cette commande est censée afficher une boîte non modale. On choisi un ID pour la boîte non modale: IDD_NONMODALE_DLG On associe la classe CNonModaleDlg pour la boite non modale: 32
  33. 33. Boîtes de dialogue non modales(3) Ajouter un membre de type CNonModaleDlg à la classe de la boîte de dialogue principale #include "NonModaleDlg.h" class CMainDlg : public CDialog { // Construction public: CNonModaleDlg m_dlg; // objet membre (pour la boîte non // modale) Appeler la méthode Create() de l’objet de boîte non modale dans le gestionnaire OnInitDialog() de la boîte principale. m_dlg.Create(IDD_NONMODALE_DLG,this); // crée la fenêtre pour la // boîte 33
  34. 34. Boîtes de dialogue non modales(4) Ajout du gestionnaire de la commande du menu: void CMainDlg::OnBoiteNonModale() { // gestionnaire de la commande “Boîte non modale” // du menu de la boîte principale : affiche/cache la // boîte non modale if(m_dlg.IsWindowVisible()) m_dlg.ShowWindow(SW_HIDE); else m_dlg.ShowWindow(SW_SHOW); // rend la //fenêtre visible } 34
  35. 35. Les fenêtres de messages(1) Bon nombre des dialogues avec l’utilisateur consistent à poser des questions auxquelles l’utilisateur répond par Oui, Non, Recommencer, Annuler … Les boîtes de message permettent la gestion de tels échanges. Il y a deux façons de créer des boîtes de messages: AfxMessageBox: fonction de l’API Windows (cette fonction n’est membre d’aucune classe). MessageBox: fonction de la classe CWnd 35
  36. 36. Les fenêtres de messages(2) int AfxMessageBox( « chaîne de caractère a affiché », style de la boite = MB_OK ); le style de la boîte MB_ABORTRETRYIGNORE La boîte contient 3 boutons : Abort, Retry, et Ignore. MB_OK La boîte contient 1 bouton : OK. MB_OKCANCEL La boîte contient 2 boutons: OK et Cancel. MB_RETRYCANCEL La boîte contient 2 boutons: Retry et Cancel. MB_YESNO La boîte contient 2 boutons: Yes et No. MB_YESNOCANCEL La boîte contient 3 boutons: Yes, No, et Cancel. Le style peut être combiné par un OU logique avec les styles d’icônes suivantes MB_ICONHAND, MB_ICONSTOP, and MB_ICONERROR MB_ICONQUESTION MB_ICONEXCLAMATION et MB_ICONWARNING MB_ICONASTERISK et MB_ICONINFORMATION 36
  37. 37. Les fenêtres de messages(3) La valeur de retour est : 0 Si mémoire insuffisante pour afficher la boîte IDABORT Le bouton Abort a été sélectionné. IDCANCEL Le bouton Cancel a été sélectionné. IDIGNORE Le bouton Ignore a été sélectionné. IDNO Le bouton No a été sélectionné. IDOK Le bouton OK a été sélectionné. IDRETRY Le bouton Retry a été sélectionné. IDYES Le bouton Yes a été sélectionné. 37
  38. 38. Les fenêtres de messages(4) int CWnd::MessageBox(« chaîne de caractère a affichée», « titre de la boite », style de la boite = MB_OK ); Le style prend les mêmes valeurs que pour la fonction afxMessageBox. Exemple : MessageBox("Voulez-vous réellement annuler?", "Annuler ?", MB_YESNO|MB_ICONQUESTION); 38
  39. 39. Classes dialog communes En plus de la classe CDialog, MFC fournit plusieurs classes dérivées de CDialog qui encapsulent des boîtes de dialogue fréquemment utilisées, appelées « boîtes de dialogue communes » Classe dialog dérivée Fonction CColorDialog Permet à l'utilisateur de sélectionner les couleurs. CFileDialog Permet à l'utilisateur de sélectionner un nom de fichier à ouvrir ou à enregistrer. CFindReplaceDialog Permet à l'utilisateur de lancer une opération de recherche ou de remplacement dans un fichier texte. CFontDialog Permet à l'utilisateur de spécifier une police. CPrintDialog Permet à l'utilisateur de spécifier des informations pour un travail d'impression. CPrintDialogEx Feuille de propriétés d'impression Windows 2000. 39
  40. 40. Ajout d’un menu à une boîte de dialogue(1) Une boîte de dialogue peut exploiter un menu: Des gestionnaires d’événements peuvent alors être affectés aux différentes commandes du menu via ClassWizard (comme pour les contrôles). 40
  41. 41. Ajout d’un menu à une boîte de dialogue(2) Etapes de création Description - Ajouter une ressource de menu en sélectionnant la commande [Insert| Resource] puis choisir Menu. - L’éditeur de ressources permet alors de modifier le menu (penser à attribuer un ID au menu) - Dans l’onglet General des propriétés de la boîte de dialogue, sélectionner l’ID de la ressource de menu 41
  42. 42. Fonctions membres fréquemment remplacées de la classe CDialog Fonction Message auquel elle Objet du remplacement membre répond OnInitDialog WM_INITDIALOG Initialisation des contrôles de la boîte de dialogue. OnOK BN_CLICKED pour le Réponse quand bouton IDOK l'utilisateur clique sur le bouton OK. OnCancel BN_CLICKED pour le Réponse quand bouton IDCANCEL l'utilisateur clique sur le Bouton Annuler. 42
  43. 43. Interception des clicks sur les boutons OK/CANCEL de la boîte(1) Exemple1 L’exemple ci-dessous présente le traitement réalisé pour s’assurer que le texte saisi dans la zone d’édition a exactement 6 caractères (figure cicontre). La classe de boîte de dialogue est CTestDlg, cette classe contient un objet CString associé à la zone d’édition. 43
  44. 44. Interception des clicks sur les boutons OK/CANCEL de la boîte(2) void CTestDlg::OnOK() { UpdateData(); //MAJ de m_edit_str associé à la zone d’édition if(m_edit_str.GetLength()!=6) { MessageBox("Saisir 6 caractères", "Vérifier le nombre de caractères",MB_OK); return; //la boîte reste “ouverte” } CDialog::OnOK(); // ferme la boîte et retourne IDOK } 44
  45. 45. Interception des clicks sur les boutons OK/CANCEL de la boîte(3) Exemple2 L’exemple ci-dessous montre comment s’assurer que l’utilisateur souhaite réellement annuler lorsqu’il clique sur le bouton Cancel (figure ci-contre), ou lorsqu’il ferme la boîte en cliquant sur le bouton de fermeture X. 45
  46. 46. Interception des clicks sur les boutons OK/CANCEL de la boîte(4) void CTestDlg::OnCancel() { if (MessageBox("Voulez-vous réellement annuler?", "Annuler ?", MB_YESNO|MB_ICONQUESTION)== IDNO ) return; // laisse à l’utilisateur la chance de revenir sur son annulation CDialog::OnCancel(); // ferme la boîte et retourne //IDCANCEL } 46

×