MFC中添加动态按钮的响应函数

.在MESSAGE_MAP中添加响应函数:

  MESSAGE_MAP表中定义了消息响应函数,其格式为:消息名(ID,函数名),当我们用ClassWizard添加函数时,会自动添加在AFX_MSG_MAP括起的区间内,如:

  BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)

  //{{AFX_MSG_MAP(CTextEditorView)

  ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)

  //}}AFX_MSG_MAP

  END_MESSAGE_MAP()

  手工添加时不要添加到AFX_MSG_MAP区间内,以防ClassWizard不能正常工作,如:

  BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)

  //{{AFX_MSG_MAP(CTextEditorView)

  ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0)

  //}}AFX_MSG_MAP

  ON_BN_CLICKED(ID_MYBUT1, OnMybut1)

  ON_BN_CLICKED(ID_MYBUT2, OnMybut2)

  ON_BN_CLICKED(ID_MYBUT3, OnMybut3)

  END_MESSAGE_MAP()

  其中ON_BN_CLICKED是按钮单击消息。
看不懂啊,MESSAGE_MAP()是什么,在哪个MESSAGE_MAP()中添加?我添加了无法编译

首先说明一下:
BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)和END_MESSAGE_MAP()之间是VC编译器在编译程序时候,查找消息与函数的映射关系的地方,比如编译这个文件,当编译器在这个之间发现语句ON_BN_CLICKED(IDC_ICONBUT0, OnIconbut0),时,就会把消息ON_BN_CLICKED,IDC_ICONBUT0,OnIconbut0三者关联起来,使得程序运行的时候,点击ID为IDC_ICONBUT0后产生ON_BN_CLICKED消息,同时OnIconbut0函数被调用。对于一个窗口,除了我们通过手动添加或通过向导添加的消息映射之外,还有很多消息需要进行映射;比如这个例子,当鼠标从窗口上移动时,系统会向窗口发送鼠标移动消息,可是你在这里并没有处理,那谁来映射并处理这些消息,因为编译器在这里没有找到鼠标移动的消息映射,它就会从这个类的父类逐曾往上找,直到找到为止,而BEGIN_MESSAGE_MAP(CTextEditorView, CFormView)就是告诉编译器,如果在这里找不到消息映射,就从这个类的父类CFormView开始往上查找。比如鼠标移动消息,在这里并没有做映射处理,编译器就会到父类CFormView中去查找,如果父类CFormView中也没有,编译器就会不断的往上找,直到找到CWnd类,CWnd类映射了所有的窗口消息。
对于不熟悉如何添加消息映射的朋友,最好用向导添加。对于手动添加消息映射,除了在这里添加消息映射之外,还要定义消息函数。

你是怎样添加的,怎么个无法编译,编译错误是什么?
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-08-31
  为创建的BUTTON手动添加响应函数,步骤如下:
  1.打开Resource Symbols,为这个BUTTON新建一个唯一的ID(例如IDC_MYBUTTON 101)并指定相应的值,当然,也可以把那些后面没有打勾(即未使用)的值。
  2.在**Dlg.h的AFX_MSG{................}AFX_MSG之间加入afx_msg void OnMyButton();
  (在此,假设要添加的消息响应函数为 void OnMyButton())
  3. 在**Dlg.cpp的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间加入ON_BN_CLICKED
  (IDC_MYBUTTON, OnMyButton)
  4.在**Dlg.cpp中添加成员函数void **Dlg::OnMyButton(){......................}本回答被网友采纳
第2个回答  2012-06-04
干啥呀,弄一大堆
不就是动态按钮的响应吗,就3个步骤很好记啊:
【1】.在头文件声明响应函数,比如:在mydlg.h添加void onButton();
【2】.在 //{{AFX_MSG_MAP
//}}AFX_MSG_MAP
内添加关联:,比如。在mydlg.cpp添加ON_COMMAND(IDC_BUTTON,onButton)
【3】.在cpp中实现响应函数的主体
比如:在mydlg.cpp中添加
void Cmydlg::onButton()
{
...
}本回答被提问者采纳

