TN020 : Conventions d'affectation de noms et de numérotation d'ID
Cette remarque décrit les conventions de désignation et de numérotation de l'ID que MFC 2,0 utilise pour les ressources, commandes, chaînes, contrôles, et fenêtres enfants.
Les conventions de désignation et de numérotation de l'ID MFC sont conçues pour répondre aux exigences suivantes :
Fournir une norme de désignation d'ID cohérente utilisée au delà de la bibliothèque MFC et des applications MFC prises en charge par l'éditeur de ressources Visual C++. Cela simplifie la vie du programmeur pour l'interprétation du type et de l'origine d'une ressource de son ID.
Accentuer la relation forte 1 à 1 entre certains types d'ID.
Se conformer aux normes déjà largement utilisées pour désigner des ID dans Windows.
Partitionner l'espace de numérotation d'ID. Les numéros d'ID peuvent être assignés par le programmeur, MFC, Windows, et par les ressources éditées par Visual C++. Un partitionnement approprié permettra d'éviter la duplication des numéros d'ID.
La convention de désignation des préfixes d'ID
Plusieurs types d'ID peuvent se produire dans une application. La convention de désignation d'ID MFC définit différents préfixes pour différents types de ressource.
MFC utilise le préfixe « IDR_ » pour indiquer un ID de ressource qui s'applique à plusieurs types de ressource. Par exemple, pour une fenêtre frame donnée, MFC utilise le même préfixe « IDR_ » pour indiquer un menu, un accélérateur, une chaîne et une ressource icône. Le tableau suivant indique les différents préfixes et leur utilisation :
Préfixe |
Utilisez |
---|---|
IDR_ |
Pour plusieurs types de ressource (principalement utilisés pour les menus, les accélérateurs, et les rubans). |
IDD_ |
Pour les ressources modèles de boîte de dialogue (par exemple, IDD_DIALOG1). |
IDC_ |
Pour les ressources curseur. |
IDI_ |
Pour les ressources icône. |
.IDB_ |
Pour les ressources bitmap. |
IDS_ |
Pour les ressources chaîne. |
A l'intérieur d'une ressource boite de dialogue, MFC suit ces conventions :
Préfixe ou étiquette |
Utilisez |
---|---|
IDOK, IDCANCEL |
Pour les ID standard de bouton poussoir. |
IDC_ |
Pour d'autres contrôles de boîte de dialogue. |
Le préfixe « IDC_ » est également utilisée pour les curseurs. Ce conflit dans la désignation n'est généralement pas un problème car une application standard possède peu de curseurs et de nombreux contrôles de boîte de dialogue.
A l'intérieur d'une ressource menu, MFC suit ces conventions :
Préfixe |
Utilisez |
---|---|
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 ON_UPDATE_COMMAND_UI. Si ces gestionnaires de commandes suivent l'architecture de commande MFC, ils fonctionneront correctement qu'ils soient liés à une commande de menu, un bouton de barre d'outils, ou un bouton de barre de boîte de dialogue. Le même préfixe « ID_ » est également utilisé pour une chaîne d'invite de menu qui s'affiche dans la barre des messages du programme. La plupart des éléments de menu dans votre application doivent respecter 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 particulière 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 des boites de messages. Les chaînes « IDP_ » peuvent contenir "%1" et "%2 " comme espaces réservés de chaînes déterminées par le programme. Les chaînes « IDP_ » ont généralement des rubriques d'aide associées, et les chaînes « IDS_ » non. Les chaînes « IDP_ » sont toujours localisées, et les chaînes « IDS_ » peuvent ne pas l'être.
La bibliothèque MFC utilise également le préfixe « IDW_ » comme une forme particulière d'ID de contrôle (au lieu de « IDC_ »). Ces ID sont assignés aux fenêtres enfants telles que les vues et les séparateurs des classes d'infrastructure. Les ID d'implémentation MFC sont précédés par « AFX_ ».
La convention de numérotation d'ID
Le tableau suivant répertorie les plages valides pour les ID des types spécifiques. Certaines des limites sont des limites techniques d'implémentation, et d'autres sont des conventions conçues pour empêcher vos ID de se heurter à des ID prédéfinis par Windows ou à des implémentations par défaut de MFC.
Nous vous recommandons vivement de définir tous les ID dans 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 courante et d'utiliser 100 ou 101 comme premier ID.
Préfixe |
Type de ressource |
Plage valide |
---|---|---|
IDR_ |
plusieurs |
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_ |
commandes |
0x8000 à 0xDFFF |
IDC_ |
contrôles |
8 à 0xDFFF |
Les raisons pour ces bornes limites :
Par convention, la valeur d'ID 0 n'est pas utilisée.
Les limitations d'implémentation Windows restreignent les véritables ID de ressource pour être inférieurs ou égaux à 0x7FFF.
L'infrastructure interne de MFC réserve ces plages :
0x7000 à 0x7FFF (voir afxres.h)
0xE000 à 0xEFFF (voir afxres.h)
16000 à 18000 (voir afxribbonres.h)
Ces plages peuvent changer dans les prochaines implémentations de MFC.
Plusieurs commandes de système Windows utilisent la plage de 0xF000 à 0xFFFF.
Les ID de contrôle de 1 à 7 sont réservés pour les contrôles standard tels qu'IDOK et IDCANCEL.
La plage de 0x8000 à 0xFFFF pour les chaînes est réservée aux invites de menu pour les commandes.