1. 菜单项被击中的消息:
1) 一般关于菜单项产生最平凡的几个消息莫过于WM_INITMENU、WM_INITMENUPOPUP、WM_MENUSELECT这三个消息;
2) WM_INITMENU在顶层菜单项被击中时产生,通知应用程序用户已击中一个顶层菜单项,要做好准备了;
3) WM_INITMENUPOPUP消息会在顶层菜单项被击中后、子菜单被下拉之前产生,你可能会问了,直接在处理WM_INITMENU时下来菜单不就行了,为啥还有等这么一个消息呢?因为可以在这个消息的处理中更新菜单栏UI界面的状态,比如用户将工具栏显示了出来,此时就可以在新弹出的子菜单的“工具栏”选项旁边的复选框中填上一个勾;
4) WM_SELECTMENU会在子菜单选中加亮条上下移动时产生,用以报告加亮条的最新位置;
2. 菜单命令的消息映射:
1) 用户最关心的往往是菜单项的WM_COMMAND命令,即某个能产生应用程序命令的菜单项被击中后产生的命令;
2) 这种消息的参数wParam的低字位保留了该菜单项的命令ID,用户可以根据该ID将此类消息准确地映射到相应的消息响应函数中去;
3) 消息映射条目:条目名为ON_COMMAND,后面两个参数和一般消息条目不太一样,一般条目的第一个参数是消息ID,第二个参数是映射的消息响应函数名,如果消息ID以及响应函数都是MFC事先定义好的,则宏参数不写,但不过ON_COMMAND的映射是以命令ID为基准的,因此第一个参数是命令ID,第二个参数不变,仍然是响应函数名,例如:
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
!命令处理函数的名称用户可以随意去,不像其他WM_消息,消息ID和响应函数名都是MFC预定义好的,程序员不能改变,想改变除非修改MFC源码,而命令相应则不一样,首先命令ID是可以用户随意取的,因此MFC对命令响应函数的名称也不作要求,可以随意取,比如:
ON_COMMAND(ID_FILE_NEW, CreateNewFile)
4) 响应函数原型无参无返回值:afx_msg void OnFileExit();