• Aucun résultat trouvé

Développement d’applications à l’aide de l’assistant

N/A
N/A
Protected

Academic year: 2022

Partager "Développement d’applications à l’aide de l’assistant"

Copied!
11
0
0

Texte intégral

(1)

1

Plan - IHM

„

Etude du développement d’applications avec une interface graphique (de type Windows) et en Visual C++

„

Etude approfondie des MFC (Microsoft Fondation Classes)

„

Développement d’applications à l’aide de l’assistant

„

Génération automatique de squelettes d’applications

2

Introduction Le modèle WIMP

„ Les interfaces utilisateur graphiques ou (GUI) sont aussi appelées : Look and Feel que l'on peut traduire par présentation et comportement.

„ Elles servent à permettre le dialogue entre l'Homme et la Machine (IHM).

„ Les conditions de ce dialogue définissent l'ergonomie de l'application.

„ Les GUI sont basées sur le concept de métaphore c'est-à-dire un ensemble d'agrégats qui permettent de faire le lien entre le bureau et l'écran

„ Cet ensemble est appelé le WIMP (Windows, Icons, Menus, Pointer).

„ Les fenêtres, icônes, menus et souris sont appelés objets graphiques :

„ les icônes sont des fonctionnalités disponibles pour l'utilisateur,

„ la souris est une métaphore de la main,

„ le menu permet de passer des commandes.

3

Introduction

Le succès de Windows …

„ L’ “engouement” pour la programmation Windows s’explique par plusieurs raisons :

„ L’importance de développer des interfaces utilisateur graphiques conviviales.

„ Windows fournit un “quasi-standard” d’interface graphique et permet donc à un utilisateur de “prendre en main” très rapidement une application et son environnement.

„ Notons l’importance mais aussi la complexité du développement d’interfaces graphiques.

„ Windows est une interface complexe et touffue qui propose selon le mode de comptage entre 750 et 1250 appels de fonctions possibles (API natif de Windows (API = Application Programming Interface));

„ La programmation d’application Windows directement avec les fonctions de l’API natif est une tâche ardue, aussi les concepteurs d’environnement de programmation ont développé différents outils (bibliothèques, ...) qui permettent de simplifier ce travail.

„ La bibliothèque MFC (Microsoft Foundation Classes) de Visual C++ est une bibliothèque de classes d’objets qui encapsule dans des objets de plus haut niveau les fonctionnalités de l’API natif.

4

Introduction

Les points « forts » de Windows

„

La programmation pilotée par message

„

Programmation évènementielle

„

Un évènement est une action réalisée par l’utilisateur sur l’interface

„

Windows doit être capable de récupérer les informations liées à l’évènement

„

Transmettre cette information à l’application concernée pour déclencher le traitement de cet évènement

5

Introduction

Les points « forts » de Windows

„

Les sorties graphiques

„

Tous les objets créés par Windows sont graphiques

„ Les droites, les cercles, les boîtes sont traités comme des objets graphiques et sont créés à l'aide de l'interface graphique (GDI : Graphic Device Interface).

Æ indépendance des traitements vis-à-vis des périphériques

„

GDI reconnaît quatre types de systèmes d’affichage : l’écran, les périphériques de recopie d’écran

(imprimantes, traceurs), les bitmaps et les métafichiers.

Ces 2 derniers sont vus comme des pseudo-périphériques (stockage d’image en mémoire ou sur disque, partage d’images).

Æl’homogénéité des sorties graphiques est un point fort de Windows

6

Introduction

Les points « forts » de Windows

„

Les objets graphiques

„

Windows supporte un certain nombre d'objets consacrés au support de l'interface utilisateur :

„

fenêtres, icônes, boîtes de dialogue, ...

„

Possibilité pour une application d'utiliser ces objets et de les personnaliser

Æ diminution du coût de développement

(2)

7

Principe de programmation Windows

„

Eléments d’une fenêtre

Barre de titre Barre de menus Barre à outils Bouton de réduction Bouton d’agrandissement Bouton de fermeture

Barre d’état

Fenêtre parent Fenêtre enfant

Poignée de redimensionnement Zone client de la

fenêtre enfant

8

Principe de programmation Windows Structure d’un programme Windows

„

