如何让多个相同的控件相应鼠标消息?

weiwozhonghua 2006-04-07 11:30:11
1。在一个窗体中有10个picture控件,都有求相应鼠标单击消息,是不是要为每一个picture控件添加消息相应函数呢?能不能有简单的方法,让一个函数来处理这10个控件的鼠标单击消息?
2。在程序中动态创建的控件如何进行消息映射呢?
...全文
238 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2006-04-08
  • 打赏
  • 举报
回复
我觉得搂主的需求还是重载比较好,鼠标消息处理放在重载类中。
快乐鹦鹉 2006-04-07
  • 打赏
  • 举报
回复
动态创建的控件,和静态控件一样进行消息响应,不同的事静态控件你可以用wizard来自动添加,而动态创建的控件需要你手工增加消息映射。
快乐鹦鹉 2006-04-07
  • 打赏
  • 举报
回复
ON_COMMAND_RANGE
ON_COMMAND_RANGE( id1, id2, memberFxn )
响应ON_COMMAND_RANGE就可以了。memberFxn为共同的响应处理函数。最好这几个控件的ID号是连续的,id1表示最小的ID号,id2表示最大的ID号。在这两个号之间(包括这两个号)的控件都会响应这个事件。
快乐鹦鹉 2006-04-07
  • 打赏
  • 举报
回复
这是MSDN中的例子,自己稍微搜索一下就可以明白的事情。
Example

// The code fragment below shows how to use ON_COMMAND_RANGE macro
// to map a contiguous range of command IDs to a single message
// handler function (i.e. OnFileMenuItems() is the sample below). In
// addition, it also shows how to use CheckMenuRadioItem() to check a
// selected menu item and makes it a radio item.
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
// ...
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(ID_FILE_MENUITEM1, ID_FILE_MENUITEM3, OnFileMenuItems)
END_MESSAGE_MAP()

void CMainFrame::OnFileMenuItems(UINT nID)
{
CMenu* mmenu = GetMenu();
CMenu* submenu = mmenu->GetSubMenu(0);
submenu->CheckMenuRadioItem(ID_FILE_MENUITEM1, ID_FILE_MENUITEM3,
nID, MF_BYCOMMAND);
}

响应函数OnFileMenuItems中的参数即为触发事件的那个控件的ID号。
ytfitihc 2006-04-07
  • 打赏
  • 举报
回复
使用ON_COMMAND_RANGE
如何判定是哪个控件触发了消息呢????
wlwlxj 2006-04-07
  • 打赏
  • 举报
回复
ON_COMMAND_RANGE
lixiaosan 2006-04-07
  • 打赏
  • 举报
回复
选中这些picture控件的notify属性
并且这些控件的id是连续的,你可在resource.h中修改
//xxx.h
afx_msg void OnPictureClick(UINT nID);

//xxx.cpp
BEGIN_MESSAGE_MAP(CXXXDLG, CDialog)


ON_CONTROL_RANGE(BN_CLICK, IDC_PIC1, IDC_PIC10, OnPictureClick)


END_MESSAGE_MAP()

void CXXXDLG::OnPictureClick(UINT nID);
{
///根据id来判断点击的是哪个picture
}


2.关于动态创建的控件,你可以参考通过classwizard添加消息映射时添加的代码,动态创建就添加哪些代码

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