ON_COMMAND_RANGE是什么消息
时间: 2023-05-18 12:05:57 浏览: 112
ON_COMMAND_RANGE 是 MFC 框架中的消息之一,用于处理一组连续的命令。当用户在菜单或工具栏上选择一组连续的命令时,ON_COMMAND_RANGE 消息会被发送到应用程序的消息队列中,以便应用程序可以处理这些命令。
相关问题
ON_COMMAND_RANGE用法
ON_COMMAND_RANGE 是 MFC 中的一个宏定义,用于处理一组连续的菜单命令。它的语法如下:
```cpp
ON_COMMAND_RANGE(idFirst, idLast, memberFxn)
```
其中,idFirst 和 idLast 是一组连续的菜单命令的 ID 范围,memberFxn 是一个消息映射函数的名称。当用户选择了该范围内的菜单命令时,将自动调用 memberFxn 函数。该函数的原型如下:
```cpp
afx_msg void memberFxn(UINT nID)
```
其中,nID 是用户选择的菜单命令的 ID。
使用 ON_COMMAND_RANGE 宏可以方便地处理多个菜单命令的消息,避免编写大量的消息映射函数。举个例子,如果我们有一组菜单命令 ID 分别为 ID_FILE_NEW、ID_FILE_OPEN、ID_FILE_SAVE,我们可以这样处理它们的消息:
```cpp
BEGIN_MESSAGE_MAP(CMyWnd, CFrameWnd)
ON_COMMAND_RANGE(ID_FILE_NEW, ID_FILE_SAVE, OnFileCommand)
END_MESSAGE_MAP()
void CMyWnd::OnFileCommand(UINT nID)
{
switch (nID)
{
case ID_FILE_NEW:
// 处理新建文件命令
break;
case ID_FILE_OPEN:
// 处理打开文件命令
break;
case ID_FILE_SAVE:
// 处理保存文件命令
break;
default:
// 处理未知命令
break;
}
}
```
这里,我们将 ID_FILE_NEW、ID_FILE_OPEN、ID_FILE_SAVE 三个菜单命令的处理都交给了 OnFileCommand 函数来处理,根据传入的菜单命令 ID 来区分不同的命令并进行相应的处理。
ON_COMMAND_RANGE报错
ON_COMMAND_RANGE 是一个 MFC 消息映射宏,用于处理一系列命令 ID 之间的消息。如果你在使用该宏时出现了错误,可能有以下几种情况:
1. 未正确定义消息处理函数:使用 ON_COMMAND_RANGE 宏时,必须在类声明中定义一个函数来处理这个命令范围内的消息。例如:
```
class CMyWnd : public CWnd
{
public:
afx_msg void OnRangeCmd(UINT nID);
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
ON_COMMAND_RANGE(ID_CMD_FIRST, ID_CMD_LAST, OnRangeCmd)
END_MESSAGE_MAP()
```
2. 命令范围错误:使用 ON_COMMAND_RANGE 宏时,必须指定一系列连续的命令 ID。如果命令 ID 不是连续的,就会出现错误。例如:
```
// 正确的用法
ON_COMMAND_RANGE(ID_CMD_FIRST, ID_CMD_LAST, OnRangeCmd)
// 错误的用法
ON_COMMAND_RANGE(ID_CMD_FIRST, ID_CMD_MIDDLE, OnRangeCmd)
```
3. 命令处理函数参数错误:使用 ON_COMMAND_RANGE 宏时,命令处理函数必须只有一个 UINT 类型的参数,表示命令 ID。如果命令处理函数的参数类型错误,就会出现错误。例如:
```
// 正确的用法
afx_msg void OnRangeCmd(UINT nID);
// 错误的用法
afx_msg void OnRangeCmd();
afx_msg void OnRangeCmd(UINT nID, int nValue);
```
希望这些信息能够帮助你解决问题。
阅读全文