Sous sa forme la plus réduite un programme Windows, écrit uniquement avec l’API Windows comporte, 2 fonctions :

„ La fonction WinMain() qui est l’équivalent de la fonction main() d’un programme console.

„ La fonction WinProc() que Windows appelle pour traiter les messages destinés à l’application

„

Ces deux fonctions composent un programme complet mais elles ne sont pas directement liées. C’est Windows qui gère les appels à ces deux fonctions.

WINDOWS API Windows

WinMain() WinProc()

Début du programme Messages

Programme

9

Principe de programmation Windows Structure d’un programme Windows

„

La fonction WinMain()

„

La boucle de messages

while (Getmessage(&msg, NULL, 0,0)) { TanslateMessage( &msg);

DispatchMessage(&msg);

}

„

Cette boucle fonctionne tant que les messages reçus ne sont pas un message de terminaison de l'application.

„

GetMessage extrait un message de la file d’attente,

„

TranslateMessage convertit le message extrait, si nécessaire

„

DispatchMessage demande à Windows d’appeler la fonction WinProc() dans l’application pour traiter le message

10

Principe de programmation Windows Structure d’un programme Windows

„ Taxonomie des messages

„ Il existe environ 250 types de messages prédéfinis dans Windows. On peut distinguer 8 catégories principales de messages dont

„ les messages hardware : entrées d’informations avec le clavier ou la souris

„ messages de la souris

„ WM_LBUTTONDOWN, WM_LBUTTONUP, …

„ messages du clavier

„ WM_CHAR, WM_KEYDOWN

„ messages de maintenance des fenêtres :

„ notification, demande d’action (WM_CLOSE, WM_PAINT, ...)

„ les messages de maintenance de l’interface utilisateur concernant les menus

„ WM_COMMAND,WM_INITMENU, …

„ les messages de terminaison (WM_QUIT, ...)

„ les messages privés (pour fenêtres spécifiques : boîtes à liste, bouton, ...)

„ les messages de notification concernant les ressources système (WM_TIMECHANGE,...)

Principe de programmation Windows Structure d’un programme Windows

„

Fonctions de traitement des messages

„

Le décodage des messages est effectué à l’aide d’un instruction conditionnelle multiple dans la fonction WinProc()

„

Exemple

„

switch (message)

„

{ case WM_LBUTTONUP : …….; break;

„

case WM_PAINT : ……….; break;

„

………..

„

default : …….

„

}

Principe de programmation Windows Structure d’un programme Windows

„

Bilan

„

Principe de fonctionnement d’un programme Windows uniquement avec l’API natif

„Tâche ardue et complexe

„API Windows comporte plus d’un millier de fonctions qui permettent d’assurer les services et la communication nécessaires à la création d’une application Windows.

„

l’API Windows et Visual C++

„L’API n’est pas spécialement conçue pour le C++ (antérieure à C++ et l’approche objet)

„

Les MFC (Microsoft Foundation Classes) constituent un

ensemble de classes qui intègrent l’API Windows.

(3)

13

Principe de programmation Windows Architecture de Windows

„

Windows repose sur trois bibliothèques :

„ KERNEL, USER, GDI

„

KERNEL gère le support à bas niveau

„ des fichiers d'entrées/sorties,

„ de la mémoire,

„ du chargement des programmes,

„ des opérations classiques d'un OS (Operating System)

„

USER et GDI font appel aux services de KERNEL

„

USER s'occupe de la création et de la gestion des objets d'interface utilisateur :

fenêtres, menus, boîtes de dialogues, curseurs, icônes

„ Æ

l'objet primordial est la fenêtre

14

Principe de programmation Windows Architecture de Windows

„

GDI : Graphical Device Interface

„ assure l'indépendance vis-à-vis des périphériques

„ gère les dessins de fenêtres, les menus, les boîtes de dialogue, etc ...

„ USER utilise les services de GDI pour les tracés de ses objets Modules

Mémoire

Fichiers

Pointeurs Curseurs

Fenêtre

Icônes Menus

palette

plume pinceau DC région

police

bitmap

KERNEL USER GDI

15

Aperçu de la hiérarchie des classes MFC

„ CObject

„ CCmdTarget

„CWinThread

