ON_OLECMD( pguid, olecmdid, commandId )
pguid
命令所属的命令组的标识符。 对标准组使用 NULL
。
olecmdid
OLE 命令的标识符。
commandId
发出命令的资源或对象的菜单 ID、工具栏 ID、按钮 ID 或其他 ID。
IOleCommandTarget
允许容器接收源自 DocObject 的用户界面的命令,并允许容器将相同的命令(例如“文件”菜单上的“新建”、“打开”、“另存为”和“打印”;以及“编辑”菜单上的“复制”、“粘贴”、“撤消”等)发送到 DocObject。
IOleCommandTarget
比 OLE 自动化的 IDispatch
更简单。 IOleCommandTarget
完全依赖于很少具有参数的一组标准命令,并且不涉及类型信息(也会降低命令参数的类型安全性)。 如果需要调度带有参数的命令,请使用 COleServerDoc::OnExecOleCmd
。
IOleCommandTarget
标准菜单命令已在以下宏中由 MFC 实现:
ON_OLECMD_CLEARSELECTION( )
调度“编辑清除”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_CLEARSELECTION, ID_EDIT_CLEAR)
ON_OLECMD_COPY( )
调度“编辑复制”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_COPY, ID_EDIT_COPY)
ON_OLECMD_CUT( )
调度“编辑剪切”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_CUT, ID_EDIT_CUT)
ON_OLECMD_NEW( )
调度“文件新建”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_NEW, ID_FILE_NEW)
ON_OLECMD_OPEN( )
调度“文件打开”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_OPEN, ID_FILE_OPEN)
ON_OLECMD_PAGESETUP( )
调度“文件页面设置”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_PAGESETUP, ID_FILE_PAGE_SETUP)
ON_OLECMD_PASTE( )
调度“编辑粘贴”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_PASTE, ID_EDIT_PASTE)
ON_OLECMD_PASTESPECIAL( )
调度“编辑选择性粘贴”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_PASTESPECIAL, ID_EDIT_PASTE_SPECIAL)
ON_OLECMD_PRINT( )
调度“文件打印”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_PRINT, ID_FILE_PRINT)
ON_OLECMD_PRINTPREVIEW( )
调度“文件打印预览”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_PRINTPREVIEW, ID_FILE_PRINT_PREVIEW)
ON_OLECMD_REDO( )
调度“编辑恢复”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_REDO, ID_EDIT_REDO)
ON_OLECMD_SAVE( )
调度“编辑保存”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_SAVE, ID_FILE_SAVE)
ON_OLECMD_SAVE_AS( )
调度“文件另存为”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_SAVEAS, ID_FILE_SAVE_AS)
ON_OLECMD_SAVE_COPY_AS( )
调度“文件副本另存为”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_SAVECOPYAS, ID_FILE_SAVE_COPY_AS)
ON_OLECMD_SELECTALL( )
调度“编辑全选”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_SELECTALL, ID_EDIT_SELECT_ALL)
ON_OLECMD_UNDO( )
调度“编辑撤消”命令。 实现为:
ON_OLECMD(NULL, OLECMDID_UNDO, ID_EDIT_UNDO)
标头:afxdocob.h
ON_REGISTERED_MESSAGE
Windows RegisterWindowMessage
函数用于定义一个新的窗口消息,可保证该消息在整个系统中是唯一的。
ON_REGISTERED_MESSAGE( nMessageVariable, memberFxn )
nMessageVariable
已注册的窗口消息 ID 变量。
memberFxn
消息映射到的消息处理程序函数的名称。
此宏指示哪个函数将处理已注册的消息。
有关详细信息和示例,请参阅消息处理和映射主题。
static UINT NEAR WM_FIND = RegisterWindowMessage(_T("COMMDLG_FIND"));
BEGIN_MESSAGE_MAP(CMyWnd3, CWnd)
ON_REGISTERED_MESSAGE(WM_FIND, OnFind)
END_MESSAGE_MAP()
标头:afxmsg_.h
ON_REGISTERED_THREAD_MESSAGE
指示哪个函数将处理由 Windows RegisterWindowMessage
函数注册的消息。
ON_REGISTERED_THREAD_MESSAGE(nMessageVariable, memberFxn )
nMessageVariable
已注册的窗口消息 ID 变量。
memberFxn
消息映射到的 CWinThread
消息处理程序函数的名称。
RegisterWindowMessage
用于定义一个新的窗口消息,可保证在整个系统中是唯一的。 当你有 CWinThread
类时,必须使用 ON_REGISTERED_THREAD_MESSAGE
,而不是 ON_REGISTERED_MESSAGE
。
标头:afxmsg_.h
ON_THREAD_MESSAGE
指示哪个函数将处理用户定义的消息。
ON_THREAD_MESSAGE( message, memberFxn )
message
消息 ID。
memberFxn
消息映射到的 CWinThread
消息处理程序函数的名称。
当你有 CWinThread
类时,必须使用 ON_THREAD_MESSAGE
,而不是 ON_MESSAGE
。 用户定义消息是不属于标准 Windows WM_MESSAGE
消息的任何消息。 对于必须映射到消息处理程序函数的每个用户定义消息,消息映射中应正好有一个 ON_THREAD_MESSAGE
宏语句。
标头:afxole.h
ON_UPDATE_COMMAND_UI
此宏指示哪个函数将处理用户界面更新命令消息。
ON_UPDATE_COMMAND_UI( messageId, memberFxn )
messageId
消息 ID。
memberFxn
消息映射到的消息处理程序函数的名称。
对于必须映射到消息处理程序函数的每个用户界面更新命令,消息映射中应正好有一个 ON_UPDATE_COMMAND_UI
宏语句。
有关详细信息和示例,请参阅消息处理和映射主题。
标头:afxole.h
ON_COMMAND_RANGE
使用此宏将一个连续的命令 ID 范围映射到单个消息处理程序函数。
ON_COMMAND_RANGE( id1, id2, memberFxn )
位于连续命令 ID 范围开头的命令 ID。
位于连续命令 ID 范围末尾的命令 ID。
memberFxn
命令映射到的消息处理程序函数的名称。
ID 的范围以 id1
开头,以 id2
结尾。
使用 ON_COMMAND_RANGE
将命令 ID 的范围映射到一个成员函数。 使用 ON_COMMAND
将单个命令映射到成员函数。 只有一个消息映射条目可以匹配给定的命令 ID。 也就是说,无法将一个命令映射到多个处理程序。 有关映射消息范围的详细信息,请参阅消息映射范围的处理程序。
没有对消息映射范围的自动支持,因此必须自行放置宏。
// The code fragment below shows how to use ON_COMMAND_RANGE macro
// to map a contiguous range of command IDs to a single message
// handler function (i.e. OnRangeCmds() in the sample below). In
// addition, it also shows how to use CheckMenuRadioItem() to check a
// selected menu item and makes it a radio item.
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
ON_COMMAND_RANGE(ID_COMMAND_RANGECMD1, ID_COMMAND_RANGECMD3, &CChildFrame::OnRangeCmds)
END_MESSAGE_MAP()
void CChildFrame::OnRangeCmds(UINT nID)
CMenu* mmenu = AfxGetMainWnd()->GetMenu();
CMenu* submenu = mmenu->GetSubMenu(5);
submenu->CheckMenuRadioItem(ID_COMMAND_RANGECMD1, ID_COMMAND_RANGECMD3,
nID, MF_BYCOMMAND);
标头:afxmsg_.h
ON_UPDATE_COMMAND_UI_RANGE
将连续的命令 ID 范围映射到单个更新消息处理程序函数。
ON_UPDATE_COMMAND_UI_RANGE( id1, id2, memberFxn )
位于连续命令 ID 范围开头的命令 ID。
位于连续命令 ID 范围末尾的命令 ID。
memberFxn
命令映射到的更新消息处理程序函数的名称。
更新消息处理程序可以更新与命令关联的菜单项和工具栏按钮的状态。 ID 的范围以 id1
开头,以 id2
结尾。
没有对消息映射范围的自动支持,因此必须自行放置宏。
标头:afxmsg_.h
ON_CONTROL_RANGE
使用此宏将连续的控件 ID 范围映射到指定的 Windows 通知消息的单个消息处理程序函数,例如 BN_CLICKED
。
ON_CONTROL_RANGE( wNotifyCode, id1, id2, memberFxn )
wNotifyCode
处理程序要响应的通知代码。
位于连续控件 ID 范围开头的命令 ID。
位于连续控件 ID 范围末尾的命令 ID。
memberFxn
控件映射到的消息处理程序函数的名称。
ID 的范围以 id1
开头,以 id2
结尾。 为来自任何映射控件的指定通知调用处理程序。
没有对消息映射范围的自动支持,因此必须自行放置宏。
有关为控件 ID 范围实现处理程序函数的详细信息,请参阅消息映射范围的处理程序。
标头:afxmsg_.h
ON_COMMAND
TN006:消息映射
COleCmdUI
类
COleServerDoc::OnExecOleCmd
RegisterWindowMessage
用户定义的处理程序
CCmdUI
类