Utilisation avancée du vc6 - trucs & astuces non/peu documentés

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 890 fois - Téléchargée 31 fois

Contenu du snippet

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 / Exemple :


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.

A voir également

Ajouter un commentaire

Commentaires

kenjimax
Messages postés
82
Date d'inscription
dimanche 3 août 2003
Statut
Membre
Dernière intervention
10 août 2007
-
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..
magic_Nono
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1 -
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...
cs_AmK
Messages postés
368
Date d'inscription
jeudi 13 mars 2003
Statut
Membre
Dernière intervention
27 janvier 2010
-
tu devrais ouvrir un site , et y uploader tous tes tuts !
Soilwork9
Messages postés
16
Date d'inscription
lundi 9 août 2004
Statut
Membre
Dernière intervention
13 septembre 2004
-
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
magic_Nono
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1 -
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...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.