210 likes | 334 Vues
Programmation Windows. Initiation à l’utilisation de Visual C++ Franck Rubi LaBRI rubi@labri.fr Décembre 2000. Première Partie. Quelques rappels de C++ Découverte de l’environnement VC++ Développer sous VC++ Gestion de l’interface utilisateur MFC et Structures de données
E N D
Programmation Windows Initiation à l’utilisation de Visual C++ Franck Rubi LaBRI rubi@labri.fr Décembre 2000
Première Partie • Quelques rappels de C++ • Découverte de l’environnement VC++ • Développer sous VC++ • Gestion de l’interface utilisateur • MFC et Structures de données • Sérialisation • Exercice: Un mini « paint » Franck Rubi, LaBRI
Quelques rappels de C++ • Programmation Objet Classes, champs, méthodes, encapsulation • Généricité Patron de classe « template » • Héritage et Polymorphisme Héritage simple ou multiple, fonctions « virtual » • Exceptions Définitions, génération « throw », capture « try, catch » Franck Rubi, LaBRI
Découverte de l’environnement VC++ • Modèle classique programmes, bibliothèques, ressources, aides, makefile Plusieurs types d ’applications: • WIN32 Application en mode console API WIN32, fenêtre DOS • Win32 Application API WIN32, fenêtre Windows • Programmation à l ’aide de la bibliothèque de classes • Modèle à base de composants, internet Franck Rubi, LaBRI
Découverte de l ’environnement VC++ • Notion de projet 1 projet = 1 dossier • sources (h,cpp), makefile (dsp,dsw), • ressources(rc, ico, rc2) • Aides (hpj, bmp, rtf) • readme.txt • dossiers DEBUG, RELEASE • … Avec dossier debug : plus de 7Mo Franck Rubi, LaBRI
Découverte de l ’environnement VC++ L ’environnement de programmation contient: • Un éditeur de texte avec fenêtre « Workspace » • Compilateur, éditeur de liens • Un outil de debug symbolique puissant • Un éditeur de ressources • Des assistants: • de création de projet (APP WIZARD) • de création de classes, de gestion d’événements,... • Une aide en ligne importante • Différents outils liés (install shield, visual source safe, …) Franck Rubi, LaBRI
Environnement VC++ Franck Rubi, LaBRI
Découverte de l ’environnement VC++ Assistant de création d’application: Franck Rubi, LaBRI
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; } Franck Rubi, LaBRI
Développer sous VC++ Franck Rubi, LaBRI
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; } Franck Rubi, LaBRI
Développer sous VC++ Franck Rubi, LaBRI
Développer sous VC++ 3. Une application utilisant la MFC • Bibliothèque de classes de VC++ 6.0 Microsoft Foundation Classes • Architecture document - vue Affichage Sérialisation Utilisateur Fichier Objet « Document » Objet « Vue » Franck Rubi, LaBRI
Développer sous VC++ • Une application MFC - VC++ est: • « Simple document » type bloc-notes • « Multiple document » par exemple Word Disposent d ’une fenêtre principale avec barre de menu classique et barre de boutons. • de type « Dialog », sans manipulation de fichier s ’affiche sous forme d ’une boite de dialogue avec bouton de fermeture. Franck Rubi, LaBRI
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) Franck Rubi, LaBRI
Développer sous VC++ Franck Rubi, LaBRI
Gestion de l’interface utilisateur • Gestion événements souris et Dessins • WM_RBUTTONDOWN, WM_LBUTTONDOWN, WM_MOUSEMOVE, … • affichage d ’une boite simple AfxMessageBox(…) • Contexte d ’affichage (texte et dessin) Classes CDC et CClientDC fonctions CDC::TextOut, CDC::MoveTo, CDC::LineTo • Epaisseur et couleur (CPen, COLORREF) • Boites de Dialogue • Utilisation de boites prédéfinies (CColorDialog) • Création d ’une boite à l ’aide de l’éditeur de ressources • Menu et Barre d’outils Franck Rubi, LaBRI
MFC et structures de données • Des classes génériques pour les structures de données: • Tableaux dynamiques: CArray méthodes: GetSize, SetSize, Add, operator[], ... • Listes: CList et variantes méthodes: AddHead, AddTail, IsEmpty GetHeadPosition, GetNext, RemoveHead, ... • Table de Hashage: Cmap méthodes: SetAt( ARG_KEYkey,ARG_VALUEnewValue ) InitHashTable( UINT hashSize ), ... Franck Rubi, LaBRI
Sérialisation • Permet 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 } } Franck Rubi, LaBRI
Exercice un mini « paint »