MFC中添加动态按钮的响应函数
1.打开Resource Symbols,为这个BUTTON新建一个唯一的ID(例如IDC_MYBUTTON 101)并指定相应的值,当然,也可以把那些后面没有打勾(即未使用)的值。 2.在**Dlg.h的AFX_MSG{...}AFX_MSG之间加入afx_msg void OnMyButton(); (在此,假设要添加的消息响应函数为 void OnMyButton()) 3. 在**Dlg.cpp的BEGIN_...

MFC动态创建的按钮怎么添加双击响应??双击!!!
mfc对于非自绘按钮不响应双击事件的,虽然可以通过向导添加也没用。要处理双击有两个方法:1、自绘按钮,处理事件,比较麻烦 2、重写父窗口的PreTranslateMessage(MSG* pMsg)截获双击事件,if(pMsg->message==WM_LBUTTONDBCLK){ int nBtnID = GetWindowLong(pMsg->hWnd,GWL_ID);if(nBtnID >= IDC...

求高手,我想开发一个MFC程序,需求是动态改变一个BUTTON的CAPTION...
为你的BUTTON添加变量m_button,然后把m_button.SetWindowText(_T("你想要显示的字符"));放在你的click程序中。

MFC中菜单响应函数如何创建?
MFC基于对话框——右键弹出菜单,并响应函数。\\x0d\\x0a 1、新建一个菜单资源,比如把菜单的ID号为IDR_MENU1。\\x0d\\x0a\\x0d\\x0a 2、在ClassWizard中\\x0d\\x0a\\x0d\\x0a void CArcSoft_EffectDlg::OnRButtonDown(UINT nFlags, CPoint point)\\x0d\\x0a\\x0d\\x0a {\/\/ TODO: Add your message ...

怎么样在MFC中创建动态控件
动态控件的响应函数不能直接用ClassWizard添加,只能手动添加。仍以上方的按钮为例,我们建造按钮的单击响应函数。1.在MESSAGE_MAP中添加响应函数:MESSAGE_MAP表中定义了消息响应函数,其格局为:消息名(ID,函数名),当我们用ClassWizard添加函数时,会主动添加在AFX_MSG_MAP括起的区间内,如:[cpp] ...

如何在MFC的单文档中添加按钮?
m_MyButton.ShowWindow(SW_HIDE);return 0;} 第二步:消息函数 此时的按钮是不能响应任何消息的。下面我们手动添加按钮的消息。1、声明函数原型 在C**View类的声明中声明一个protected类型的函数 \/\/{{AFX_MSG(CSoftView)afx_msg void OnMyButton();\/\/}}AFX_MSG 通常的做法,也是VC6.0向导的...

如何在MFC界面开发中响应Button按钮的Down和Up事件
实现原理也挺简单,在消息调度函数PreTranslateMessage函数中拦截Button按钮的句柄,之后在对应大括号内调用相关功能块即可。核心源码如下:…… ……BOOL CTestButtonDlg::PreTranslateMessage(MSG* pMsg){if(pMsg->message == WM_LBUTTONDOWN){ if(pMsg->hwnd == GetDlgItem(IDC_BTN_FOR_TEST)->m...

...上再动态创建ComboBox控件,ComboBox控件的消息响应函数怎么写...
除非你指定,否则在对话框中动态创建的ComboBox父指针是对话框而不是静态框的GroupBox。一般动态创建的控件,消息响应应该在PreTranslateMessage里面写。如果不是同一位置变化太大,没必要动态创建(这样代码可读性和维护都不方便),你可以在同一位置放置多个默认隐藏的控件,需要哪个就显示哪个就可以了。

MFC如何动态插入菜单
));pmenu-> AppendMenu(MF_STRING,111,"hello");pmenu-> DrawMenuBar();\/\/直接显示,不然要鼠标放在上面才显示 原型:BOOL AppendMenu(UINT nFlags,UINT_PTR nIDNewItem=0,LPCTSTR lpszNewItem=NULL);\/\/MF_POPUP那么nIDNewItem就是一个顶层菜单的句柄,否则要添加新菜单项的命令ID ...

动态添加的slider 怎么响应滑动事件
\/\/ return TRUE unless you set the focus to a control \/\/ EXCEPTION: OCX Property Pages should return FALSE} Slider控件本身并没有响应滑动的消息函数,但可以通过主窗体的OnHScroll()响应。在类向导中为对话框添加WM_HSCROLL消息,在响应函数中添加:void CDlgSetup::OnHScroll(UINT nSBCode...

相似回答