Trucs et Astuces pour Visual C++ 6
version du 26/10/2002
brunomailly@yahoo.fr
J'ai regroupé ici toutes ces petites choses si pratiques à savoir, mais pas forcément évidentes à trouver.
Excusez l'écriture parfois simpliste, j'ai essayé d'être concis pour garder le document court.
Contactez-moi pour toute erreur, remarque ou ajout.

Quelques raccourcis
souris
On peut glisser/déposer le texte sélectionné.
-Ctrl (maintenu)   =copier au lieu de déplacer.
-Alt (maintenu)    =sélectionner un rectangle de texte (reste un rectangle quand collé).
-Clic dans la marge=sélectionner des lignes.
-Double-clic       =sélection d'un mot.

déplacement
-Home/End          =aller en début/fin de texte de ligne (répéter Home pour aller en début de ligne, +Ctrl=début/fin de fichier).
-Ctrl+Gauche/Droite=aller de mot en mot.
-Ctrl+E            =aller à l'accolade/parenthèse/crochet apparié.
-Ctrl+J/K          =aller au #if #ifdef #ifndef #else #endif précédent/suivant.
-Ctrl+Shift+F8     =sélectionner un rectangle de texte au curseur.
+Shift             =sélectionner en déplaçant le curseur avec n’importe laquelle des commandes précédentes.

navigation
-Ctrl+F3           =occurrence suivante du mot courant (+Shift=précédent).
-Ctrl+F2           =mettre/enlever un marque-page (+Shift=tout enlever).
-F2                =aller au marque-page suivant (+Shift=précédent).
-F4 ou double-clic =lignes mentionnées dans la fenêtre output (erreurs ou "Find in Files") (+Shift=précédent).

édition
-Ctrl+L            =couper ligne(s).
-Ctrl+Shift+T      =permuter deux mots.
-Alt+Shift+T       =permuter deux lignes.
-Ins               =permuter les modes insertion/refrappe de texte.
-Alt+F8            =indenter correctement la sélection.
-Tab               =augmenter l'indentation des lignes sélectionnées (+Shift=diminuer).
-Ctrl+U            =mettre en minuscules (+Shift=majuscules).
-Ctrl+Backspace    =effacer le mot devant.
-Ctrl+Del          =effacer le mot derrière.

renseignements
-F1                =aide sur le mot ou le n° d'erreur de compilation sous le curseur.
-F12               =trouver la définition du nom.
-Ctrl+* (pavé num) =revenir à la position d'origine.
-Alt+F12           =renseignements généraux sur le mot.
-Ctrl+Shift+Espace =afficher le prototype de la fonction (définie) en cours (Ctrl+PgUp/PgDown si plusieurs).
-Ctrl+T            =information sur le type (normalement automatique).
-Ctrl+Espace       =complétion automatique.
-Alt+Ctrl+T        =lister membres (normalement automatique), ou tout si au niveau global.

compilation
-Alt+F10           =appliquer changement de code sans sortir du débogueur.
-Ctrl+F7           =compiler le source actuel seulement (fichier *.OBJ). C’est plus rapide.

autres
-Esc               =masquer la fenêtre output (elle revient toute seule si elle change).
-Ctrl+I            =commencer une recherche incrémentielle (taper les premières lettres).