„CWinApp

„CWnd

„CFrameWnd

„ CMDIChidWnd

„ CMDIFrameWnd

„CView

„CDialog

„CDocument

„CDocTemplate

„CMultiDocTemplate

„CSingleTemplate

„CGdiObject

„CDC

„CClientDC

„CPaintDC

16

Aperçu de la hiérarchie des classes MFC

„ La classe CWnd représente les fenêtres

„ CFrameWnd les fenêtres « cadre » : fenêtres principales des applications.

„ CDialog concerne les fenêtres des boîtes de dialogue.

„ CView concerne les fenêtres de « présentation » d’un document

„ La classe CWinApp comporte toutes les fonctionnalités pour l'écriture d'une application :

„ initialisation de l'application, création de la fenêtre principale, traitement de la boucle de message, fin de l'application, nettoyage à la sortie de l'application.

„ La classe CDocument contient des fonctionnalités simplifiant la sauvegarde des donnée (manipulation d’un document).

„ La classe CGdiObject contient tous les objets de dessin comme le pinceau, le crayon, les fontes de dessin

„ La classe CDC concerne le contexte de périphérique avec les classes CClientDC et CPaintDC.

17

Relations entre les MFC et l’API Windows

1 . C la s se s d e s M F C

T W in T h re a d C W in A p p

C W n d

C F ra m e W n d C D ia lo g C C o n tro lB a r

C G d iO b je c t C D C

2 . O b je ts s ys tè m e W in A P I M o d u le s

M é m o ire F ic h ie rs

P o in te u rs C u rse u rs F e n ê tre Ic ô n e s M e n u s

p a le tte

p lu m e p in c e a u D C ré g io n p o lic e b itm a p

K E R N E L U S E R G D I

C O b je c t

18

Création d’une application avec l’assistant

„ L'assistant de Visual C++ permet le création de squelettes de programmes

„ qui peuvent ensuite être complétés par le programmeur pour ajouter des fonctionnalités.

„ A la création d'un nouveau projet, on peut par exemple choisir entre plusieurs types de projets et notamment, un type MFC :

„ Avec différents modèles comme

„ Application MFC

„ MFC DLL

„ Contrôle Active X MFC

„ En fonction de l'option choisie, le squelette de programme fournit une trame plus ou moins riche

„ Ce squelette doit être complété pour développer une application personnalisée.

(4)

19

Création d’une application avec l’assistant Le concept de document/vue

„

La structure d’un programme MFC peut intègrer deux entités : le document et la vue.

„

Le document comporte l’ensemble des données de l’application.

„

Un document est représenté par un objet d’une classe dérivée de la classe CDocument

„

qui a été enrichie avec les données propres de l’application.

„

MFC propose alors un ensemble de fonctionnalités

„

qui permettent de gérer facilement le document : enregistrement sur disque et chargement.

20

Création d’une application avec l’assistant Le concept de document/vue

„

Interfaces de document

„

Un programme peut traiter un seul ou plusieurs documents à la fois.

„

MFC propose deux types d’interface

„

L’interface pour la gestion d’un seul document

„Single Document Interface (SDI)

„

L’interface pour la gestion de plusieurs documents

„Multiple Document Interface (MDI)

21

Création d’une application avec l’assistant Le concept de document/vue

„

La vue concerne toujours un document particulier.

„

Elle permet de visualiser tout ou partie des données stockées dans un document.

„

La vue occupe la zone client d’une fenêtre cadre.

„

Plusieurs vues peuvent être associées à un document.

„

Séparation des données et de la «présentation » des données

22

Création d’une application avec l’assistant Le concept de document/vue

„

Liens les objets d’une application MFC

Objet Application SDI

Objet Modèle de Document

Fenêtre cadre Objet Document

Objet Vue

pointe sur création

Création d’une application avec l’assistant Création d’une application avec l’assistant

1

ère

étape

(5)

25

Création d’une application avec l’assistant 2

ème

étape

26

Création d’une application avec l’assistant 3

ème

étape

27

Création d’une application avec l’assistant 4

ème

étape

28

Création d’une application avec l’assistant 5

ème

étape

29

Création d’une application avec l’assistant 6

ème

étape

30

Création d’une application avec AppWizard Récapitulatif classesgénérées

