TN020: convenzioni di numerazione e denominazione ID
In questa nota vengono descritte le convenzioni di denominazione ed numerazione dell'ID che MFC 2.0 utilizza per le risorse, i comandi, le stringhe, i controlli e le finestre figlie.
Le convenzioni MFC di denominazione ed numerazione degli ID hanno lo scopo di soddisfare i seguenti requisiti:
Offrire un ID di denominazione coerente mediante l'utilizzo della libreria MFC e delle applicazioni MFC supportate dall'editor delle risorse di Visual C++. Ciò semplifica al programmatore l'interpretazione del tipo e dell'origine di una risorsa per un relativo ID.
Enfatizzare la stretta relazione 1-a-1 tra determinati tipi di ID.
Conformi agli standard già largamente adottati per denominare gli ID di Windows.
Partizione dello spazio di numerazione degli ID. I numeri ID possono essere assegnati dal programmatore, da MFC, da Windows e dalle risorse modificate in Visual C++. Un partizionamento appropriato consentirà di evitare la duplicazione dei numeri ID.
La convenzione di denominazione del prefisso ID.
Possono verificarsi diversi tipi di ID in un'applicazione. La convenzione MFC di denominazione degli ID definisce prefissi diversi per tipi di risorsa diversi.
MFC utilizza il prefisso "IDR_" per indicare l'ID di una risorsa che viene applicato a molteplici tipi di risorsa. Ad esempio, per una specifica cornice di una finestra, MFC utilizza lo stesso prefisso "IDR_" per indicare una risorsa del menu, un tasto di scelta rapida, una stringa e un'icona. Nella tabella seguente sono illustrati i vari prefissi ed il relativo utilizzo:
Prefisso |
Utilizzo |
---|---|
IDR_ |
Per tipi di risorsa multipli (principalmente utilizzato per menu, tasti di scelta rapida e barre multifunzione). |
IDD_ |
Per i modelli delle risorse delle finestre di dialogo (ad esempio, IDD_DIALOG1). |
IDC_ |
Per le risorse cursore. |
IDI_ |
Per le risorse icona. |
IDB_ |
Per le risorse bitmap. |
IDS_ |
Per le risorse di tipo stringa. |
All'interno di una risorsa DIALOG, MFC utilizza le seguenti convenzioni:
Prefisso o etichetta |
Utilizzo |
---|---|
IDOK, IDCANCEL |
Per i pulsanti ID di tipo standard. |
IDC_ |
Per altri controlli della finestra di dialogo. |
Il prefisso "IDC_" viene inoltre utilizzato per i cursori. Questo conflitto di denominazione non è in genere un problema perché un'applicazione tipica avrà pochi cursori e molte finestre di dialogo.
All'interno di un menu delle risorse, MFC utilizza le seguenti convenzioni:
Prefisso |
Utilizzo |
---|---|
IDM_ |
Per le voci di un menu che non utilizzano l'architettura dei comandi MFC. |
ID_ |
Per i comandi dei menu che utilizzano l'architettura dei comandi MFC. |
I controlli che seguono l'architettura dei comandi MFC, devono disporre di un gestore di comando ON_COMMAND e possono avere un gestore ON_UPDATE_COMMAND_UI. Se questi gestori dei comandi seguono l'architettura dei comandi MFC, funzionano correttamente se vengono associati ad un comando del menu, ad un pulsante della barra degli strumenti o ad un pulsante della barra della finestra di dialogo. Lo stesso prefisso "ID_" viene inoltre utilizzato per una stringa di richiesta del menu che viene visualizzata nella barra dei messaggi del programma. La maggior parte delle voci del menu nell'applicazione dovrebbero seguire le convenzioni dei comandi MFC. Tutti i comandi standard per gli ID (ad esempio, ID_FILE_NEW) seguono la convenzione.
MFC utilizza anche "IDP_" come un tipo specializzato di stringhe (anziché "IDS_"). Le stringhe con il prefisso "IDP_" sono richieste, ovvero, le stringhe vengono utilizzate nelle finestre di messaggio. Le stringhe "IDP_" possono contenere "%1 " e "%2 " come segnaposto di stringhe determinate dal programma. Le stringhe "IDP_" in genere presentano argomenti associati, al contrario delle stringhe "IDS_". Le stringhe "IDP_" sono spesso localizzate e le stringhe "IDS_" possono non essere localizzate.
La libreria MFC inoltre utilizza il prefisso "IDW_" come una forma specializzata di controllo degli ID (anziché di "IDC_") Questi ID sono assegnati alle finestre figlie così come le viste e le divisioni sono assegnate alle classi del framework. L'implementazione MFC degli ID è preceduta da "AFX_".
La convenzione di numerazione degli ID
Nella seguente tabella sono elencati gli intervalli validi per gli ID dei tipi specificati. Alcuni dei limiti sono limiti tecnici di implementazione e altre convenzioni sono progettate per impedire agli ID di provocare conflitti con gli ID predefiniti Windows o con le implementazioni predefinite MFC.
Si consiglia vivamente di definire tutti gli ID all'interno degli intervalli consigliati. Il limite inferiore di questi intervalli è 1 perché 0 non viene utilizzato. Si consiglia di utilizzare la convenzione comune e utilizzare 100 o 101 come primo ID.
Prefisso |
Tipo di risorsa. |
Intervallo valido |
---|---|---|
IDR_ |
multipli |
1 a 0x6FFF |
IDD_ |
modelli di una finestra di dialogo |
1 a 0x6FFF |
IDC_,IDI_,IDB_ |
cursori, icone, bitmap |
1 a 0x6FFF |
IDS_, IDP_ |
stringhe generali |
1 a 0x7FFF |
ID_ |
comandi |
0x8000 a 0xDFFF |
IDC_ |
controlli |
8 a 0xDFFF |
Motivazione di questi limiti sull'intervallo:
Per convenzione, non viene utilizzato il valore ID di 0.
Le limitazione dell'implementazione di Windows restringono gli ID delle risorse affinché siano minori o uguali a 0x7FFF.
Il framework interno MFC riserva questi intervalli:
0x7000 a 0x7FFF (vedere afxres.h)
0xE000 a 0xEFFF (vedere afxres.h)
16000 a 18000 (vedere afxribbonres.h)
Questi intervalli possono cambiare nelle future implementazioni MFC.
Numerosi comandi di sistema Windows utilizzano l'intervallo da 0xF000 a 0xFFFF.
Il controllo degli ID da 1 a 7 sono riservati per i controlli standard come IDOK e IDCANCEL.
L'intervallo da 0x8000 a 0xFFFF per le stringhe è riservato per le richieste del menu per i comandi.