Complétion automatique
C'est la liste qui surgit quand on tape . , :: , -> ou Ctrl+Espace.
Elle complète ce que l'on a commencé à taper, ou propose la liste des éléments pouvant correspondre.
Taper la suite, ou sélectionner un élément avec haut/bas, puis taper un séparateur quelconque (espace, parenthèse ...) ou tabulation, et le nom est retapé en entier (avec correction majuscule/minuscule).
Pour en bénéficier avec les constructeurs, utiliser la syntaxe Classe::Classe( .
A noter qu'elle ne marche pas avec les patrons.

Le message d'aide visible dans cette liste, c'est les lignes de commentaires placées immédiatement à coté (//) ou au-dessus (plusieurs lignes, // ou /*...*/) de la déclaration ou de la définition.
Cela ne marche qu'avec les éléments globaux (variables, structures/classes, patrons, fonctions).
Exemple:
/*Contient les coordonnées d'un point
Les mesures sont des entiers*/
struct Point
{	int x ;//abscisse
	int y ;//ordonnée
};

Aide intégrée
Si vous l'avez appelé par F1, cliquez sur le bouton sommaire (ou localiser) de la barre d'outils (pas l'onglet) pour voir dans quelle rubrique vous êtes.
Si la partie "Compatibility" ne mentionne pas "ANSI", ce n'est pas une fonction standard. C'est le cas de tout ce qui commence par "_".
La documentation MSDN est normalement livrée avec Visual C++. Elle est aussi disponible en ligne: http://msdn.microsoft.com/ .
En voici des rubriques "index" intéressantes:
Operator Precedence and Associativity	priorité des opérateurs C++
Precedence and Order of Evaluation	priorité des opérateurs C
C++ operators
C++ Keywords
Reference Tables	Portée des types, codes ASCII et scan codes.
Organization of the C++ Language Reference
C Language Reference
C++ Library Overview
DLLs for Beginners	(rechercher)
Standard Types	Les types standard non-intégrés

Divers
Pensez à utiliser les mises à jour (Service Packs), elle corrigent bien des problèmes : http://support.microsoft.com/default.aspx?scid=/support/servicepacks/VS/6.0/Default.asp&SD=MSDN .

La coloration syntaxique de base peut être enrichie : Menu "Tool/Option", onglet "Format", cadre "Colors", sélectionner "Number", "String" puis "Operator" et leur choisir une couleur "Foreground". Je propose respectivement bordeaux, gris foncé et rouge vif.
"Category: Source Windows" permet de choisir la police du code. Celles en gras sont recommandées (espacement fixe). "Lucida Console" dispose de petites tailles.

Les menus contextuels sont présents un peu partout, même dans le code. Ils s’appellent avec le clic doit.
-Sur une directive #include, propose d’ouvrir le fichier.
-Sur un nom, propose d’aller à sa déclaration/définition.

Quelques macros bien pratiques
Menu "Tools/Macro", choisir "Macro File: SAMPLE".
-"ToggleCommentStyle" change une suite de commentaires // en /*...*/ et inversement.
-"AutoCompleteFromFile" complète un nom s'il se trouve déjà dans le fichier édité.
-Pour créer votre macro, taper un nom, choisir "Edit" et insérer des commandes texte
Exemple:
'DESCRIPTION: Écrit un en-tête pour les sources sous Visual C++.
	ActiveDocument.Selection.StartOfDocument
	ActiveDocument.Selection = "//Fait par: Votre nom"
	ActiveDocument.Selection.NewLine
	ActiveDocument.Selection = "//le      :"
	ActiveDocument.Selection =Date
	ActiveDocument.Selection = ", "
	ActiveDocument.Selection =Time
	ActiveDocument.Selection.NewLine
	ActiveDocument.Selection = "//à       : Votre lieu de travail"
	ActiveDocument.Selection.NewLine

Pour composer sa barre d'outils
On peut déplacer un outil en maintenant Alt enfoncée (Ctrl pour copier).
Déplacer hors de toute barre pour supprimer.
La barre de menu est une barre d'outils, on peut l'éditer.
Ouvrir menu "Tools/Customize" ou menu contextuel sur une barre puis "Customize" permet :
-De déplacer un outil ou article de menu existant directement (Ctrl pour copier).
-D’utiliser une macro en bouton/menu:
-activer le fichier macro dans l'onglet "Add-ins and Macro Files"
-dans l'onglet "Commands" choisir "Category: Macro", faire glisser une commande dans la barre d'outils.

Pré processeur
Pour pré compiler seulement, aller dans le menu "Project/Settings" puis onglet "C/C++", zone "Project Options" et rajouter au texte "/P" ou "/E" ou "/PE". Cela permet de vérifier si l'expansion des macros est correcte.
P: génère un fichier *.i dans le répertoire du projet (c'est du texte).
E: affiche dans la fenêtre output (attention au gros includes, genre windows.h).

Compilateur
Dans les options menu "Project/Settings", onglet "C/C++", catégorie "Customize", les cases à cocher :
-"Disable language extensions" permet de désactiver les spécificités Microsoft pour être sûr de faire du code conforme au standard ANSI.
-"Enable incremental compilation" permet de recompiler plus vite, mais génère de plus gros fichiers.
Le menu "Build/Rebuild All" permet de reconstruire tous les fichiers temporaires. Indispensable en cas de problèmes de temps système, de date de modification de fichiers, ou d’incohérence de compilation.
Ne pas oublier pas que les modes "Debug" et "Release" ont des options indépendantes.

Éditeur de liens
Pour changer le type d'un projet, aller dans le menu "Project/Settings", onglet "Link", zone "Project Options" et changer "/subsytem:" entre "console" et "windows".

Déboguage
Les options menu "Project/Settings", onglet "Debug", zones "Program arguments:" et "Working Directory:" permettent de spécifier le répertoire de travail et les arguments de l’exécutable.

Instructions de déboguage (ces instructions ne font rien en mode Release)
avec MFC (#include <afxwin.h>):
TRACE();     //comme printf, mais s'affiche dans la fenêtre output en debug (go, F5)
ASSERT();    //suspend l'exécution si l'expression est fausse (0)
VERIFY();    //comme ASSERT, mais l'expression sera calculée en mode release également.
DEBUG_ONLY();//auto informant, non ?

autres:
assert ();   //ANSI (#include <assert.h>)
_ASSERT();   //#include <crtdbg.h>

Points d'arrêt
F9 pose/enlève un point d'arrêt. Lancée avec "Go", l'exécution s'y arrêtera. Ils peuvent être placés dans le code source, le code assembleur et la pile d’appel.
Ctrl+Shift+9 Enlèves tous les points d'arrêt.
Le menu "Edit/Breakpoints" permet de:
-créer/éditer/déplacer/modifier les points d'arrêts.
-poser une condition à un arrêt existant.
-poser un arrêt conditionnel sur tout le source (pour une variable locale, préciser la fonction).
-poser un arrêt sur un message Windows.

Mode déboguage
On peut avancer jusqu'à n'importe quel point en y plaçant le curseur et en choisissant menu "Debug/Run to Cursor" (Ctrl+F10).
Placer le pointeur de souris sur une variable indique immédiatement sa valeur.
La fenêtre "Variables" (menu "View/Debug Windows") permet de voir et changer les valeurs des variables en cours.
La fenêtre "Call Stack" (menu "View/Debug Windows") permet, après un échec d'assertion, de remonter à la fonction appelante.
La fenêtre "Watch" (menu "View/Debug Windows") permet :
-D’y glisser une expression depuis le code.
-De connaître le type d’une variable. L’y sélectionner et appeler le menu contextuel et "Properties" (Alt+Entrée).
-De changer la valeur d’une variable facilement. Mettre comme nom var=valeur. La valeur sera affectée à var à chaque activation de l’onglet.
-De choisir le format d'affichage des valeurs. Il faut ajouter au nom "," et :
	f   float
	c   caractère
	s   chaîne
	us  chaîne unicode
	wm  message windows
	l,h préfixe long/short pour les suivants :
	d,i décimal signé
	u   décimal non signé
	o   octal non signé
	x,X hexa
	Il y en a d'autres à la rubrique "Symbols for Watch Variables" dans la MSDN.

Quelques constantes symboliques prédéfinies
ANSI
__STDC__      C standard
NDEBUG        Not Debug

ANSI (chaînes entre "")
__FILE__      Nom du fichier compilé
__TIMESTAMP__ Moment de la dernière modification du fichier
__LINE__      N° de ligne courante du fichier
__DATE__      Date courante
__TIME__      Heure courante

spécifique Microsoft
_MSC_VER      Version du compilateur Microsoft
__cplusplus   Source C++
_DLL          Contexte Multithread (avec DLL)
_MT           Contexte Multithread
_WIN32        Contexte Windows 32 bits
_CPPRTTI      Informations de type à l’exécution activées
_CPPUNWIND    Gestion des exceptions activé
_UNICODE      Définir pour unicode (wide-character)
_MBCS         Définir pour caractères multibyte
_DEBUG        Mode debug