„

Classes

„

CMainFrame

„

CIHMApp

„

CIHMDoc

„

CIHMView

(6)

31

Création d’une application avec l’assistant Exécution du programme généré

„

Menu par défaut

„

Barre à outils

„

Barre d’état

„

Caractéristiques classiques des fenêtres

„

Boutons fermeture, agrandissement, réduction

32

Création d’une application avec AppWizard Classes générées par AppWizard

IHM.h IHM.cpp CDialog

CAboutDlg Fenêtre de

dialogue

IHMVw.h IHMVw.cpp CView

CIHMView Vue

IHMDoc.h IHMDoc.cpp CDocument

CIHMDoc Document

MainFrm.h MainFrm.cpp CFrameWnd

CMainFrame Fenêtre cadre

Caché dans les

fichiers source MFC

CDocTemplate CSingleDoc

Template Modèle de

Document

IHM.h IHM.cpp CWinApp

CIHMApp Application

Fichiers Classe de base MFC Classe

Objet

33

Le squelette de l’application – L’objet Application

„ Détail de la classe CIHMApp (IHM.h)

„ class CIHMApp : public CWinApp {

public:

/* constructeur */

CIHMApp();

/* surcharge de la méthode InitInstance */

virtual BOOL InitInstance();

/* méthode d'affichage d'un message pour l'option Aide, A propos de IHM du menu */

afx_msg void OnAppAbout();

/* déclaration d'une table de message */

DECLARE_MESSAGE_MAP() };

34

Le squelette de l’application – L’objet Application

„

Le constructeur

„

CIHMApp::CIHMApp() {

}

„

Par défaut, le constructeur ne contient aucun code, il peut être complété par le programmeur.

Le squelette de l’application – L’objet Application

„ La méthode InitInstance

„ BOOL CIHMApp::InitInstance()

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

LoadStdProfileSettings(4);

/* Création du Document Template qui va avec la création de la fenêtre cadre, d'un document et d'une vue surle document. */

CSingleDocTemplate* pDocTemplate;

pDocTemplate = new CSingleDocTemplate(

IDR_MAINFRAME, RUNTIME_CLASS(CIHMDoc), RUNTIME_CLASS(CMainFrame RUNTIME_CLASS(CIHMView));

/* IDR_MAINFRAME est un ID pour les ressources de l'application */

/*RUNTIME_CLASS est une macro instruction utilisée pour créer l'objet spécifié en paramètre */

AddDocTemplate(pDocTemplate);

/* stocke un pointeur sur le document template dans l'objet application */

/* affichage de la fenêtre et envoi de son premier message WW_PAINT */

m_pMainWnd->ShowWindow(SW_SHOW);

m_pMainWnd->UpdateWindow();

return TRUE;

}

Le squelette de l’application

„ Le squelette d'application généré par AppWizard propose dans le menu principal les options Fichier, Edition, Affichage et Aide (?).

„ Le menu Fichier dispose d'un sous-menu classique :

„ Nouveau, Ouvrir, Enregistrer, Enregistrer sous,

„ Imprimer, Aperçu avant Impression, Configuration de l'impression.

„ Le menu Edition comporte Annuler, Couper, Copier et Coller.

„ Le menu Affichage propose l'affichage ou non par coche de la barre à outils et de la barre d'état.

„ L'Aide propose un sous menu « A propos de IHM » qui affiche une boîte de dialogue avec un message.

„ Lorsque l'utilisateur sélectionne une des options des menus, un message de type WM_COMMAND indiquant la commande activée.

„ La commande activée est identifiée grâce à un numéro.

„ La table des messages est chargée de faire le lien entre la commande activée (avec son identifiant) et le gestionnaire (la méthode) à exécuter.

(7)

37

Le squelette de l’application La table des messages

BEGIN_MESSAGE_MAP(CIHMApp, CWinApp)

ON_COMMAND(ID_APP_ABOUT, &CIHMApp::OnAppAbout) // Commandes de fichier standard

ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen) // Commande standard de configuration de l'impression

ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinApp::OnFilePrintSetup) END_MESSAGE_MAP()

„ Les messages spécifiés dans cette table sont :

