本文说明映射范围消息添加到一条消息处理程序 (函数代替为仅一的函数映射。消息)。
当需要相同时,处理多个消息或控件通知有时间。 在此时间,您可能希望映射任何消息到单个处理程序函数。 消息映射范围允许这样做一连续范围的消息:
可以映射范围命令 ID:
命令处理程序函数。
命令更新处理程序函数。
可以映射范围的控件通知消息控件 ID 到消息处理函数。
本文涵盖的主题包括:
编写消息映射项
声明处理程序函数
范围的示例命令 ID
范围的示例控件 ID
编写消息映射项
如下面的示例所示在 .cpp 文件,添加消息映射项,例如:
ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)
消息映射项包括以下项:
消息映射范围宏:
至宏的参数:
前两宏采用三个参数:
开始范围的命令 ID
结束范围的命令 ID
消息处理程序函数的名称
范围命令 ID 必须连续的。
第三,宏 ON_CONTROL_RANGE,它采用一个第一个参数:一控件通知消息,例如 EN_CHANGE。
声明处理程序函数
将处理程序的函数声明。H 文件。 下面的代码演示这可能如何查找,如下所示:
public:
afx_msg void OnDoSomething(UINT nID);
单个命令的处理程序函数通常不采用参数。 除了更新处理程序函数以外,消息映射范围的处理程序函数需要一个额外的参数,即 nID,UINT类型。 此参数是第一个参数。 额外的参数满足需要额外的命令 ID 指定命令用户实际上并选择。
有关更新处理程序函数的参数要求的更多信息,请参见 范围的示例命令 ID。
范围的示例命令 ID
何时可以使用范围? 一个示例在类似的命令处理缩放在 MFC 示例 HIERSVR。 此命令缩放视图时,缩放将在 25% 和 300% 之间。为其正常大小 HIERSVR 的视图类使用值域处理类似的消息映射项的缩放命令:
ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)
当您写入消息映射项时,指定:
两个命令 ID、开始和结束连续的范围。
下面是这些 ID_VIEW_ZOOM25 和 ID_VIEW_ZOOM300。
命令的处理程序函数的名称。
下面是其 OnZoom。
函数声明将类似于:
public:
afx_msg void OnZoom(UINT nID);
用例更新处理程序函数的 flavor 和可能很有用。 相当常见的写许多命令的 ON_UPDATE_COMMAND_UI 处理程序并发现自己文本,或者复制,反复相同的代码。 解决方案会映射范围命令 ID 对更新处理程序函数使用 ON_UPDATE_COMMAND_UI_RANGE 宏。 命令 ID 必须构成一连续的范围。 有关示例,请参见 OnUpdateZoom 处理程序及其 ON_UPDATE_COMMAND_UI_RANGE 消息映射项在 HIERSVR 示例中视图类。
更新单个命令的处理程序函数通常采用单个参数,pCmdUI,**CCmdUI***类型。 与不同处理程序函数,更新消息映射范围的处理程序函数不需要一个额外的参数,即 nID,UINT类型。 命令 ID,需要的指定命令用户实际上并选择,在 CCmdUI 对象中。
示例控件 ID的例子
另一个有趣大小写映射范围的控件通知消息控件 ID。一个处理程序。 假设用户可单击按钮 10 中的)。 所有映射到 10 个按钮一个处理程序,如下所示:消息映射项:
ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)
在中编写消息映射中,ON_CONTROL_RANGE 宏指定:
特定控件通知消息。
此处的为 BN_CLICKED。
控件 ID 值与相邻范围的控件。
它们是 IDC_BUTTON1 和 IDC_BUTTON10。
消息处理程序函数的名称。
下面是其 OnButtonClicked。
当您编写处理程序函数,如下面的所示,请指定附加的 UINT 参数,例如:
void CRangesView::OnButtonClicked( UINT nID )
{
int nButton = nID - IDC_BUTTON1;
ASSERT( nButton >= 0 && nButton < 10 );
// ...
}
单个 BN_CLICKED 消息的 OnButtonClicked 处理程序未采用任何参数。 范围内的同一按钮处理程序接受一个 UINT。 额外的参数允许标识特定控件负责生成 BN_CLICKED 消息。
示例中显示的代码是典型的:转换值传递给。消息大小和断言内的 int 是这样。 然后可以采取按钮单击的一些附加操作。