- 浏览: 52642 次
- 性别:
- 来自: 湖南
最新评论
ON_COMMAND不同的是,此宏可用来定义一组消息的处理函数。
两个宏的用法是:
ON_COMMAND(id,memberFxn)
ON_COMMAND_RANGE(id1,id2,memberFxn)
看起来其中memberFxn似乎没有什么差别,但是在学习使用中,发现ON_COMMAND_RANGE宏中的memberFxn常常会被定义成带参数的处理函数,而ON_COMMAND则是不带参数的处理函数。这就让我奇怪了,于是查阅MSDN的解释,循着提供的线索一直查到了《Visual C++ Programmer’s Guide》中的《Handlers for Message-Map Ranges》一章,于是在《Declaring the Handler Function》一节中找到了答案,引用原文如下:
Handler functions for single commands normally take no parameters. With the exception of update handler functions, handler functions for message-map ranges require an extra parameter, nID, of type UINT. This parameter is the first parameter. The extra parameter accommodates the extra command ID needed to specify which command the user actually chose.
为了帮助和我一样不太懂英文的朋友,顶着头皮翻译了下:
单个命令(消息)的处理函数通常不带参数。但是更新处理函数、针对消息映射范围的处理函数需要一个额外的参数,一个UINT类型的nID。此参数是第一个参数,这个额外的参数收集了用来指定用户真正选择命令的命令ID。
对于更新处理函数,也存在相对应于ON_COMMAND_RANGE的ON_UPDATE_COMMAND_UI_RANGE宏,它的作用也是处理连续的范围(contiguous range),但是它与ON_COMMAND_RANGE有一点点区别。通过上面可知,一般范围处理函数(ON_COMMAND_RANGE)是通过在处理函数后面加一个参数,当消息进行处理时,将会把该命令ID传至该参数。而ON_UPDATE_COMMAND_UI_RANGE则使用的是pCmdUI,一个CCmdUI的指针类型,它内部就包含了一个数据成员(m_nID),用来指向命令ID,具体请参考MSDN中的内容。上述内容在MSDN中的《Visual C++ Programmer’s Guide》中的《Handlers for Message-Map Ranges》一章《Example for a Range of Command IDs》一节中可以找到原文:
Update handler functions for single commands normally take a single parameter, pCmdUI, of type CCmdUI*. Unlike handler functions, update handler functions for message-map ranges do not require an extra parameter, nID, of type UINT. The command ID, which is needed to specify which command the user actually chose, is found in the CCmdUI object.
单个命令的更新处理函数通常只带一个参数,即一个CCmdUI指针类型的pCmdUI。不像普通的处理函数一样,针对消息映射范围的更新处理函数不需要一个额外的UINT参数nID,这个用来指定用户真正选择的命令ID,能够在CCmdUI对象中找到。
发表评论
-
项目开发日志杂记
2009-05-04 13:05 967开发日志 0:32 2008-9-18 1、中文 ... -
笔记本维护故障一则
2007-03-18 23:40 709唉呀,今天真的是羞死 ... -
多Web服务器的80端口访问
2007-03-23 11:42 1469写这篇文章,源自于自己的一个需求。这几天一校园WEB站点因为域 ... -
[转]Windows系统文件详细解说
2007-04-02 23:38 626详细的介绍了WINDOWS系统文件的用途,我想各位保存一份以后 ... -
关于Windows文件共享服务的一些问题
2007-04-02 23:44 2516[问题引出]:我刚安装windows2003时,Compute ... -
MS Project 2003的一个问题
2007-04-03 18:04 1049[问题引出]:刚装完MS Project 2003,一运行就出 ... -
IBM xSeries服务器安装内存一则
2007-04-04 00:55 820部门进购IBM xSeries 225服务器已经达三年之久了, ... -
JAVA与蓝牙起步(Getting Started with Java and Bluetooth)
2007-04-26 00:39 1510栈初始化在你做任何事之前,你需要初始化你的栈。记住,栈是一个用 ... -
Windows 2000下的远程桌面工具
2007-04-28 18:10 1034在Windows XP之后的系统中都会在“系统”属性中可以设置 ... -
最近在看的书
2007-06-25 03:17 6531、JSP网络开发技术与整合应用 ... -
想看的书---<<开发自己的搜索引擎---Lucene 2.0 + Heritrix>>
2007-06-26 21:47 1730开发自己的搜索引擎---Lucene 2.0 + Heritr ... -
数据挖掘相关
2007-06-27 08:43 754什么是规则?就是一个条件和一个结果的和:If con ... -
不要用浏览器来测试
2007-07-03 11:02 920进行B/S系统编程,大概浏览器就是最直接的测试程序是否正确的方 ... -
Big-Endian And Little-Endian
2007-07-07 11:32 876今天老师给我们复习单片机,出了一个题目,就这个字节存储顺序搞得 ... -
MySQL的中文问题
2007-07-08 21:12 721唉,看到网上这么多的关于MySQL中文编码的问题。今天自己碰到 ... -
[转]RAW FileSystem Recovery
2007-07-11 09:09 993To know ho ... -
关于人工神经网络中的M-P模型的一点疑问
2007-08-08 22:31 935人工神经网络M-P模型构成一个逻辑非模型,从书中抄下来的,如下 ... -
JOONE(Java Object-Oriented Network Engine)使用初探
2007-09-30 16:03 12701 /**/ ... -
OpenGL in VC++
2008-01-19 00:30 1004首先看一个简单的例子: 1 #include <wind ... -
[转] 软件企业以人为本的16项措施
2008-05-25 09:19 726软件企业以人为本的16项措施 ...
相关推荐
使用ON_COMMAND_RANGE绑定控件事件 封装了三种创建控件 CreateDynControl(CTRLT_BUTTON,"我是按钮",10,20,100,40,NULL); CreateDynControl(CTRL_STATIC,"我是静态文本",150,20,100,45,NULL); CreateDynControl...
使用`ON_COMMAND_RANGE`宏,你可以指定开始ID和结束ID,以及对应的处理函数。例如: ```cpp BEGIN_MESSAGE_MAP(CMyDialog, CDialog) ON_COMMAND_RANGE(IDC_CMD_START, IDC_CMD_END, OnCmdRange) END_MESSAGE_...
在实现文件`.cpp`中,用`BEGIN_MESSAGE_MAP`、`ON_COMMAND`等宏实际定义消息映射,如`ON_COMMAND(ID_APP_ABOUT, OnAppAbout)`映射`ID_APP_ABOUT`命令到`OnAppAbout`函数,最后以`END_MESSAGE_MAP`结束映射。...
* 使用 ON_COMMAND_RANGE 宏定义命令范围的处理函数。 更新菜单项 ------------ MFC 中可以使用多种方式更新菜单项,包括: * 使用 CMenu::CheckMenuItem 函数更新菜单项的状态。 * 使用 ON_WM_INITMENUPOPUP ...
为了响应用户的菜单选择,你需要在消息映射(message map)中定义ON_COMMAND或ON_COMMAND_RANGE宏,然后实现相应的成员函数来处理WM_COMMAND消息。 例如,如果你有一个菜单项ID_FILE_OPEN,你可能会在消息映射中...
在对应的CWinApp或CFrameWnd派生类中,通过`ON_COMMAND`或`ON_COMMAND_RANGE`宏定义消息映射,以便处理菜单项的点击事件。 6. **更新菜单状态**:根据程序的状态,你可能需要禁用某些菜单项或改变它们的外观。可以...
在MFC中,这是通过在`.h`文件的`ON_COMMAND_RANGE`或`ON_COMMAND`宏中定义映射规则完成的。 5. **动态删除菜单项**: 当不再需要某个菜单项时,可以调用`CMenu::RemoveMenu`删除它。这可能发生在用户关闭某个功能或...
在类的头文件中,添加ON_COMMAND_RANGE宏来处理一系列ID范围内的菜单项。例如,如果你的菜单项ID从ID_FILE_FIRST开始,你可以这样写: ```cpp BEGIN_MESSAGE_MAP(CMyView, CView) ON_COMMAND_RANGE(ID_FILE_FIRST,...
6. **消息映射与处理函数**:使用Class Wizard添加菜单和工具条命令的`ON_COMMAND`和`ON_COMMAND_UI`消息映射,手工添加菜单子项的`ON_COMMAND_RANGE`和`ON_COMMAND_UI_RANGE`消息映射。例如,`OnButtonBlue()`函数...
在上述代码中,`ON_COMMAND_RANGE` 指定了一组命令ID的范围,所有这些命令ID的消息都将被CMyShape的OnCommand方法处理。未被CMyShape处理的消息会被传递给基类CView,以保持原有的消息处理逻辑。 对于打印功能,...
有时候,我们可能希望将多个控件的相同消息映射到同一个处理函数,这时可以使用ON_CONTROL_RANGE宏。这个宏允许指定一个消息码和一组连续的控件ID范围,以及处理函数名。ClassWizard不直接支持ON_CONTROL_RANGE,但...
为此,你需要覆盖 `OnCommand` 或 `ON_COMMAND_RANGE` 宏来处理特定的命令ID。 ```cpp void MyDialog::OnFileOpen() { // 处理打开文件的逻辑 } // 使用 ON_COMMAND_RANGE 可以处理一系列连续的命令ID BEGIN_...
同时,通过响应菜单项的命令消息,如ON_COMMAND_RANGE,可以执行相应的操作,如添加、删除或编辑节点。 在实际开发中,数据通常不直接绑定到树的节点上,而是通过自定义数据结构存储,然后用`SetItemData(HTREEITEM...
为了让菜单项能够响应用户的点击,需要在消息映射(Message Map)中定义消息处理函数,并使用`ON_COMMAND`或`ON_COMMAND_RANGE`宏将菜单项的ID与处理函数关联起来。例如: ```cpp BEGIN_MESSAGE_MAP(MyClass, ...
在`ON_COMMAND_RANGE`或`ON_UPDATE_COMMAND_UI`宏中添加对应菜单ID的映射,然后在对应的成员函数中实现具体操作。 5. **更新UI**:当状态改变需要更新菜单时,例如禁用或启用某个菜单项,可以使用`OnUpdateCmdUI()`...
例如,添加 ON_COMMAND_RANGE宏以处理特定范围的命令ID。 5. **实现功能**:最后,你需要在对应的类中实现与Ribbon元素关联的成员函数,完成实际的功能逻辑。 在提供的"Draw2008"项目中,我们可以看到一个简单的...
// IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX ); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { ...
这通常通过`ON_COMMAND_RANGE`宏实现,例如: ```cpp BEGIN_MESSAGE_MAP(CMyDialog, CDialog) ON_COMMAND_RANGE(IDC_TOOLBAR_BUTTON1, IDC_TOOLBAR_BUTTON5, OnToolbarButton) END_MESSAGE_MAP() ``` 3. **实现...
例如,可以使用ON_COMMAND_RANGE宏定义一系列命令ID,然后在函数中根据实际发送的命令ID执行相应的操作。 6. 保持同步:当用户在Tab之间切换时,确保当前显示的ToolBar与选中的Tab页匹配。这可能需要在每次切换Tab...
可以重载"OnToolbarButton"函数来处理工具栏按钮的点击,而下拉列表的选择通常通过消息映射机制来处理,例如`ON_COMMAND_RANGE`或`ON_UPDATE_COMMAND_UI_RANGE`。 5. **扩展其他控件**: 如果需要在下拉列表中添加...