„ l'option Aide, A propos de IHM avec la commande OnAppAbout qui est une méthode spécifiée dans la classe.

„ l'option Fichier, Nouveauavec la méthode standard héritée de CWinApp qui est OnFileNew.

„ l'option Fichier, Ouvriravec la méthode standard héritée de CWinApp qui est OnFileOpen.

„ l'option Fichier, Configurationde l'impression avec la méthode standard héritée de CWinApp qui est OnFilePrintSetUp.

38

Le squelette de l’application Le routage des messages

„

Lorsque l’utilisateur active l'option Aide, A propos de , Windows envoie un message WM_COMMAND spécifiant la commande activée ici ID_APP_ABOUT.

„

La boucle de message récupère ce message et le traite.

„

Un message WM_COMMAND peut en réalité être traité soit dans le document, la vue ou l’application.

„

Le gestionnaire de message consulte la table des messages pour savoir si un gestionnaire de ce message a été défini.

„

Si c'est le cas la méthode correspondante est invoquée.

39

Le squelette de l’application

„

La déclaration de l’objet application

„ // The one and only CIHMApp object

„ CIHMApp theApp;

„

La méthode OnAppAbout est la suivante :

„

void CIHMApp::OnAppAbout() {

CAboutDlg aboutDlg;

aboutDlg.DoModal();

}

„

Elle déclare un objet de type CAboutDlg et lance son exécution dans une fenêtre de dialogue de type modal.

„

La classe CAboutDlg est définie dans le fichier IHM.cpp.

40

Le squelette de l’application L’objet Fenêtre Cadre

„

La classe CMainFrame (MainFrm.h)

„

class CMainFrame : public CFrameWnd

{

protected:

/* attributs pour la barre d'état et la barre à outils */

CStatusBar m_wndStatusBar;

CToolBar m_wndToolBar;

/* constructeur */

CMainFrame();

/*méthode de réponse au message WM_CREATE */

int OnCreate(LPCREATESTRUCT lpCreateStruct);

/* table des messages de la fenêtre cadre */

DECLARE_MESSAGE_MAP()

41

Le squelette de l’application L’objet Fenêtre Cadre

„

La classe CMainFrame (MainFrm.h) suite public:

/* permet de modifier les styles de la fenêtre cadre */

virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

/* destructeur */

virtual ~CMainFrame();

};

42

Le squelette de l’application L’objet Fenêtre Cadre

„

Table des message de la classe CMainFrame

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_CREATE()

END_MESSAGE_MAP()

„

Ici la macro fonction ON_WM_CREATE

„

réfère au message correspondant WM_CREATE

„

et au gestionnaire de message associé

OnCreate (automatiquement).

(8)

43

Le squelette de l’application L’objet Fenêtre Cadre

„

La méthode OnCreate de la classe CMainFrame

„

La barre à outils et la barre d'état sont déclarées comme données membre de la classe CMainFrame.

„ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

/* Appel de la méthode héritée OnCreate de la classe mère CFrameWnd */

if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

44

Le squelette de l’application L’objet Fenêtre Cadre

„

La méthode OnCreate de la classe CMainFrame (suite)

„ /* Création de la barre à outils en paramétrant son style, avec la méthode CreateEx de la classe CToolBar */

„ /* Chargement de cette barre dans la fenêtre cadre avec la méthode LoadToolBar avec en paramètre l'identifiant de la fenêtre cadre */

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD

| WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS

| CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n");

return -1; // fail to create }

45

Le squelette de l’application L’objet Fenêtre Cadre

„ La création de la barre d'état est faite par un appel à la fonction Create de la classe CToolBar et à la méthode SetIndicators

„ Les indicateurs souhaités sont décrits dans la le fichier MainFrm.cpp

„ sous forme d'un tableau : static UINT indicators[] = {

ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS,

ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };

if (!m_wndStatusBar.Create(this) ||

!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) {

TRACE0("Failed to create status bar\n");

return -1; // fail to create }

*/ Les indicateurs sont de petites zones sur la barre d'état */

return 0;

} 46

Le squelette de l’application L’objet Document

„

