2013-10-08 227 views
0

我一直在清理舊項目的resource.h。MFC ID_與IDM_前綴及其範圍

在該項目中我的工作,我有一些標識它們的形式: IDM_XXXX 32771 但在代碼ON_COMMANDON_UPDATE_COMMAND_UI語句稱爲。

所以我正確地認爲他們遵循命令架構,理想情況下應命名爲ID_XXX而不是IDM_XXXX

我已經通過TN022: Standard Commands Implementation閱讀並看到微軟稱:

我們建議您使用菜單項標準「IDM_」前綴這 不聽從指揮架構和需要特殊的菜單代碼 啓用和禁用它們。

我不確定這裏的menu-specific code是什麼意思。

IDM_XXXX資源通常如何處理?還有什麼是IDM_XXXX的有效範圍?我已經通過TN020: ID Naming and Numbering Conventions但困惑。

回答

0

ID_和IDM_可互換,因爲可通過命令欄,菜單或色帶訪問命令。我從來不使用IDM_,我只使用ID_

由MFC保留的是0xE000-> 0xEFFF和0x7000-> 0x7FFF。

TN020說菜單/命令ID必須在0x8000和更大的範圍內,但我沒有找到理由爲什麼要這樣做。在工具提示處理和命令路由的16位MFC版本和AFAIK的舊MFC4.x版本的對話框中,有一個特定的代碼查找大於0x8000的命令。

由於意外,我有案件是一個ID < 0x8000被創建,但它的工作。

0

我會拒絕不遵循技術說明中的建議。如果您違反了他們的建議,Microsoft確實會有未公開的消息可能會干擾您的代碼。而且,調試這樣的問題會很困難。此外,以下的建議可以讓你的下面的MFC命令架構不僅使得命令處理程序的額外的好處......

更強大的(因爲它們將與工具欄進行操作),但使得 命令處理程序代碼可重用

這意味着MFC將使用相同的代碼來處理鏈接在一起的任何菜單和工具欄交互。