192 lines
8.5 KiB
Plaintext
192 lines
8.5 KiB
Plaintext
This note describes the ID naming and numbering conventions used by MFC
|
|
for resources, commands, strings, controls, and child windows.
|
|
|
|
The Problem
|
|
The MFC ID naming and numbering conventions are intended to meet the following requirements:
|
|
· Provide a consistent ID-naming standard used across the MFC library
|
|
and MFC applications that are supported by the Visual C++ resource editor.
|
|
This allows the programmer to more readily interpret IDs as to their type and origin.
|
|
· Emphasize the strong 1-to-1 relationship between certain types of IDs. This helps to
|
|
clarify MFC's application framework architecture.
|
|
· Conform to already widely used standards for naming IDs in Windows.
|
|
· Partition the ID-numbering space, so as to avoid unintentional duplication of ID numbers
|
|
among those assigned by the programmer, by MFC and Windows, and by Visual C++-edited resources.
|
|
|
|
Overview of ID Prefix Naming Convention
|
|
There are several categories or types of IDs in an application. The MFC ID-naming convention
|
|
defines different prefixes for different resource types.
|
|
MFC uses the prefix "IDR_" to refer to a resource ID that applies to multiple resource types.
|
|
For example, for a given frame window, the same "IDR_" value is used to refer to a menu,
|
|
accelerator, string and icon resource all at once.
|
|
|
|
|
|
IDR_ Multiple resource types (Used for Menus, Accelerators primarily).
|
|
IDD_ For dialog template resources (for example, IDD_DIALOG1).
|
|
|
|
IDC_ For Cursor resources.
|
|
|
|
IDI_ For Icon resources.
|
|
|
|
IDB_ For Bitmap resources.
|
|
|
|
IDS_ For String resources.
|
|
|
|
|
|
Note that the IDS_ value for a string resource is the ID passed to LoadString.
|
|
The actual implementation of string table resources groups together 16 strings into one segment.
|
|
|
|
Within a DIALOG resource, we follow the convention of:
|
|
|
|
IDOK,IDCANCEL For standard push button IDs.
|
|
IDC_ For other dialog controls.
|
|
The "IDC_" prefix is also used for cursors.
|
|
|
|
This naming conflict is not usually a problem since a typical application will have
|
|
few cursors and a large number of dialog controls.
|
|
|
|
Within a Menu resource, we follow the convention of:
|
|
|
|
IDM_ For menu items not using the MFC command architecture.
|
|
ID_ For menu item commands using the MFC command architecture.
|
|
|
|
Commands that follow the MFC command architecture must have an ON_COMMAND command handler
|
|
and may have an ON_UPDATE_COMMAND_UI handler. If these command handlers follow the MFC command
|
|
architecture, they will function correctly whether they are bound to a menu item, a toolbar button
|
|
or a dialog bar button. The same ID_ is also used for a menu prompt string displayed on
|
|
the program's message bar. Most of the menu items in your application should follow the MFC command
|
|
convention. All of the standard command IDs (for example, ID_FILE_NEW) follow this convention.
|
|
|
|
MFC also uses "IDP_" as a specialized form of strings (that is, instead of "IDS_").
|
|
Strings with the "IDP_" prefix are "prompts," that is, strings used in message boxes.
|
|
"IDP_" strings may contain "%1" and "%2" as place holders of strings determined by the program.
|
|
"IDP_" strings usually have help topics, while "IDS_" strings do not. "IDP_" strings are always
|
|
localized, while "IDS_" strings may or may not be localized.
|
|
|
|
The MFC library also uses the "IDW_" prefix as a specialized form of control IDs
|
|
(that is, instead of "IDC_"). These IDs are assigned to child windows such as views and splitters
|
|
by the framework classes. MFC implementation IDs are prefixed with "AFX_".
|
|
|
|
|
|
Overview of MFC ID-Numbering Convention
|
|
The following lists the valid ranges for the IDs of the specific types.
|
|
Some of the limits are technical implementation limits while others are just conventions to prevent
|
|
your IDs from colliding with Windows predefined IDs or MFC default implementations.
|
|
We strongly recommend you do not defined IDs outside the recommended ranges.
|
|
Even though the lower limit of many of these ranges is 1 (0 is not used),
|
|
common convention starts practical use of IDs at 100 or 101.
|
|
|
|
Prefix Resource Type Valid Range
|
|
|
|
IDR_ multiple 1 -> 0x6FFF
|
|
IDD_ dialog templates 1 -> 0x6FFF
|
|
IDC_,IDI_,IDB_ cursors, icons, bitmaps 1 -> 0x6FFF
|
|
IDS_, IDP_ general strings 1 -> 0x7FFF
|
|
ID_ commands 0x8000 -> 0xDFFF
|
|
IDC_ controls 8 -> 0xDFFF
|
|
|
|
Reasons for these range limits:
|
|
|
|
· By convention, the ID value of 0 is not used.
|
|
· Windows implementation limitations restrict true resource IDs to be less than or equal
|
|
to 0x7FFF.
|
|
· MFC's internal framework implementations reserve several ranges:
|
|
0xE000->0xEFFF and 0x7000->0x7FFF.
|
|
· Several Windows system commands use the range of 0xF000 -> 0xFFFF.
|
|
· Control IDs of 1->7 are reserved by IDOK, IDCANCEL, and so on.
|
|
· The range of 0x8000->0xFFFF for strings is reserved for menu prompts for commands.
|
|
|
|
|
|
|
|
***************************************************************************************************
|
|
***************************************************************************************************
|
|
|
|
Overview of Weekly MFC EXTension ID-Numbering Convention
|
|
--------------------------------------------------------
|
|
The following lists the valid ranges for the IDs of the specific types for the Weekly MFC EXTension.
|
|
We strongly recommend you do not defined IDs outside the recommended ranges.
|
|
It's also recommeded to reserve a smaller range specifically for each class or app you need
|
|
resources for.
|
|
|
|
Prefix Resource Type Valid Range
|
|
|
|
IDR_ multiple 23000 -> 25999
|
|
IDD_ dialog templates 23000 -> 25999
|
|
IDC_,IDI_,IDB_ cursors, icons, bitmaps 23000 -> 25999
|
|
IDC_ controls 23000 -> 25999
|
|
IDS_, IDP_ general strings 23000 -> 25999
|
|
|
|
ID_ commands(routable) 53000 -> 54999
|
|
|
|
|
|
Ranges already in use
|
|
---------------------
|
|
|
|
Class/App Range
|
|
|
|
***************************************************************************************************
|
|
***************************************************************************************************
|
|
|
|
MESSAGE RESOURCES FACILITY ID
|
|
-----------------------------
|
|
AutomaticUpdate = 0x101 : FACILITY_AUTOMATIC_UPDATE
|
|
MailBackService = 0x102 : FACILITY_MBS
|
|
DistributionList = 0x110 : FACILITY_DIST_LIST
|
|
#define OX_FACILITY_REGISTRY_WATCHER 0x221
|
|
|
|
***************************************************************************************************
|
|
***************************************************************************************************
|
|
|
|
APPLICATION AND USER DEFINED MESSAGES
|
|
-------------------------------------
|
|
#define WM_USER 0x0400 [WinUser.h]
|
|
#define WM_APP 0x8000 [WinUser.h]
|
|
|
|
#ifndef WM_OX_APP
|
|
// You can redefine WM_OX_APP by defining it before including this file
|
|
#define WM_OX_APP WM_APP + 100
|
|
#endif
|
|
|
|
#define WM_POST_INIT (WM_OX_APP + 110) [OXEditList.h]
|
|
#define WM_POST_INIT (WM_OX_APP + 110) [OXNetBrowseTree.h]
|
|
#define WM_POST_REDRAW (WM_OX_APP + 112) [OXColorButton.h]
|
|
#define WM_CHECK_TRACK_LOOK (WM_OX_APP + 113) [OXBitmapButton.h]
|
|
|
|
#define WM_EXP_DATA_EDIT (WM_OX_APP + 120) [OXExpForward.h]
|
|
#define WM_EXP_TREE_EDIT (WM_OX_APP + 121) [OXExpForward.h]
|
|
#define WM_EXP_TREE_OPEN (WM_OX_APP + 122) [OXExpForward.h]
|
|
#define WM_EXP_TREE_CLOSE (WM_OX_APP + 123) [OXExpForward.h]
|
|
#define WM_EXP_HANDLE_DRAG (WM_OX_APP + 124) [OXExpForward.h]
|
|
// OXExpForward.h has the range +120 till +129 reserved
|
|
|
|
#define WM_NOTIFY_TASKBAR_ICON (WM_OX_APP + 130) [OXTaskbarIcon.h]
|
|
#define WM_OX_LISTHSCROLL (WM_OX_APP + 131) (OXMultiComboBox.h)
|
|
|
|
#define WM_PROCESS_CELLEDIT (WM_OX_APP + 135) [OXCllEdt.h]
|
|
#define WM_OX_FILE_NOTIFY (WM_OX_APP + 137) [OXFileWatcher.h]
|
|
|
|
#define WM_OX_INTERNAL_SOUNDCALLBACK (WM_OX_APP + 140) [OXSound.h]
|
|
#define WM_OX_SOUNDPLAYBACKCOMPLETE (WM_OX_APP + 141) [OXSound.h]
|
|
#define WM_OX_SOUNDPLAYLOOPING (WM_OX_APP + 142) [OXSound.h]
|
|
|
|
#define WM_OX_FILE_MATCH_FOUND (WM_OX_APP + 144) [OXFileChanger.h]
|
|
#define WM_OX_FILE_PRE_REPLACE (WM_OX_APP + 145) [OXFileChanger.h]
|
|
#define WM_OX_FILE_POST_REPLACE (WM_OX_APP + 146) [OXFileChanger.h]
|
|
|
|
#define WM_OX_INSERTDATA (WM_OX_APP + 150) [OXDrag*Router.h]
|
|
|
|
#define WMOX_FINAL_RELEASE (WM_USER + 1) [OXFinalReleaseWnd.h]
|
|
#define WMOX_BROTHER_ACTIVATE (WM_USER + 1) [BrotherWatchWnd.h]
|
|
#define WMOX_BROTHER_CLOSE (WM_USER + 2) [BrotherWatchWnd.h]
|
|
#define WM_DOMDICLTREALIZE (WM_USER + 104) [XMDIClt.h]
|
|
#define WM_DOREALIZE (WM_USER + 105) [XMmainFrm.h]
|
|
#define WM_STAT_DBLCLICK (WM_USER + 555) [XStatus.h]
|
|
#define WM_STAT_DBLCLICK (WM_USER + 555) [XStatus4.h]
|
|
#define WM_LMSUROLLUP (WM_USER + 0x0400) [OXRollup.h]
|
|
|
|
***************************************************************************************************
|
|
***************************************************************************************************
|
|
|
|
|
|
|
|
|