多个CEdit能否共用一个消息响应函数? 我的对话框上有20个CEdit,操作相同,能否共用一个消息响应函数?否则密密麻麻的复制代码,好像很没技术。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 网上说:ON_CONTROL_RANGE(BN_CLICKED, IDC_FIRST, IDC_LAST, OnRadioClicked)不过我是编辑框,那么Edit Notification code 与 Edit Control Message 有什么区别和关系如 EN_SETFOCUS 与 EM_GETSEL 可以在消息映射里面,每个edit都要加一个消息映射的宏,不过处理函数是同一个就可以了 消息映射范围的处理程序Visual Studio .NET 2003本文解释如何将某个消息范围映射到单个消息处理函数(而不是将一条消息只映射到一个函数)。有时需要以相同的方法处理一条以上的消息或控件通知。这时可能希望将所有消息映射到一个处理函数。可以使用消息映射范围为连续范围的消息进行这种处理: 可以将命令 ID 范围映射到: 一个命令处理函数。一个命令更新处理函数。可以将某个控件 ID 范围的控件通知消息映射到一个消息处理函数。本文涉及的主题包括: 编写消息映射项声明处理函数命令 ID 范围示例控件 ID 范围示例编写消息映射项在 .CPP 文件中添加消息映射项,如下例所示:复制...BEGIN_MESSAGE_MAP(CMyApp, CWinApp) ...ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, OnDoSomething)END_MESSAGE_MAP( )...消息映射项包括下列几项: 消息映射范围宏: ON_COMMAND_RANGEON_UPDATE_COMMAND_UI_RANGEON_CONTROL_RANGE该宏的参数: 前两个宏采用三个参数: 范围起始的命令 ID范围结束的命令 ID消息处理函数名命令 ID 的范围必须是连续的。 第三个宏 ON_CONTROL_RANGE 采用额外的第一个参数:控件通知消息,例如 EN_CHANGE。 声明处理函数在 .H 文件中添加处理函数声明。下列代码显示如何声明,见下例的倒数第二行所示:复制// Generated message-map functionsprotected: ... afx_msg void OnDoSomething( UINT nID ); DECLARE_MESSAGE_MAP()通常单个命令的处理函数不采用任何参数。除了更新处理函数外,消息映射范围处理函数需要一个 UINT 类型的额外参数 nID。该参数是第一个参数。此额外的参数提供一个额外的命令 ID,用于指定用户实际选择的命令。有关更新处理函数的参数要求的更多信息,请参见命令 ID 范围示例。命令 ID 范围示例何时可以使用范围?一个示例是在 MFC 示例 HIERSVR 中处理“缩放”这样的命令时。该命令在视图正常大小的 25% 和 300% 之间进行缩放。HIERSVR 的视图类使用一个范围,通过类似于下面这样的消息映射项来处理“缩放”命令:复制ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, OnZoom)当编写消息映射项时,指定: 两个命令 ID,用于开始和结束一个连续范围。 此处,这两个命令 ID 是 ID_VIEW_ZOOM25 和 ID_VIEW_ZOOM300。 命令的处理函数名。 此处,该处理函数名是 OnZoom。 函数声明类似于:复制afx_msg void OnZoom(UINT nID);更新处理函数的情况与此类似,并可能具有更广泛的用途。编写若干命令的 ON_UPDATE_COMMAND_UI 处理程序并发现自己正在反复编写或复制相同的代码,这种情况相当普遍。解决方案是使用 ON_UPDATE_COMMAND_UI_RANGE 宏将一个命令 ID 的范围映射到一个更新处理函数。该命令 ID 必须构成一个连续的范围。有关示例,请参见 HIERSVR 示例的视图类的 OnUpdateZoom 处理程序及其 ON_UPDATE_COMMAND_UI_RANGE 消息映射项。通常,单个命令的更新处理函数采用 CCmdUI* 类型的单个参数 pCmdUI。与处理函数不同,消息映射范围的更新处理函数不需要 UINT 类型的额外参数 nID。指定用户实际选择的命令所需的命令 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 CMyDialog::OnButtonClicked( UINT nID ){ int nButton = nID - IDC_BUTTON1; ASSERT( nButton >= 0 && nButton < 10 ); // ...}单个 BN_CLICKED 消息的 OnButtonClicked 处理函数不采用参数。一个范围的按钮的同一个处理函数采用一个 UINT 参数。这个额外的参数可以标识负责生成 BN_CLICKED 消息的特定控件。示例中显示了典型的代码:将传递的值转换为消息范围内的 int 并断言确实是这样。然后您可以根据所单击的按钮执行某个不同的操作。请参见声明消息处理函数 去这里好好学习学习ms的msg routing吧http://msdn.microsoft.com/zh-cn/library/cc485672(v=VS.71).aspx CListCtrl如何改变行高 安装VC++6.0后,新建的projects里面没有MFC选项? vc 下 activex 开发问题 Window API 编程求助 刚刚学VC++,老师布置作业,写个小程序,实现多边形的移动 有谁能给我解释一下PING程序中的检验和算法吗?我有点看不懂! 问一个比较简单的问题 求高手把下面短短几条用VB写的ocx控件初始化语句翻译成VC语言 谢谢了 关闭程序 小鸟问~~~ 求助,项目经验都指什么!??要找工作了 ☆☆☆菜鸟请教:一个按钮美化派生类为何不生效?☆☆☆
ON_CONTROL_RANGE(BN_CLICKED, IDC_FIRST, IDC_LAST, OnRadioClicked)不过我是编辑框,那么Edit Notification code 与 Edit Control Message 有什么区别和关系如 EN_SETFOCUS 与 EM_GETSEL
在消息映射里面,每个edit都要加一个消息映射的宏,不过处理函数是同一个就可以了
Visual Studio .NET 2003本文解释如何将某个消息范围映射到单个消息处理函数(而不是将一条消息只映射到一个函数)。有时需要以相同的方法处理一条以上的消息或控件通知。这时可能希望将所有消息映射到一个处理函数。可以使用消息映射范围为连续范围的消息进行这种处理: 可以将命令 ID 范围映射到:
一个命令处理函数。
一个命令更新处理函数。
可以将某个控件 ID 范围的控件通知消息映射到一个消息处理函数。
本文涉及的主题包括: 编写消息映射项
声明处理函数
命令 ID 范围示例
控件 ID 范围示例
编写消息映射项
在 .CPP 文件中添加消息映射项,如下例所示:复制...
BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
...
ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, OnDoSomething)
END_MESSAGE_MAP( )
...
消息映射项包括下列几项: 消息映射范围宏:
ON_COMMAND_RANGE
ON_UPDATE_COMMAND_UI_RANGE
ON_CONTROL_RANGE
该宏的参数:
前两个宏采用三个参数: 范围起始的命令 ID
范围结束的命令 ID
消息处理函数名
命令 ID 的范围必须是连续的。 第三个宏 ON_CONTROL_RANGE 采用额外的第一个参数:控件通知消息,例如 EN_CHANGE。 声明处理函数
在 .H 文件中添加处理函数声明。下列代码显示如何声明,见下例的倒数第二行所示:复制// Generated message-map functions
protected:
...
afx_msg void OnDoSomething( UINT nID );
DECLARE_MESSAGE_MAP()
通常单个命令的处理函数不采用任何参数。除了更新处理函数外,消息映射范围处理函数需要一个 UINT 类型的额外参数 nID。该参数是第一个参数。此额外的参数提供一个额外的命令 ID,用于指定用户实际选择的命令。有关更新处理函数的参数要求的更多信息,请参见命令 ID 范围示例。命令 ID 范围示例
何时可以使用范围?一个示例是在 MFC 示例 HIERSVR 中处理“缩放”这样的命令时。该命令在视图正常大小的 25% 和 300% 之间进行缩放。HIERSVR 的视图类使用一个范围,通过类似于下面这样的消息映射项来处理“缩放”命令:复制ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, OnZoom)
当编写消息映射项时,指定: 两个命令 ID,用于开始和结束一个连续范围。
此处,这两个命令 ID 是 ID_VIEW_ZOOM25 和 ID_VIEW_ZOOM300。 命令的处理函数名。
此处,该处理函数名是 OnZoom。 函数声明类似于:复制afx_msg void OnZoom(UINT nID);
更新处理函数的情况与此类似,并可能具有更广泛的用途。编写若干命令的 ON_UPDATE_COMMAND_UI 处理程序并发现自己正在反复编写或复制相同的代码,这种情况相当普遍。解决方案是使用 ON_UPDATE_COMMAND_UI_RANGE 宏将一个命令 ID 的范围映射到一个更新处理函数。该命令 ID 必须构成一个连续的范围。有关示例,请参见 HIERSVR 示例的视图类的 OnUpdateZoom 处理程序及其 ON_UPDATE_COMMAND_UI_RANGE 消息映射项。通常,单个命令的更新处理函数采用 CCmdUI* 类型的单个参数 pCmdUI。与处理函数不同,消息映射范围的更新处理函数不需要 UINT 类型的额外参数 nID。指定用户实际选择的命令所需的命令 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 CMyDialog::OnButtonClicked( UINT nID )
{
int nButton = nID - IDC_BUTTON1;
ASSERT( nButton >= 0 && nButton < 10 );
// ...
}
单个 BN_CLICKED 消息的 OnButtonClicked 处理函数不采用参数。一个范围的按钮的同一个处理函数采用一个 UINT 参数。这个额外的参数可以标识负责生成 BN_CLICKED 消息的特定控件。示例中显示了典型的代码:将传递的值转换为消息范围内的 int 并断言确实是这样。然后您可以根据所单击的按钮执行某个不同的操作。请参见
声明消息处理函数
http://msdn.microsoft.com/zh-cn/library/cc485672(v=VS.71).aspx