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

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

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.