Programmation Windows Initiation à l’utilisation de Visual C++ Franck Rubi LaBRI Décembre 2000
Franck Rubi, LaBRI2 Première Partie zQuelques rappels de C++ zDécouverte de l’environnement VC++ zDévelopper sous VC++ zGestion de l’interface utilisateur zMFC et Structures de données zSérialisation zExercice: Un mini « paint »
Décembre 2000Franck Rubi, LaBRI3 Quelques rappels de C++ zProgrammation Objet Classes, champs, méthodes, encapsulation zGénéricité Patron de classe « template » zHéritage et Polymorphisme Héritage simple ou multiple, fonctions « virtual » zExceptions Définitions, génération « throw », capture « try, catch »
Décembre 2000Franck Rubi, LaBRI4 Découverte de l’environnement VC++ zModèle classique programmes, bibliothèques, ressources, aides, makefile Plusieurs types d ’applications: yWIN32 Application en mode console API WIN32, fenêtre DOS yWin32 Application API WIN32, fenêtre Windows yProgrammation à l ’aide de la bibliothèque de classes zModèle à base de composants, internet
Décembre 2000Franck Rubi, LaBRI5 Découverte de l ’environnement VC++ zNotion de projet 1 projet = 1 dossier xsources (h,cpp), makefile (dsp,dsw), xressources(rc, ico, rc2) xAides (hpj, bmp, rtf) xreadme.txt xdossiers DEBUG, RELEASE x… Avec dossier debug : plus de 7Mo
Décembre 2000Franck Rubi, LaBRI6 Découverte de l ’environnement VC++ L ’environnement de programmation contient: zUn éditeur de texte avec fenêtre « Workspace » zCompilateur, éditeur de liens zUn outil de debug symbolique puissant zUn éditeur de ressources zDes assistants: yde création de projet (APP WIZARD) yde création de classes, de gestion d’événements,... zUne aide en ligne importante zDifférents outils liés (install shield, visual source safe, …)
Décembre 2000Franck Rubi, LaBRI7 Environnement VC++
Décembre 2000Franck Rubi, LaBRI8 Assistant de création d’application: Découverte de l ’environnement VC++
Décembre 2000Franck Rubi, LaBRI9 Développer sous VC++ 1. Création d ’une application console (fenêtre DOS) // appliconsole.cpp : Defines the entry point for the console application. #include "stdafx.h" int main(int argc, char* argv[]) { printf("Hello World!\n"); return 0; }
Décembre 2000Franck Rubi, LaBRI10 Développer sous VC++
Décembre 2000Franck Rubi, LaBRI11 Développer sous VC++ 2. Création d’une application s’exécutant dans une fenêtre Windows Un extrait: BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // Store instance handle in our global variable hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) {return FALSE;} ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; }
Décembre 2000Franck Rubi, LaBRI12 Développer sous VC++
Décembre 2000Franck Rubi, LaBRI13 Développer sous VC++ 3. Une application utilisant la MFC yBibliothèque de classes de VC Microsoft Foundation Classes yArchitecture document - vue Fichier Objet « Document » Sérialisation Objet « Vue » Affichage Utilisateur
Décembre 2000Franck Rubi, LaBRI14 Développer sous VC++ zUne application MFC - VC++ est: y« Simple document » type bloc-notes y« Multiple document » par exemple Word Disposent d ’une fenêtre principale avec barre de menu classique et barre de boutons. yde type « Dialog », sans manipulation de fichier s ’affiche sous forme d ’une boite de dialogue avec bouton de fermeture.
Décembre 2000Franck Rubi, LaBRI15 Développer sous VC++ 3. Création d’une application MFC en utilisant l ’assistant de création d’application 6 classes créées: CAboutDLG: Boite de dialogue Auteur - Version C…App: La classe principale qui hérite de CWinApp C…Doc: La classe document (Cdocument) C…View: La classe Vue (Cview ou CScrollView) CMainFrame: La fenêtre principale (CMDIFrameWnd) CChildFrame: les fenêtres filles (CMDIChildWnd)
Décembre 2000Franck Rubi, LaBRI16 Développer sous VC++
Décembre 2000Franck Rubi, LaBRI17 Gestion de l’interface utilisateur zGestion événements souris et Dessins yWM_RBUTTONDOWN, WM_LBUTTONDOWN, WM_MOUSEMOVE, … yaffichage d ’une boite simple AfxMessageBox(…) yContexte d ’affichage (texte et dessin) Classes CDC et CClientDC fonctions CDC::TextOut, CDC::MoveTo, CDC::LineTo yEpaisseur et couleur (CPen, COLORREF) zBoites de Dialogue yUtilisation de boites prédéfinies (CColorDialog) yCréation d ’une boite à l ’aide de l’éditeur de ressources zMenu et Barre d’outils
Décembre 2000Franck Rubi, LaBRI18 MFC et structures de données zDes classes génériques pour les structures de données: yTableaux dynamiques: CArray méthodes: GetSize, SetSize, Add, operator[],... yListes: CList et variantes méthodes: AddHead, AddTail, IsEmpty GetHeadPosition, GetNext, RemoveHead,... yTable de Hashage: Cmap méthodes: SetAt( ARG_KEY key, ARG_VALUE newValue ) InitHashTable( UINT hashSize ),...
Décembre 2000Franck Rubi, LaBRI19 Sérialisation zPermet sauvegarde et restauration de manière simple // CAppliMFCDoc serialization void CAppliMFCDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here }
Exercice un mini « paint »