标准的menu或者button消息映射句柄类似于下面这种形式:
ON_COMMAND(ID_MYCOMMAND, OnMyCommand)
但是如果你是动态创建的button/menu项,你可能在编译时无法知道命令ID(COMMAND ID).,它可能被存储在一个数据成员里,类似于CSqueegie::m_nMeMyMineID。怎么办呢?
很简单:用ON_COMMAND_EX_ RANGE表示不受限制的范围。
ON_COMMAND_EX_RANGE(0, 0xFFFF, OnAnyCommand)
现在MFC发送0-0xFFFF内的任何命令(这指的是所有命令你都可以处理),你的程序可以在运行时检测指定的ID。
BOOL CSqueegie::OnAnyCommand(UINT nID)
{
if (nID == m_nMeMyMineID) {
// do the command
return TRUE; // handled
}
return FALSE;
}
对于ON_COMMAND,你的控制函数有一个参数和void返回。但是对于ON_COMMAND_ EX_RANGE,如果你取得命令,你的控制函数得到命令ID并且必须返回TRUE,否则的话返回FALSE。如果你返回FALSE,MFC将继续发送命令以便其他的对象能取得。