TN020 : conventions de dénomination d'ID et de numérotation
Cette note décrit les conventions d’affectation de noms et de numérotation d’ID utilisées par MFC 2.0 pour les ressources, les commandes, les chaînes, les contrôles et les fenêtres enfants.
Les conventions d’affectation de noms et de numérotation des ID MFC sont destinées à répondre aux exigences suivantes :
Fournissez une norme de nommage d’ID cohérente utilisée dans la bibliothèque MFC et les applications MFC prises en charge par l’éditeur de ressources Visual C++. Cela permet au programmeur d’interpréter plus facilement le type et l’origine d’une ressource à partir de son ID.
Mettez en évidence la relation forte de 1 à 1 entre certains types d’ID.
Conformez-vous aux normes déjà largement utilisées pour nommer les ID dans Windows.
Partitionnez l’espace de numérotation d’ID. Les numéros d’ID peuvent être attribués par les ressources modifiées du programmeur, MFC, Windows et Visual C++. Le partitionnement approprié permet d’éviter la duplication des numéros d’ID.
Convention d’affectation de noms de préfixe d’ID
Plusieurs types d’ID peuvent se produire dans une application. La convention d’affectation de noms d’ID MFC définit différents préfixes pour différents types de ressources.
MFC utilise le préfixe « IDR_ » pour indiquer un ID de ressource qui s’applique à plusieurs types de ressources. Par exemple, pour une fenêtre de cadre donnée, MFC utilise le même préfixe « IDR_ » pour indiquer un menu, un accélérateur, une chaîne et une ressource d’icône. Le tableau suivant présente les différents préfixes et leur utilisation :
Préfixe | Utilisation |
---|---|
IDR_ | Pour plusieurs types de ressources (principalement utilisés pour les menus, les accélérateurs et les rubans). |
IDD_ | Pour les ressources de modèle de boîte de dialogue (par exemple, IDD_DIALOG1). |
IDC_ | Pour les ressources de curseur. |
IDI_ | Pour les ressources d’icône. |
BID_ | Pour les ressources bitmap. |
IDS_ | Pour les ressources de chaîne. |
Dans une ressource DIALOG, MFC suit ces conventions :
Préfixe ou étiquette | Utilisation |
---|---|
IDOK, IDCANCEL | Pour les ID de bouton Push standard. |
IDC_ | Pour les autres contrôles de boîte de dialogue. |
Le préfixe « IDC_ » est également utilisé pour les curseurs. Ce conflit d’affectation de noms n’est généralement pas un problème, car une application classique aura peu de curseurs et de nombreux contrôles de boîte de dialogue.
Dans une ressource de menu, MFC suit ces conventions :
Préfixe | Utilisation |
---|---|
IDM_ | Pour les éléments de menu qui n’utilisent pas l’architecture de commande MFC. |
ID_ | Pour les commandes de menu qui utilisent l’architecture de commande MFC. |
Les commandes qui suivent l’architecture de commande MFC doivent avoir un gestionnaire de commandes ON_COMMAND et peuvent avoir un gestionnaire de ON_UPDATE_COMMAND_UI. Si ces gestionnaires de commandes suivent l’architecture de commande MFC, ils fonctionnent correctement s’ils sont liés à une commande de menu, à un bouton de barre d’outils ou à un bouton de barre de dialogue. Le même préfixe « ID_ » est également utilisé pour une chaîne d’invite de menus affichée dans la barre de messages du programme. La plupart des éléments de menu de votre application doivent suivre les conventions de commande MFC. Tous les ID de commande standard (par exemple, ID_FILE_NEW) suivent cette convention.
MFC utilise également « IDP_ » comme une forme spécialisée de chaînes (au lieu de « IDS_ »). Les chaînes avec le préfixe « IDP_ » sont des invites, c’est-à-dire des chaînes utilisées dans les boîtes de message. Les chaînes « IDP_ » peuvent contenir « %1 » et « %2 » comme espaces réservés de chaînes déterminés par le programme. Les chaînes « IDP_ » ont généralement des rubriques d’aide associées, et les chaînes « IDS_ » ne le sont pas. Les chaînes « IDP_ » sont toujours localisées et les chaînes « IDS_ » peuvent ne pas être localisées.
La bibliothèque MFC utilise également le préfixe « IDW_ » comme forme spécialisée d’ID de contrôle (au lieu de « IDC_ »). Ces ID sont attribués à des fenêtres enfants telles que des vues et des séparateurs par les classes d’infrastructure. Les ID d’implémentation MFC sont précédés de « AFX_ ».
The ID-Numbering Convention
Le tableau suivant répertorie les plages valides pour les ID des types spécifiques. Certaines des limites sont des limites d’implémentation technique, et d’autres sont des conventions conçues pour empêcher vos ID d’entrer en conflit avec les ID prédéfinis Windows ou les implémentations par défaut MFC.
Nous vous recommandons vivement de définir tous les ID à l’intérieur des plages recommandées. La limite inférieure de ces plages est 1, car 0 n’est pas utilisé. Nous vous recommandons d’utiliser la convention commune et d’utiliser 100 ou 101 comme premier ID.
Préfixe | Type de ressource | Plage valide |
---|---|---|
IDR_ | multiple | 1 à 0x6FFF |
IDD_ | modèles de boîte de dialogue | 1 à 0x6FFF |
IDC_,IDI_,IDB_ | curseurs, icônes, bitmaps | 1 à 0x6FFF |
IDS_, IDP_ | chaînes générales | 1 à 0x7FFF |
ID_ | commands | 0x8000 via 0xDFFF |
IDC_ | controls | 8 à 0xDFFF |
Raisons de ces limites de plage :
Par convention, la valeur d’ID de 0 n’est pas utilisée.
Les limitations d’implémentation Windows limitent les ID de ressources réels à être inférieurs ou égaux à 0x7FFF.
Le framework interne de MFC réserve ces plages :
0x7000 via 0x7FFF (voir afxres.h)
0xE000 via 0xEFFF (voir afxres.h)
16000 à 18000 (voir afxribbonres.h)
Ces plages peuvent changer dans les futures implémentations MFC.
Plusieurs commandes système Windows utilisent la plage de 0xF000 via 0xFFFF.
Les ID de contrôle de 1 à 7 sont réservés aux contrôles standard tels que IDOK et IDCANCEL.
La plage de 0x8000 via 0xFFFF pour les chaînes est réservée aux invites de menu pour les commandes.