begin process at 2012 05 27 21:11:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > UTILISATION AVANCÉE DU VC6 - TRUCS & ASTUCES NON/PEU DOCUMENTÉS

UTILISATION AVANCÉE DU VC6 - TRUCS & ASTUCES NON/PEU DOCUMENTÉS


 Information sur la source

Note :
Aucune note
Catégorie :Tutoriaux Niveau :Initié Date de création :07/07/2004 Date de mise à jour :19/07/2004 15:46:43 Vu :3 840

Auteur : magic_Nono

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Principalement pour les boite de dialogues
J'ai rassemblé ci après quelques trucs & astuces sur Visual C++ que je n'ai pas trouvé détaillé par ailleur...

ou alors, des choses certes documentées dans les MFC mais que je ne connaissai pas jusqu'a récement.
Qui font gagné un max de temps dans la création/la gestion d'interface graphiques

Magicalement.

Source

  • pour les boites de dialogues, (RessourceView)
  • Pour changer les numeros d'ID des controles
  • (si vous ne voyez pas l'intéret, lisez la suite...)
  • .
  • . vous savez afficher l'ID de tous les controles d'une boite de dialog:
  • . . Clic droit - Propriete
  • . Ces ID sont des constantes définies dans resource.h
  • . . #define ID 123
  • . . ou ID est votre identifiant et 123 sa valeur numérique
  • . Un moyen simple de changer sa valeur depuis l'interface graphique consiste à prendre la fenetre de propriété et après le nom de l'ID, inscrire "=321"
  • le controle aura donc toujours le meme nom mais ce dernier vaudra 321.
  • Rq : pensez à respecter les plages de valeurs specifiez
  • sinon, ça va vite etre le wyyyy !!!
  • Changer cette valeur est util pour utiliser une fonctionnalité de controle très pratique:
  • Dans mon cas concret, tous les boutons radio d'une boite de dialogue devaient appeler une fonction de mise a jour 'maj()'
  • auparavant , j'affectait une action a chacun des boutons appelant maj
  • maintenant, ça se fait en 3 lignes:
  • . au préalable, il faut que nos différents identifiants aient des nombres successifs. (voir ci dessus & faire les modifs nécessaires)
  • . ensuite, modifions la MESSAGE_MAP de notre boite de dialogue:
  • . .
  • . . BEGIN_MESSAGE_MAP(CChoixInfor, CDialog)
  • . . . //{{AFX_MSG_MAP(CChoixInfor)
  • . . . ... //code éventuel inséré par le wizard... -Nono
  • . . . //}}AFX_MSG_MAP
  • . . END_MESSAGE_MAP()
  • . Il faut insérer un code dans cette section mais a l'extérieur de la section du wizard:
  • . .
  • . .
  • . . BEGIN_MESSAGE_MAP(CChoixInfor, CDialog)
  • . . . //{{AFX_MSG_MAP(CChoixInfor)
  • . . . ... //code éventuel inséré par le wizard... -Nono
  • . . . //}}AFX_MSG_MAP
  • . . . ... // notre code
  • . . END_MESSAGE_MAP()
  • . .
  • . on va affecter un controle à l'ensemble des éléments désirés qui se suivent
  • . ON_CONTROL_RANGE(BN_CLICKED, 1er elt, dernier elt, nom fonction)
  • . exemple :
  • . ON_CONTROL_RANGE(BN_CLICKED, IDC_RINFO_BASIC, IDC_RINFO_DET3, maj)
  • .
  • . ensuite, il faut modifier la fonction : son proto à changé, elle a un nv param !
  • . maj() devient : maj(UINT id)
  • . on modifie donc le header et le srce...
  • . ou id a la valeur du controle !!! (celle qu'on a affectée!!!)
  • . on pourra éventuellement faire un switch sur les id avec des case sur vos ID
  • . (pas de valeurs numerique dans vos programmes !!!)
  • .
  • Le defaut est qu'en double cliquant sur le controle, il ne propose toujours de créer une action associée... et ne vas pas à celle que nous avons spécifier
  • Et que le ClassWizard ne voit pas ces associations.
  • (je ne C po si VC7 a résolu ce bug...)
  • a propos, pour éviter un warning a la compilation si vous ne vous servez pas d'une variable (ici l'id)
  • . dans la fonction, (au début par ex) inserez : "nomVar;"
  • . ici : id;
  • . un conseil très général enfin : toujours compiler vos prg en mode level 4
  • . Project-Settings-C/C++ - Warning Level ==> 4
  • . et éliminez toutes les erreurs & warning... (1 max en tt cas)
  • . (mes prg n'en garde aucunes !) donc C tjs faisable ...
  • . on détaillera plus tard ici diverses astuces à cet effet.
  • .
  • **********************************************
  • news 08/07/04 : un bug VC6 !!!
  • . si on inclu plsr prj ds le mm esp de travail
  • . et qu'on le supprime,
  • . (ça peut servir à copier des ctrl de boite de dialogue d'autres prj)
  • . les classes de celui supprimé reste tjs accessibles...
  • . pour la completion...
  • . le dsw doit garder un ersatz
  • **********************************************
  • news 17/07/04 : utilisation de controles à l'intérieurs d'une boite à onglet
  • lorsque l'on intègre des fenetres dans une boite à onglet au sein d'une boite de dialogue, les controles , zappages par tab & raccourcis ne sont pas accessible => les intégrer avec l'option control sur chacune des fenêtre filles... ()
  • Rq: ces fenetres filles sont de style Child Non Bordered
  • Bug possible : si des valeurs d'ID (cf.ressources.h) de la mere & la fille st identiq, platage lors de la sélection
  • résolution : changer les valeurs (cf + haut...)
  • **********************************************
  • news 17/07/04 - 2 : réorganisation de controle au sein d'une fenetre
  • on peut reprendre en cours l'ordre grace à CTRL+clic sur l'élément d'ordre juste inférieur à celui voulu
  • **********************************************
  • **********************************************
  • Voilà pour aujourd'hui,
  • .
pour les boites de dialogues, (RessourceView)

Pour changer les numeros d'ID des controles
(si vous ne voyez pas l'intéret, lisez la suite...)
.     
.     vous savez afficher l'ID de tous les controles d'une boite de dialog:
.     .         Clic droit - Propriete
.     Ces ID sont des constantes définies dans resource.h   
.     .         #define ID 123
.     .         ou ID est votre identifiant et 123 sa valeur numérique
.     Un moyen simple de changer sa valeur depuis l'interface graphique consiste à prendre la fenetre de propriété et après le nom de l'ID, inscrire "=321"
le controle aura donc toujours le meme nom mais ce dernier vaudra 321.

Rq : pensez à respecter les plages de valeurs specifiez
sinon, ça va vite etre le wyyyy !!!


Changer cette valeur est util pour utiliser une fonctionnalité de controle très pratique:
Dans mon cas concret, tous les boutons radio d'une boite de dialogue devaient appeler une fonction de mise a jour 'maj()'

auparavant , j'affectait une action a chacun des boutons appelant maj
maintenant, ça se fait en 3 lignes:
.     au préalable, il faut que nos différents identifiants aient des nombres successifs. (voir ci dessus & faire les modifs nécessaires)
.     ensuite, modifions la MESSAGE_MAP de notre boite de dialogue:
.     .         
.     .         BEGIN_MESSAGE_MAP(CChoixInfor, CDialog)
.     .         .	//{{AFX_MSG_MAP(CChoixInfor)
.     .         .	... //code éventuel inséré par le wizard... -Nono
.     .         .	//}}AFX_MSG_MAP
.     .         END_MESSAGE_MAP()
.     Il faut insérer un code dans cette section mais a l'extérieur de la section du wizard:
.     .         
.     .         
.     .         BEGIN_MESSAGE_MAP(CChoixInfor, CDialog)
.     .         .	//{{AFX_MSG_MAP(CChoixInfor)
.     .         .	... //code éventuel inséré par le wizard... -Nono
.     .         .	//}}AFX_MSG_MAP
.     .         .	... // notre code
.     .         END_MESSAGE_MAP()
.     .         
.     on va affecter un controle à l'ensemble des éléments désirés qui se suivent
.     ON_CONTROL_RANGE(BN_CLICKED, 1er elt, dernier elt, nom fonction)
.     exemple :
.     ON_CONTROL_RANGE(BN_CLICKED, IDC_RINFO_BASIC, IDC_RINFO_DET3, maj)
.     
.     ensuite, il faut modifier la fonction : son proto à changé, elle a un nv param !
.     maj() devient :      maj(UINT id)
.     on modifie donc le header et le srce...
.     ou id a la valeur du controle !!! (celle qu'on a affectée!!!)
.     on pourra éventuellement faire un switch sur les id avec des case sur vos ID
.     (pas de valeurs numerique dans vos programmes !!!)
.     
Le defaut est qu'en double cliquant sur le controle, il ne propose toujours de créer une action associée... et ne vas pas à celle que nous avons spécifier
Et que le ClassWizard ne voit pas ces associations.
(je ne C po si VC7 a résolu ce bug...)


a propos, pour éviter un warning a la compilation si vous ne vous servez pas d'une variable (ici l'id)
.     dans la fonction, (au début par ex) inserez : "nomVar;"
.      ici : id;

.      un conseil très général enfin : toujours compiler vos prg en mode level 4
.           Project-Settings-C/C++ - Warning Level ==> 4
.        et éliminez toutes les erreurs & warning... (1 max en tt cas) 
.               (mes prg n'en garde aucunes !) donc C tjs faisable ... 
.                  on détaillera plus tard ici diverses astuces à cet effet.
.      

**********************************************
news 08/07/04 : un bug VC6 !!!
.        si on inclu plsr prj ds le mm esp de travail
.        et qu'on le supprime, 
.        (ça peut servir à copier des ctrl de boite de dialogue d'autres prj)
.        les classes de celui supprimé reste tjs accessibles...
.        pour la completion...
.                le dsw doit garder un ersatz 
**********************************************
news 17/07/04 : utilisation de controles à l'intérieurs d'une boite à onglet
lorsque l'on intègre des fenetres dans une boite à onglet au sein d'une boite de dialogue, les controles , zappages par tab & raccourcis ne sont pas accessible => les intégrer avec l'option control sur chacune des fenêtre filles... ()

Rq: ces fenetres filles sont de style Child Non Bordered

Bug possible : si des valeurs d'ID (cf.ressources.h) de la mere & la fille st identiq, platage lors de la sélection
résolution : changer les valeurs (cf + haut...)


**********************************************
news 17/07/04 - 2 : réorganisation de controle au sein d'une fenetre

on peut reprendre en cours l'ordre grace à CTRL+clic sur l'élément d'ordre juste inférieur à celui voulu


**********************************************
**********************************************


Voilà pour aujourd'hui,

.

 Conclusion

Je pense faire évoluer cet article en fonction de l'avancement de mes découvertes, de vos msg et +++


Peut-etre que la norme associée a MétaProg se vera augmentée d'une section spécifique à Visual,

@+ très bientot, & merci pour vos contribution...

Bruno CELLE.


 Historique

13 juillet 2004 17:38:09 :
news 08/07/04 : un bug VC6 !!! news 17/07/04 : utilisation de controles à l'intérieurs d'une boite à onglet news 17/07/04 - 2 : réorganisation de controle au sein d'une fenetre
19 juillet 2004 15:46:44 :
Bug amenée par les onglets + résolution...

 Sources du même auteur

Source avec Zip [MFC] BCOMBOBOX & BLISTBOX
Source avec Zip Source avec une capture [ C++ WIN32 ] REMPLISSAGE DE FICHE - FENETRE DYNAMIQUE
Source avec Zip Source avec une capture WIN32 - MFC - VC6 - PLACE D'UNE APPLI : BARRE DES TACHES OU ...
Source avec Zip [WIN32] [VC6] BOITE À CHOIX MULTIPLE PAR BOUTONS
Source avec Zip TEMPLATE DE DIALOG/FENETRE (VC++)

 Sources de la même categorie

LISTER FICHIERS ET RÉPERTOIRES (MULTIPLATEFORME) par christophedlr
UTILISATION DES TYPELIST EN C++ par wyden
Source avec Zip Source avec une capture QCSSCOMPRESSOR par alphaone
AFFICHAGE D'UN TRIANGLE ISOCELE par nabche
Source avec Zip GESTION D'UNE BIBLOTHEQUE par leclerro19

Commentaires et avis

Commentaire de kenjimax le 07/07/2004 23:17:45

C'est sympa comme idée, cependant, à ta place, j'aurai pas mi l'explication dans la partie source, parce qu'on comprend pas grand chose a cause de la mise en page..

Commentaire de magic_Nono le 07/07/2004 23:48:58

vi, C un premier jet, après, ça sera ds un fichier Word...

@+,
Bonne Prog et n'hésitez pas à apporter votre pierre à l'édifice...

Commentaire de AmK le 07/07/2004 23:49:18

tu devrais ouvrir un site , et y uploader tous tes tuts !

Commentaire de Soilwork9 le 22/11/2004 15:55:44

Salut,
C'est vrai que c'est une bonne idée et que c'est intéressant (même si je n'utilise pas VC++ actuellement, cela pourrait m'arriver dans le futur).

En revanche, j'ai un (gros) reproche à te faire Magic Nono : S'il-te-plait, évite le "langage SMS" et autres abréviations en tout genre, que ce soit dans tes tutorials ou dans les commentaires que tu laisses : C'est vraiment genant et ennuyeux (voire difficile) a lire. Tu as un clavier sur ton PC, alors utilise-le convenablement ! (A moins que tu ne postes tes commentaires via un accès WAP? lol).

Enfin, voila, juste un petit effort à faire au niveau de l'écriture (et oui, la vie est dure quand on a pas de mécanisme d'Automatic Code Completion! A quand une IDE pour la langue francaise? :P), et une relecture après avoir fini ton texte pour supprimer les typos et les fautes d'orthographe restantes, et tout serait nickel, et beaucoup plus sérieux!

Un peu de courage, que diable! ^^
++
Soilwork

Commentaire de magic_Nono le 22/11/2004 16:16:38

merci

je compte reprendre tout ça une fois que j'aurai mon nouvel appartement; dès que j'ai la freebox installée

en tout cas, merci pour ces encouragements.
et je tacherai d'y faire plus attention.

Pour la typo, j'utilise parfois des claviers qwerty, des azerty, et des portables spéciaux donc... merci de votre compréhension.
pour la completion en directe, ça serai une bone idée, il faudrait voir ça avec les admin et ce qu'il y a de possible sur ces pages asp (ou en javascript si c'est plus simple).

Magicalement
++
Nono.

PS si tu possède un mécanisme du genre, merci de laisser une url...

Commentaire de magic_Nono le 03/12/2004 16:11:39

Je déménage le we qui vient
la FreeBox pour janvier a priori

au passage, j'ai trouvé une page traitant du meme sujet

elle est relativement complète et détaillée
http://musaran.developpez.com/TrucsVC6/

et rapporte d'autres astuces...

Magicalement
Nono.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales