Programmation Windows : environnement
Transcription
Programmation Windows : environnement
Traitement de données Programmation Windows : L’environnement Définition d’un projet Tout d’abord, lancer Microsoft Visual C++ 6 puis lancer un nouveau projet : File > New L’onglet Projects est automatiquement sélectionné : On dispose de plusieurs Onglets : Files : pour créer de simples fichiers, ou ajouter des fichiers à un projet en cours, Projects : pour créer un nouveau projet, On notera entre autres : MFC AppWizard (dll) : : pour créer rapidement, à l’aide des classes MFC, des fichiers DLL (DynamicLink Library) regroupant du code (des objets) à partager entre diverses applications, et appelé dynamiquement par ces applications lors de leur exécution, MFC AppWizard (exe) : pour créer des applications rapidement à l’aide des classes MFC Win32 Application : pour créer une application Windows, Win32 Console Application : pour créer une application lancée à partir d’une console, Win32 Application pour créer des applications sans utiliser l’assistant AppWizard. Win32 Dynamic-Link Library : pour créer des fichiers DLL regroupant du code à partager entre diverses applications, et appelée dynamiquement par ces applications lors de leur exécution, Win32 Static Library : pour créer des bibliothèques d’objets pouvant être appelées lors de la compilation d’un projet. Workspaces : pour créer un espace de travail vierge, ou en récupérer un personnalisé, Other Documents : pour créer un document avec une application installée sur la machine (Word, Excel, …). On utilisera, de préférence, les classes MFC qui facilitent grandement le développement d’applications. En effet, au lieu d’avoir à connaître sur le bout des doigts les API (Application Programing Interface) 32 bits de Windows, le programmeur peut utiliser une pléthore de classes décrivant des objets prêts à l’emploi ! Cela simplifie le travail, car ces classes MFC sont immédiatement réutilisables, et divisent le temps de développement. #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 1/15 Créer un projet vierge C'est la plus simple des opérations, elle consiste tout simplement à vous créer un projet vierge dans lequel vous ajouterez votre code. Pour ce faire, sélectionnez l'option New dans le menu File. Ensuite, sélectionnez l'item Win32 application et entrez un nom pour votre projet (je vous suggère Projet1, afin que vous ne soyez pas obligé de modifier le code source présenté un peu plus bas). Votre fenêtre doit maintenant ressembler à la Figure : Cliquez ensuite sur OK. Voilà vous venez de créer un espace de travail vierge pour votre premier programme en Visual C++. Il reste une dernière chose à faire avant de passer au point suivant. On doit spécifier à notre projet que nous désirons utiliser les Microsoft Foundation Classes (MFC). Donc, pour dire à votre projet d'utiliser les MFC, sélectionnez l'option Settings... dans le menu Project. Par défaut les 'Microsoft Foundation Classes' sont à 'Not Using MFC', sélectionnez alors dans le combo 'Use MFC in a Shared DLL', ce qui signifie que les MFC ne seront pas incluses dans votre exécutable mais seront appelés à partir d'un DLL. Votre fenêtre doit maintenant ressembler à la Figure : Cliquez sur OK. Votre programme pourra maintenant être en mesure d'utiliser les MFC. Visual C++ propose également un assistant (MFC AppWizard) pour la création d'un projet qui permet de créer une application de base (fenêtre principale, menu, toolbar, etc.) sans que vous ayez à coder quoi que ce soit, mais dans notre cas il ne serait pas utile d'utiliser cet assistant puisque notre but est d'apprendre comment programmer avec Visual C++. Il est préférable pour nous d'écrire nous même le code afin de bien le comprendre. Une fois plus à l'aise avec la programmation orientée-objet en C++, rien ne vous empêche d'utiliser AppWizard, ce qui vous fera probablement gagner du temps. Pour l'instant je préfère ne pas l'utiliser afin de bien comprendre l'ensemble du code. Les fichiers à créer. Notre but est de créer une fenêtre Windows 'vide', pour ce faire, le minimum nécessaire pour réaliser cela est de créer 3 fichiers d'en-tête et 3 fichiers de code source. Ces fichiers sont les suivants: #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 2/15 StdAfx.h StdAfx.cpp Projet1.h Projet1.cpp MainFrame.h MainFrame.cpp En C++, les fichiers d'en-tête (.h) servent à contenir les déclarations de classes, quant aux fichiers .cpp ils contiennent le code proprement dit des classes. Création des fichiers StdAfx.h et StdAfx.cpp Les deux premiers fichiers, soit StdAfx.h et StdAfx.cpp, ne contiennent pas vraiment de code. Ils se contentent d'inclure les déclarations de fonctions globales utilisées et ce afin d’accélérer la compilation (on aurait pu déclarer ces inclusions directement dans le fichier source principal). Pour créer ces fichiers ou tout autre avec Visual C++, il suffit, à partir du menu File de sélectionner l'option New et ensuite C/C++ Header File avec le nom du fichier (dans notre cas StdAfx). Cela créera un fichier d'entête vierge. Vous procéderez de la même façon pour le fichier .cpp mais en sélectionnant l'option C++ Source File cette fois. Ces fichiers seront automatiquement ajoutés à votre projet Visual C++. StdAfx.h // Ce sont des commandes du préprocesseur, pour la // compilation conditionnelle qui permettent de ne pas // inclure plus d'une fois ce fichier dans l'exécutable. // (if not define). #ifndef __STDAFX_H__ #define __STDAFX_H__ // Inclusions de librairies de fonctions globales MFC #include <afxwin.h> #include <afxext.h> // Fin du bloc pour la compilation conditionnelle. #endif StdAfx.cpp // Inclusions du fichier .h #include "StdAfx.h" On inclut tout simplement les fichiers header AfxWin.h et AfxExt.h qui contiennent les déclarations de plusieurs fonctions globales des MFC. Par fonctions globales, vous pouvez comprendre que ce ne sont pas des fonctions membres appartenant à un objet, ce sont des fonctions pouvant être appelés à n'importe quel endroit de votre code. Par exemple, une fonction des Afx se nomme AfxMessageBox. Cette fonction peut-être appelée pour afficher une boîte de dialogue et n'attend aucun « handle » de fenêtre en paramètre. La fonction API MessageBox quant à elle a absolument besoin qu'ont lui transmettre un handle de fenêtre (hwnd). Quant à vous parler des fonctions APIs, je tiens à souligner une différence par rapport à la fonction MessageBox des APIs et la fonction membre MessageBox appelée par les MFC. Comme je l'ai dit plus haut, la fonction MessageBox des APIs doit absolument recevoir un handle de fenêtre en paramètre, mais pas la fonction membre des MFC. Pourquoi ? Parce que la fonction membre des MFC provient de la classe CWND et dans cette classe il existe une variable membre public appelée m_hwnd qui est initialisée à la construction de l'objet. C'est pourquoi vous n'avez pas à lui transmettre le handle de fenêtre puisque la fonction membre utilise implicitement cette variable. Si vous le désirez vous pouvez toujours appeler MessageBox des APIs en lui passant m_hwnd. Pour appeler la fonction API vous devez par contre utiliser le symbole :: juste devant le nom de la fonction; comme ceci : Appel de la fonction MessageBox API #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 3/15 ::MessageBox(m_hwnd, "Votre texte", "Le titre ", MB_OK) Alors que pour appeler la fonction membre MessageBox des MFC vous faite comme ceci: Appel de la fonction MessageBox MFC MessageBox("Votre texte", "Le titre ", MB_OK) Bien sûr, cela ne s'applique pas qu'à cette fonction, ce n'est qu'un exemple parmi tant d'autres. Création des fichiers Projet1.h et Projet1.cpp Maintenant, nous allons créer les deux fichiers Projet1. Habituellement en C++, un fichier créé correspond à une classe (son fichier d'en-tête et le code source de la classe), nous allons donc suivre cette habitude en créant un nouveau fichier à chaque nouvelle classe que nous désirons créer. Rien ne vous empêche par contre de programmer plus d'une classe par fichier, mais il est beaucoup plus facile de se repérer lorsque chaque fichier correspond à une classe. La classe que nous allons créer est dérivée de la classe MFC CWinApp. CWinApp est une classe de base de laquelle on dérive toute application Windows qui utilise les MFC. Voici donc la déclaration de notre classe Projet1App: Projet1.h #ifndef __PROJET1_H__ #define __PROJET1_H__ // Déclaration de la classe CProjet1App // La classe CProjet1App dérivé de la classe CWinApp // des MFC class CProjet1App : public CWinApp { // Constructeur/Destructeur public: CProjet1App(); Virtual ~CProjet1App(); // Méthodes publics // InitInstance est une fonction membre surchargé. public: virtual BOOL InitInstance(); // Déclaration de la tables des messages protected: DECLARE_MESSAGE_MAP() }; #endif Projet1.cpp // Inclusions #include "StdAfx.h" #include "Projet1.h" #include "MainFrm.h" // MFC Debugging Support #ifdef _DEBUG #undef THIS_FILE static char BASED_CODE THIS_FILE[] = __FILE__; #endif // Variables globales //--------------------------------------------------------CProjet1App theApp; // Liste des messages #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 4/15 //--------------------------------------------------------BEGIN_MESSAGE_MAP(CProjet1App, CWinApp) END_MESSAGE_MAP() // Constructeur/Destructeur de CProjet1App //--------------------------------------------------------CProjet1App::CProjet1App() { } CProjet1App::~CProjet1App() { } // Méthode public //--------------------------------------------------------BOOL CProjet1App::InitInstance() { // Création de la fenêtre principale. // Création d'un objet CmainFrame et conservation adresse // dans la donnée membre m_pMainWnd. m_pMainWnd = new CmainFrame; // Vérification que le pointeur n'est pas égal à NULL ASSERT(m_pMainWnd); if (((CmainFrame*)m_pMainWnd)->Create(m_pszAppName)) { m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } return FALSE; } Votre projet "projet1" est prêt. Vous y trouvez des classes et des fichiers. On peut compiler et exécuter pour voir la fenêtre. Créer un projet avec un assistant. On peut aussi pour une application, utiliser l’assistant, par exemple, pour une application utilisant les MFC: Définition de l’interface d’application Le premier écran MFC Appwizard apparaît et propose 3 types d’applications : Dans les 3 types d’applications, on retrouvera toujours deux classes : celle de l’application qui s’occupe de lancer l’application, et celle de la gestion des messages (boutons, menus…). Les choix possibles sont les suivants : Single document : application mono-document où deux classes gérent le document de travail : une classe de document et une classe d’affichage du document. #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 5/15 Multiple document : application multi-documents où aux classes précédentes s’ajoute une classe de trame fille pour chaque couple {classe de document + classe d’affichage} de chaque document ouvert (la classe d’affichage peut être la même pour chaque document ouvert), Dialog based : application de type boite de dialogue, où la classe d’affichage gère l’ensemble des éléments affichés. Une fois choisie, ces configurations sont ensuite pleinement personnalisables. L’option Langage détermine la langue utilisée par les classes MFC pour les interfaces utilisateurs du projet. Selon le type d’application choisi, ce panneau sera suivi : soit de 3 autres écrans : pour Dialog based, soit de 5 autres écrans : pour Single document (SDI), ou Multiple Document (MDI). Le cas des projets Dialog based. Sélectionner Dialog based, puis cliquer Next. Ce panneau comporte les uniques options pour un projet de type Dialog based. Tout d’abord, nous avons les options d’interface : 1. About box : crée une classe pour la boite de dialogue A propos 2. Context-sensitive Help : support de l’aide contextuelle, AppWizard génère un ensemble de fichiers d’aide, ce support nécessite le compilateur d’aide. 3. 3D controls : interface visuelle de style 3D. Puis viennent les options relatives aux objets COM : Automation : support permettant à des applications de manipuler des objets d’autres applications, et créer des outils adaptés, ActiveX : pour intégrer des contrôles Actives X, c’est à dire des composants logiciels (anciennement OLE2) dans une application ; ces composants sont fournis avec Visual C++ ou avec d’autres applications, et il faut les enregistrer auprès de Windows et de Visual C++ avant de les utiliser. Enfin nous avons le support des sockets : Windows Sockets : support des classes MFC destinées à la création et à l’utilisation des sockets. Pour finir, un titre peut être donné à la fenêtre de dialogue à créer. Les deux dernières étapes d’un projet Dialod Based sont identiques à celles des applications SDI et MDI. Nous les verrons plus tard. Penchons nous sur les projets SDI et MDI. Donc cliquer sur Back pour revenir au panneau de sélection du type de projet, puis choisir Multiple document et cliquer Next. Définition pour SDI/MDI du support de base de données. Ce panneau défini les options de support de bases de données pour le projet, c’est à dire la possibilité d’intégrer des classes propres à la prise en charge et la manipulation de bases de données. Les options sont les suivantes : None : L’application crée par AppWizard ne comportera pas le fichier d’en-tête afxdb.h, pour le support de bases de données. L’option par défaut ne prend pas directement en charge le support de bases de données. Header files only : L’application fournit un support élémentaire des bases de données. #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 6/15 Database view without file support : La classe de vue de l’application crée par AppWizard est dérivée de CRecordView. Cette classe est associée à CRecorSet pour gérer les enregistrements. Cette option ne prévoit pas la sérialisation et le menu Fichier, puisqu’elle prévoit une opération enregistrement par enregistrement, interagissant avec une base de données. Ce choix nécessite d’ouvrir la boite SQL Data Source, permettant de spécifier le type de base de donnée et/ou le fichier ou la table à utiliser. Database view with file support : Comme précédemment, le support de sérialisation et le menu Fichier en plus ! Laisser le choix par défaut none, puis cliquer sur Next. Définition pour SDI/MDI du support OLE Le support OLE permet d’intégrer ou de créer des éléments partagés s’appuyant sur COM. Cela permet souvent à des applications d’ouvrir des document d’autres applications de type OLE (exemple : Excel dans Word, …). Plus généralement, cela permet le partage d’informations et de services entre processus. Les options OLE sont les suivantes : None : Aucun support OLE, Container : Pour permettre à l’application de contenir des objets OLE, Mini-server : Pour permettre à l’application de créer et gérer des objets de documents OLE. Les serveurs ne peuvent par défaut pas s’exécuter de manière autonome, et ne supportent que des éléments incorporés, Full-server : Contrairement au mini-server, le serveur complet peut s’exécuter de manière autonome, et supporte à la fois les éléments liés et incorporés, Both container and server : L’application est à la fois container et full-server. Les supports : Automation : support permettant à des applications de manipuler des objets d’autres applications, et créer des outils adaptés, ActiveX : pour intégrer des contrôles ActivesX, c’est à dire des composants logiciels (anciennement OLE2) dans une application. Laisser la fenêtre en l’état, et cliquer sur Next. Définition pour SDI/MDI des options d’interface Ce panneau permet d’intégrer des fonctionnalités d’interface dans l’application (ce qui peut aussi être fait aisément plus tard). Pour cela, choisir les éléments souhaités parmi les suivants : Docking Toolbar : barre d’outil ancrable, contenant par défaut les boutons permettant de créer, ouvrir et enregistrer des documents, de copier/coller, d’imprimer, d’afficher la boite de dialogue A propos, et d’invoquer l’aide en ligne. Initial status bar : barre d’état en bas de la fenêtre, comportant du texte et des indicateurs pour certaines touches du clavier (verrou majuscules et pavé numérique, insertion…). #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 7/15 Printing and print preview : ajoute au menu Fichier les opérations relatives à l’impression (Imprimer, Configuration de l’impression et Aperçu avant impression), Context-sensitive Help : support de l’aide contextuelle, AppWizard génère un ensemble de fichiers d’aide , et ce support nécessite le compilateur d’aide. 3D controls : interface visuelle de style 3D. On notera que la barre de menu comportant par défaut les menus Fichiers, Edition, Affichage, Fenêtre et Aide est intégré d’office à la fenêtre de trame générale. Autres options : MAPI (Messaging API) : support des API de messages inter applications. Windows Sockets : support des classes MFC destinées à l’utilisation des sockets. Options de fichiers : en cliquant sur Advanced, deux panneaux permettent de configurer finement le cas échéant les options concernant les fichiers générés par l’application et l’interface utilisateur dédiée. Ne rien modifier, et cliquer sur Next. Définition des commentaires dans les fichiers En cliquant Yes, cela inclus dans tous les fichiers générés par AppWizard de précieux commentaires détaillant le rôle de chaque ligne des fichiers .cpp et .h, ainsi que les emplacements ou le programmeur doit placer son code. Cela charge un peu les fichiers sources, mais n’influe en rien sur le code objet généré ! Cliquer sur Next. Définition des classes du projet Ce panneau permet : de changer les noms des classes, de changer les noms des fichiers d’implémentation .cpp et d’en-tête .h associés à chaque classe, de changer la classe de base de la classe d’affichage générée pour le projet par AppWizard. Avant de cliquer sur Finish, il est possible, comme lors de chaque étape, de cliquer sur Back pour modifier des choix, en revenant ainsi jusqu’au panneau de projet Projects. Cliquer sur Finish pour valider les choix effectués dans les panneaux précédents. #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 8/15 Liste des spécifications du projet Ce panneau détaille l’ensemble des choix effectués au travers des différentes étapes, ainsi que les opérations que va effectuer AppWizard. En cliquant sur Cancel, il est encore possible de revenir sur l’étape 4/4 ou 6/6. Cliquer sur OK afin de créer le squelette d’un éventuel projet. Prise en main de l’interface générale L’interface générale se présente sous cette forme : L’interface de développement de Visual C++, en dehors de ses menus et barres d’outils, possède trois zones Workspace : zone d’affichage des classes, fichiers et ressources, Affichage : zone d’affichage des fichiers ouverts : sources, aide, etc …, Output : fenêtre d’affichage des résultats de compilation, de débugage et de recherches. Concernant les menus, leur titre est explicite : File : création, ouverture, sauv. et fermeture des fichiers, projets et espaces de travail Edit : copier/coller, recherches et déplacements View : le fameux Class Wizard (ctrl + W) et autres informations sur le travail en cours Insert : ajout de classes et ressources au projet Project : modifications, paramètres et ajout de fichiers et contrôles au projet Build : compilation, débogage et finalisation du projet Tools : outils divers de Visual C++, et paramètres généraux du logiciel et de l’interface #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 9/15 Windows : choix d’une fenêtre dans la zone d’affichage Help : aide (combien précieuse) et ses outils De nombreuses fonctions des menus se retrouvent dans des barres d’outils dont certaines sont affichées, les autres étant accessibles avec Tools -> Customize. Le Workspace Cette fenêtre représente le pilier de l’interface de développement de Visual C++. Une fois choisie les options avec AppWizard, on peut, grâce à lui, observer notre projet et vérifier notre environnement, on y trouve (par exemple) : ClassView : Fenêtre d’affichage des classes. Par menus contextuels, il est possible d’ajouter plusieurs classes au projet, et des fonctions, variables et autres éléments aux classes. Il est à noter que cette vue par classe est distincte des fichiers. En effet, plusieurs classes peuvent résider dans un même fichier. Les classes ouvertes apparaissent dans la zone d’affichage dans leur fichier d’appartenance : celui d’en-tête en double cliquant sur une classe, et celui d’implémentation en double cliquant sur une fonctions ou une variable. Par exemple : CTestApp : Le point d'entrée de votre appli. Hérite de CWinApp. CAboutDlg : Petite boîte de dialogue affichant le "à propos" de l'appli. Hérite de CDialog. CMainFrame La fenêtre principale de votre appli. Hérite de CFrameWnd. CTestDoc : Le document (unique) de votre appli. Hérite de CDocument. CTestView : La vue principale de votre appli. Hérite de CView. RessourceView : Fenêtre d’affichage des ressources. Elle permet de lister et modifier, compléter, ajouter, supprimer les éléments suivants : raccourcis clavier, boites de dialogue, icônes, menus, constantes, barres d’outils, version, par menus contextuels. Les éléments ouverts apparaissent dans la zone d’affichage. Par exemple : Accelerator : Contient les raccourcis clavier pour l'appli. Dialog : Contient les fenêtres de l'appli. C'est le coin "design". Icon : Dessinez des icônes pour votre appli. Menu : Contient les menus de votre appli. String Table : Contient les chaînes de caractères pour les messages dans les fenêtres. Toolbar : Contient la toolbar (une image) de votre appli. Version : Contient des infos de version de votre appli (cf message de "à propos"). FileView : Fenêtre d’affichage de l’ensemble des fichiers participant au projet. En double cliquant sur un fichier, il s’ouvre dans la zone d’affichage. #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 10/15 Test et mise au point. Avant d’aller plus loin, effectuer ctrl + F5 pour exécuter l’application PremierProjet en mode Debug (par défaut). Comme l’application n’est à priori exempte d’erreurs, le mode Debug ne devrait pas se lancer et notre application tourner parfaitement : Essayer les différentes fonctions des menus et barres d’outils. Il est entre autres déjà possible d’ouvrir plusieurs documents. Mais la plupart des fonctions sont cependant inopérantes, car vides de code ! On peut noter que la fonction impression peut déjà provoquer une sortie imprimante (vide), et que ? -> A propos affiche bien la boîte de dialogue approprié. Tester simplement une application Le menu permet de compiler, construire / exécuter ou déboguer le projet : Tout d’abord, Set Active Configuration permet de choisir la configuration pour l’exécution (ctrl+F5) : version debogueur (valeur par défaut) ou version finale. Ensuite, en lançant Exécute PremierProjet.exe, cela construit complètement un exécutable dans le sous répertoire Debug ou Release du projet, puis l’exécute. Dans le cas de la version Debug, elle ne peut fonctionner que sur le poste de développement, et intègre les directives d’aide au débogage insérées dans le code source, d’où sa taille plus importante. La commande Batch Build permet de réaliser d’un seul coup la construction des deux versions. Déboguer une application Il existe plusieurs façons de rentrer dans le mode Debug. #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 11/15 Tout d’abord, un click droit (menu contextuel) sur une ligne de programme (fichier.cpp) permet d’ajouter un point d’arrêt (Breakpoint) qui sera pris en compte dans une exécution en mode Debug : Insert/Remouve Breakpoint. Ensuite, lancer Build -> Debug -> Go et l’exécution de l’application s’arrêtera pour rentrer en mode Debug lorsque la position du curseur sera rencontrée. D’autre part, il est possible d’exécuter l’application jusqu’à ce que le débogueur rencontre la position courante du curseur dans un fichier : se placer dans un fichier .cpp sur la ligne souhaitée, puis à l’aide du menu Debug, lancer Run to Cursor. Enfin, il est possible de rentrer directement dans le debogueur en mode pas à pas avec Step Into. Utiliser le débogueur Une fois dans le debogueur, le menu Build devient le menu Debug suivant : Ce menu permet ne nombreuses choses : Go : reprendre l’exécution Restart : redémarrer l’exécution Stop Debugging : quitter le mode Debug Step Into : pas à pas détaillé Step Over : pas à pas sans entrer dans les méthodes appelées Step Out : pas à pas avec sortie directe vers la méthode appelante Run to Cursor : exécution jusqu’à la nouvelle place du curseur Exceptions… et Threads… : visualisation des exceptions possible et des Threads. QuickWatch : visualisation de l’état de certaines variables. De plus, il est toujours possible d’ajouter ou retirer des points d’arrêt par menu contextuel. Tout ce qui a été vu précédemment peut être testé sans crainte sur notre application vide PremierProjet : Run to cursor, points d’arrêt et mode pas-à-pas, … Vous pouvez tester le programme - Exécuter (Ctrl+F5) : Afin de comprendre comment ça démarre, voilà la liste chronologique des méthodes appelées au démarrage de l'application : CTestApp::CTestApp() CTestApp::InitInstance() // crée les Doc, MainFrame, View CTestDoc::CTestDoc() CMainFrame::CMainFrame() CMainFrame::PreCreateWindow() CMainFrame::OnCreate() #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 12/15 CTestView::CTestView() CTestView::PreCreateWindow() CTestDoc::OnNewDocument() Et : CTestView::OnInitialUpdate() // Si vous la rajoutez Le Class Wizard Le Class Wizard, c'est l'outil Visual qui vous permet de gérer efficacement vos classes, méthodes, variables, messages, objets...On y accède rapidement par le raccourci Ctrl+W. 1/ Class Name: désigne la classe de votre projet que vous allez mettre à jour 2/ Object IDs: désigne les ressources de votre projet, avec les noms ID_MACHIN que vous leur avez donné. Exemple: ID_FILE_OPEN pour l'entrée du menu "File-->Open" 3/ Messages: désigne les actions en rapport avec la ressource sélectionnée. Exemple: COMMAND. 4/ Add Function: ajoute au fichier maClasse.cpp courant la fonction correspondant à l'action sélectionnée précédemment. Exemple: OnFileOpen(). 5/ Member functions: liste les méthodes ajoutées à la classe de cette manière. 6/ Member Variables: même principe, pour ajouter/enlever des variables de classe associées à vos ressources. Sachez, pour finir, que pour ajouter vos propres méthodes ou attributs de classe, vous pouvez le faire à la main et contrôler la disposition de votre fichier, soit le faire en "cliquant-droit" sur votre classe dans l'arborescence sur la gauche. Conventions de codage Classes : Le nom d'une classe doit commencer par un 'C', puis une majuscule à chaque mot du nom. Exemple : class CMaClasse Fichiers : Le nom d'un fichier doit commencer par une majuscule, puis une majuscule à chaque mot du nom. Le nom du fichier est celui de la classe qu'il contient, au 'C' près. On choisira les extensions '.h' et '.cpp' exemple : MaClasse.h ; MaClasse.cpp Structures : Le nom d'une structure doit commencer par un 'S', puis une majuscule à chaque mot du nom. Exemple : struct SMaStructure Enumération : Le nom d'une énumération doit commencer par un 'E', puis une majuscule à chaque mot du nom. Exemple : enum EMonEnumeration Types : Le nom d'un type structuré ou énuméré doit être celui de la structure qu'il définit, au 'S' ou 'E' près. Exemple : typedef struct SMaStructure MaStructure ; Constantes : Le nom d'une constante doit être fait de majuscules, les mots du nom étant séparés par des '_'. Exemple : const int TAILLE_TABLO = 256 ; #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 13/15 Il existe 3 types de constantes en C++ : Les constantes globales et visibles n'importe où, déclarées dans un .h et définies dans le .cpp correspondant : extern int TAILLE_TABLO ; // dans le .h extern int TAILLE_TABLO = 256 ; // dans le .cpp Les constantes de classe, déclarées statiques comme attributs de classe : static const int TAILLE_TABLO = 256 ; Les constantes globales visibles dans le .cpp où elles sont définies : static static const int TAILLE_TABLO = 256 ; // dans le .cpp Variables : Le nom d'une variable doit commencer par une majuscule, puis une majuscule à chaque mot du nom. On ajoute des préfixes aux variables : le premier indique la portée de la variable, le second, le type de la variable. Exemple : public : int m_nTailleTablo ; Portée m_ l_ p_ g_ Membre de classe Variable locale Paramètre Variable globale Type p g n l sz f d c b pointeur Objet graphique int long String, char* float double char bool Ressources : Le nom d'une ressource doit être fait de majuscules, les mots du nom étant séparés par des '_'. On rajoute un préfixe au nom, suivant le type de la ressource. Exemple : IDB_FOND_D_ECRAN Type IDB_ IDS_ IDD_ IDI_ IDC_ IDR_ ID_ Bitmap String Dialog Icon Control Autre ressource Commande Commentaires : Il existe deux types de commentaires : // Commentaire utile a la compréhension du programme, ex : // Tant que le buffer n'est pas vide while (!buffer.IsEmpty()) Documentation /* * Code mort, code en attente, code beta, ... */ Il faut bien distinguer les commentaires de la documentation. Cette dernière est faite de commentaires spéciaux lisibles par des programmes comme javadoc ou doxygen. Ces commentaires sont encore de deux types : //! Description d'un attribut ou d'un champ de structure, d'énumération /*! * Description de fichier, de classe, de méthode * @author * @version 01/15/2002 * @param p_MonParam description d'un paramètre #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 14/15 * @return Description de la valeur renvoyée */ Inclusions : Ici aussi on cherchera à être propre, à ne pas en mettre partout, donc règle : les inclusions de modules perso se font dans le header, l'inclusion trouvée dans le .cpp est celle du .h correspondant. Raccourcis clavier Raccourci Commande F1 Ouvrir l'aide MSDN pour le mot en surbrillance. Ctrl+F2 Enregistrer la position courante. F2 Aller à la prochaine position enregistrée. Ctrl+F3 Chercher l'expression en surbrillance. F3 Aller au suivant. F4 Aller à la prochaine erreur de compilation. Ctrl+F5 Exécuter le programme. F5 Débugger le programme / avancer jusqu'au prochain point d'arrêt. Shift+F5 Arrêter le débuggage. F7 Construire le projet. Ctrl+F7 Compile le fichier courant. Ctrl+F8 Activer la surbrillance. F9 Ajouter/Enlever un point d'arrêt. F10 Avancer d'un pas dans le débuggage. Ctrl+F10 Aller jusqu'au curseur dans le débuggage. F11 Entrer dans la fonction, dans le débuggage. Shift+F11 Sortir de la fonction, dans le débuggage. F12 Browse project. Ctrl+G Goto Line. Ctrl+W Launch wizard. Ctrl+Space Complete word. Ctrl+L Delete previous line. Ctrl+J Atteindre le précédent #if. Ctrl+K Atteindre le #endif suivant. Ctrl+H Replace. Ctrl+F Find. Ctrl+X/C/V Cut/Copy/Paste. Ctrl+Z/Y Undo/Redo. #Niedercorn LT « la Briquerie » 57100 THIONVILLE Programmation Windows : environnement & page 15/15