• Aucun résultat trouvé

MFC – Architecture basée sur des boîtes de dialogue

N/A
N/A
Protected

Academic year: 2022

Partager "MFC – Architecture basée sur des boîtes de dialogue"

Copied!
1
0
0

Texte intégral

(1)

Licence Informatique

Module Interface Homme Machine

TD 8

MFC – Architecture basée sur des boîtes de dialogue

L’environnement MFC propose d’autres types d’organisation que les architectures Vue/Document. Il est par exemple possible de développer des applications dont la « fenêtre » principale est basée sur une boîte de dialogue.

Le listing en annexe montre annexe le code « vide » généré lorsqu’on choisit cette option dans l’assistant de création d’applications (avec toutes les options gardées par défaut).

1. Etudier les classes générées en donnant les élément principaux (attributs, méthodes surchargées, …) On souhaite compléter ce squelette d’application pour créer l’applications suivante :

Les boutons OK et Annuler sont automatiquement générés. Les boutons « Haut, Bas, Gauche et Droite » ont été ajoutés pour déplacer le cercle rouge dans la boîte de dialogue.

2. Proposer une implémentation de cette application. Expliquer la démarche à suivre et donner le code C++ à insérer dans le squelette.

// Fichier IHM2Vide.h

class CIHM2VideApp : public CWinApp {

public:

CIHM2VideApp();

public:

virtual BOOL InitInstance();

DECLARE_MESSAGE_MAP() };

extern CIHM2VideApp theApp;

// Fichier IHM2Vide. Cpp

BEGIN_MESSAGE_MAP(CIHM2VideApp, CWinApp) ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP()

CIHM2VideApp::CIHM2VideApp() {

}

CIHM2VideApp theApp;

BOOL CIHM2VideApp::InitInstance() {

// InitCommonControlsEx() est requis sur Windows XP si le manifeste de l'application

// spécifie l'utilisation de ComCtl32.dll version 6 ou ultérieure pour activer les

// styles visuels. Dans le cas contraire, la création de fenêtres échouera.

INITCOMMONCONTROLSEX InitCtrls;

InitCtrls.dwSize = sizeof(InitCtrls);

// À définir pour inclure toutes les classes de contrôles communs à utiliser

// dans votre application.

InitCtrls.dwICC = ICC_WIN95_CLASSES;

InitCommonControlsEx(&InitCtrls);

CWinApp::InitInstance();

AfxEnableControlContainer();

// Initialisation standard

// Si vous n'utilisez pas ces fonctionnalités et que vous souhaitez réduire la taille

// de votre exécutable final, vous devez supprimer ci-dessous // les routines d'initialisation spécifiques dont vous n'avez pas besoin.

1

(2)

// Changez la clé de Registre sous laquelle nos paramètres sont enregistrés

// TODO : modifiez cette chaîne avec des informations appropriées,

// telles que le nom de votre société ou organisation

SetRegistryKey(_T("Applications locales générées par AppWizard"));

CIHM2VideDlg dlg;

m_pMainWnd = &dlg;

INT_PTR nResponse = dlg.DoModal();

if (nResponse == IDOK) {

// TODO : placez ici le code définissant le comportement // lorsque la boîte de dialogue est fermée avec OK

}

else if (nResponse == IDCANCEL) {

// TODO : placez ici le code définissant le comportement lorsque la boîte

// de dialogue est fermée avec Annuler }

return FALSE;

}

// IHM2VideDlg.h : fichier d'en-tête class CIHM2VideDlg : public CDialog {

public:

CIHM2VideDlg(CWnd* pParent = NULL);//

constructeur standard

enum { IDD = IDD_IHM2VIDE_DIALOG };

protected:

virtual void DoDataExchange(CDataExchange*

pDX); // Prise en charge de DDX/DDV protected:

HICON m_hIcon;

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

DECLARE_MESSAGE_MAP() };

// IHM2VideDlg.cpp : fichier class CAboutDlg : public CDialog {

public:

CAboutDlg();

enum { IDD = IDD_ABOUTBOX };

protected:

virtual void DoDataExchange(CDataExchange*

pDX); //

protected:

DECLARE_MESSAGE_MAP() };

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) {}

void CAboutDlg::DoDataExchange(CDataExchange* pDX) {

CDialog::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP()

CIHM2VideDlg::CIHM2VideDlg(CWnd* pParent =NULL) : CDialog(CIHM2VideDlg::IDD, pParent)

{

m_hIcon = AfxGetApp()-

>LoadIcon(IDR_MAINFRAME);

}

void CIHM2VideDlg::DoDataExchange(CDataExchange*

pDX) {

CDialog::DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CIHM2VideDlg, CDialog) ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP

END_MESSAGE_MAP()

BOOL CIHM2VideDlg::OnInitDialog() {

CDialog::OnInitDialog();

// Ajouter l'élément de menu "À propos de..." au menu Système.

// IDM_ABOUTBOX doit se trouver dans la plage des commandes système.

ASSERT((IDM_ABOUTBOX & 0xFFF0) ==

IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL) {

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty()) {

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

} }

// Définir l'icône de cette boîte de dialogue.

// L'infrastructure effectue cela automatiquement // lorsque la fenêtre principale de l'application n'est pas //une boîte de dialogue

SetIcon(m_hIcon, TRUE);

// Définir une grande icône

2

(3)

SetIcon(m_hIcon, FALSE);

// Définir une petite icône

// TODO : ajoutez ici une initialisation supplémentaire return TRUE;

}

void CIHM2VideDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX) {

CAboutDlg dlgAbout;

dlgAbout.DoModal();

} else {

CDialog::OnSysCommand(nID, lParam);

} }

// Si vous ajoutez un bouton Réduire à votre boîte de dialogue, // vous devez utiliser le code ci-dessous

// pour dessiner l'icône. Pour les applications MFC utilisant le //modèle Document/Vue,

// cela est fait automatiquement par l'infrastructure.

void CIHM2VideDlg::OnPaint() {

if (IsIconic()) {

CPaintDC dc(this);

// contexte de périphérique pour la peinture SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Centrer l'icône dans le rectangle client int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Dessiner l'icône

dc.DrawIcon(x, y, m_hIcon);

} else

{

CDialog::OnPaint();

} }

// Le système appelle cette fonction pour obtenir le curseur à // afficher lorsque l'utilisateur fait glisser

// la fenêtre réduite.

HCURSOR CIHM2VideDlg::OnQueryDragIcon() {

return static_cast<HCURSOR>(m_hIcon);

}

3

Références

Documents relatifs

initialisation (par lecture) des variables d'entrée ; writeln est facultatif, readln indispensable. pas de point virgule avant

Je m’étais fixé comme objectif de concevoir un projet d’architecture en utilisant la photographie dans le processus de création et, c’est de fil en aiguille

que l’art exprime l’absolu de façon immédiate dans l’intuition sensible, le droit tente d’organiser la contingence en lui donnant un sens qui la transcende. L’un et l’autre,

● Grâce aux paramètres un programme peut faire appel à d'autres programmes (déjà construits) pour rendre son service, dans une logique de

We have shown that our library of empirically specified dialogue games can be exploited into Dogma to generate fragments of dialogue that are: (i) coherent from a hu- man perspective

Nous proposons dans cet article une approche pour la modélisation du dialogue entre agents basée sur les engagements et les arguments.. Le dialogue est vu comme un

[r]

Comme il peut être observé au travers des états de User-MDP les données utilisées pour le regroupement sont symboliques, et donc le regroupement par K-moyennes est réalisé en