• 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

Cette nouvelle méthode est utilisée pour simuler le comportement d’un composite constitué de particules de chanvre et d’une matrice cimentaire et les résultats numériques

Secure Proxy ND résout ici le problème en utilisant une clé Publique et un certificat par MAG et en protégeant chaque message émis par leur adresse “commune” avec l’option de

Nous considérons ici que le comportement d’un porteur est constitué d’un ensemble d’habi- tudes qui sont caractérisées par un type de transaction, une distribution normale

Cette nouvelle méthode est utilisée pour simuler le comportement d’un composite constitué de particules de chanvre et d’une matrice cimentaire et les résultats numériques

Chapitre IV Architecture d'un Système de Négociation 1 Introduction Dans le chapitre précèdent, nous avons vu les systèmes de dialogue et l’apport de l’argumentation pour

Dans ce papier, afin de capturer plus largement le comportement du convoi, les informations transmises par le v´ehicule imm´ediatement devant et par le leader sont utilis´ees

Nous étudions le comportement asymptotique lorsque le temps tend vers l’infini des solutions des équations de Schrödinger-Poisson (NLSP) avec non linéarité cubique en présence

Nous proposons ici une approche en minimum de résidu avec utilisation de normes dites idéales dans le but d’obtenir la meilleure approximation de la solution dans un ensemble