La classe CIHMDoc (CIHMDoc.h) class CIHMDoc : public CDocument {

protected:

/* Constructeur par défaut */

CIHMDoc();

/* Macro fonction qui permet la création dynamique d'un objet de type CIHMDoc */

DECLARE_DYNCREATE(CIHMDoc)

Le squelette de l’application L’objet Document

„

La classe CIHMDoc (CIHMDoc.h) public:

/* Destructeur */

virtual ~CIHMDoc();

/* Cette méthode permet l'insertion de code pour la ré- initialisation du document SDI */

virtual BOOL OnNewDocument();

/* MFC fait appel à Serialize pour lire ou écrire des données dans un fichier et recréer un document */

virtual void Serialize(CArchive& ar);

protected:

DECLARE_MESSAGE_MAP() };

Le squelette de l’application L’objet Document

„

L'implémentation de la classe CIHMDoc (CIHMDoc.cpp) /* à utiliser conjointement avec la déclaration

DECLARE_DYNCREATE(CIHMDoc) */

IMPLEMENT_DYNCREATE(CIHMDoc, CDocument) /* Table des messages, vide ici */

BEGIN_MESSAGE_MAP(CIHMDoc, CDocument) END_MESSAGE_MAP()

CIHMDoc::CIHMDoc()

{ // TODO: add one-time construction code here }

(9)

49

Le squelette de l’application L’objet Document

„ L'implémentation de la classe CIHMDoc (CIHMDoc.cpp)

BOOL CIHMDoc::OnNewDocument() { if (!CDocument::OnNewDocument())

return FALSE;

// TODO: add reinitialization code here // (SDI documents will reuse this document) return TRUE;

}

void CIHMDoc::Serialize(CArchive& ar) { if (ar.IsStoring())

{ // TODO: add storing code here } else

{ // TODO: add loading code here }

} 50

Le squelette de l’application L’objet Vue

„

La classe CIHMView (CIHMView.h)

class CIHMView : public CView {

protected:

CIHMView();

DECLARE_DYNCREATE(CIHMView) public:

CIHMDoc* GetDocument();

virtual void OnDraw(CDC* pDC);

virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

protected:

virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);

virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

DECLARE_MESSAGE_MAP() };

51

Le squelette de l’application L’objet Vue

„

La table des messages de la classe CIHMView

„

Les messages traités ici concernent les messages émis lors du choix dans le menu des options d'impression (imprimer, aperçu avant impression)

„

les méthodes de la classe mère sont utilisées

„ (OnFilePrint, OnFilePrintPreview).

BEGIN_MESSAGE_MAP(CIHMView, CView)

ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)

END_MESSAGE_MAP()

/* Implémentation correspondant à la déclaration DECLARE_DYNCREATE */

IMPLEMENT_DYNCREATE(CIHMView, CView)

52

Le squelette de l’application L’objet Vue

„

Les méthodes de la classe CIHMView (CIHMView.cpp) CIHMView::CIHMView() //constructeur

{ }

CIHMView::~CIHMView() // destructeur { }

BOOL CIHMView::PreCreateWindow(CREATESTRUCT& cs)

{

/* Permet de modifier le style de la fenêtre en modifiant la structure CREATESTRUCT cs */

return CView::PreCreateWindow(cs);

}

53

Le squelette de l’application L’objet Vue

„

Les méthodes de la classe CIHMView (CIHMView.cpp)

BOOL CIHMView::OnPreparePrinting(CPrintInfo* pInfo) { // Préparation par défaut

return DoPreparePrinting(pInfo);

}

void CIHMView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) { // Ajout d‘actions spécifiques avant l'impression

}

void CIHMView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo) { // Ajout d'actions spécifiques après l'impression

}

54

Le squelette de l’application L’objet Vue

„

La méthode OnDraw

„

La méthode OnDraw de la classe CIHMView se contente d'obtenir un pointeur sur le document de type CIHMDoc et de s'assurer de sa validité.

„

La méthode OnDraw a en paramètre un pointeur sur un contexte de périphérique pour permettre le tracé de la vue.

void CIHMView::OnDraw(CDC* pDC) { CIHMDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

}

(10)

55

Le squelette de l’application L’objet Vue

„ La méthode OnDraw ne répond pas directement à un message .

„ L'objet vue CView a un gestionnaire de message OnPaint qui est prédirigé pour toute classe dérivée de CView.

„ Le gestionnaire OnPaint effectue principalement deux tâches :

„ créer un objet de type CPaintDC pour avoir un contexte de périphérique,

„ appeler la méthode OnDraw.

CPaintDC dc(this);

OnPrepareDC(&dc);

OnDraw(&dc);

„ La méthode OnPaint répond au message WM_PAINT. Ce message est émis lors du 1er affichage d'une fenêtre (UpdateWindow) ou lorsqu'une fenêtre a été endommagée.

56

Le squelette de l’application L’objet Vue

„ La méthode OnDraw

CIHMDoc* CIHMView::GetDocument() {

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CIHMDoc)));

return (CIHMDoc*) m_pDocument;

}

„

La classe CIHMView possède un attribut (hérité de CView) qui est m_pDocument.

„

La macro ASSERT permet de s'assurer que m_pDocument est bien de type CIHMDoc.

„

La fonction GetDocument renvoie un pointeur sur le document.

57

Le squelette de l’application - WinMain

„

La fonction WinMain

„

La fonction principale WinMain est définie dans les MFC.

„

Lorsque l'utilisateur démarre une application, la première étape est la construction de l'objet application : theApp pour lequel de l'espace est alloué avec un appel du constructeur.

„

Windows appelle la fonction WinMain.

„

WinMain appelle InitInstance, la fonction Run et termine à la réception du message WM_QUIT (avec la méthode ExitInstance)

58

Le squelette de l’application - WinMain

„

Code source de WinMain

int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {

ASSERT(hPrevInstance == NULL);

int nReturnCode = -1;

CWinThread* pThread = AfxGetThread();

CWinApp* pApp = AfxGetApp();

if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow)) goto InitFailure;

// App global initializations (rare)

if (pApp != NULL && !pApp->InitApplication()) goto InitFailure;

Le squelette de l’application - WinMain

// Perform specific initializations if (!pThread->InitInstance()) {

if (pThread->m_pMainWnd != NULL) {

TRACE0("Warning: Destroying non-NULL m_pMainWnd\n");

pThread->m_pMainWnd->DestroyWindow();

}

nReturnCode = pThread->ExitInstance();

goto InitFailure;

}

nReturnCode = pThread->Run();

InitFailure:

// Traitement des erreurs

return nReturnCode;

}

Application (SDI) Crée

Démarre la séquence de création

Initialise App Run() InitInstance()

Active la boucle de messages

Distribue les messages aux autres objets ExitInstance()

Nettoyage au niveau App

Document Template

Document Template Document Frame Window View

(11)

61 possède

Document Template

DeleteContents() Nettoie après Document Document

OnNewDocument() Initialise Document

OnOpenDocument() Initialise Document

Serialize() Sauvegarde Document

View

62 Contient

View

Constructeur Initialise la vue

OnDraw()

Dessine les données dans la vue

Destructeur() Nettoie après la vue Frame Window

Références

Documents relatifs

Tableau 6 – Exemple de vérification des règles de contrôle de validité d’une interface homme-machine ...9.. Tableau 7 – Exemple de vérification d’une

Cette recherche analyse les effets de deux tâches d‟aide à la compréhension et à la production d‟un texte explicatif en français et montre que ces tâches

Exercice 4 : La combustion complète de 0.35 g d’un composé A de formule brute C x H y a donné 0,45 g d’eau. Déduire celui du carbone.. 2/ a- Sachant que la masse molaire de A est

marge brute – remise – prix d’achat net – prix de vente hors taxe – coût d’achat prix de vente toute taxe comprise – prix d’achat net – frais d’achat – prix

Mise en valeur du travail de création : Ronsard au gré des poèmes associe le mythe de Méduse à un autre mythe, complète et dépasse le mythe en attribuant à

Le soumissionnaire remet, comme pièce constitutive de son offre, un document par lequel il marque son engagement à mettre en œuvre

* Détermination de la graduation 100 : on plonge le réservoir du thermomètre dans de l’eau en ébullition sous la pression atmosphérique normale.. Le liquide dans le capillaire

3- Pour déterminer la composition centisémale de la substance (A) on réalise la combustion complète de l’échantillon précèdent, on remarque que la masse du dioxyde de