如何在MFC界面开发中响应Button按钮的Down和Up事件

Posted 常想一二

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在MFC界面开发中响应Button按钮的Down和Up事件相关的知识,希望对你有一定的参考价值。

通过尝试有两种方案可以解决这个问题,第一种方案是通过PreTranslateMessage函数在调度消息之前对消息类型进行筛选,第二种方案是重载CButton类,在重载后的类CForTestButton中新增ON_WM_LBUTTONDOWN消息以及ON_WM_LBUTTONUP消息。
 
第一种方案
实现原理也挺简单,在消息调度函数PreTranslateMessage函数中拦截Button按钮的句柄,之后在对应大括号内调用相关功能块即可。核心源码如下:
…… ……
BOOL CTestButtonDlg::PreTranslateMessage(MSG* pMsg)
{
  if(pMsg->message == WM_LBUTTONDOWN)
  {
      if(pMsg->hwnd == GetDlgItem(IDC_BTN_FOR_TEST)->m_hWnd)
      {
          MessageBox("Button按钮按下");
          // 在此调用Button按钮按下的操作
      }
  }

  if(pMsg->message == WM_LBUTTONUP)
  {
      if(pMsg->hwnd == GetDlgItem(IDC_BTN_FOR_TEST)->m_hWnd)
      {
          MessageBox("Button按钮抬起");
          // 在此调用Button按钮抬起的操作
      }
  }
}
…… ……

  

其中,“IDC_BTN_FOR_TEST”表示待按下的按钮ID。
 
第二种方案
自定义一个类CForTestButton类继承CButton类,在继承类CForTestButton类中新增ON_WM_LBUTTONDOWN()消息和ON_WM_LBUTTONUP()消息。ForTestButton.h头文件中新增的源码如下:
…… ……
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
…… ……

ForTestButton.cpp源文件中新增的源码如下:

…… ……

BEGIN_MESSAGE_MAP(CForTestButton, CButtion)
    ON_WM_LBUTTONDOWN()
    ON_WM_LBUTTONUP()
END_MESSAGE_MAP()

…… ……
…… ……

void CForTestButton::OnLButtonDown(UINT nFlags, CPoint point)
{
    CRect rcJog;
    this->GetClientRect(&rcJog);
    if(rcJog.PtInRect(point))
    {
        MessageBox("Button按钮按下");
    }
}

void CForTestButton::OnLButtonUp(UINT nFlags, CPoint point)
{
    CRect rcJog;
    this->GetClientRect(&rcJog);
    if(rcJog.PtInRect(point))
    {
        MessageBox("Button按钮抬起");
    }
}

…… ……

  

 
 
 
 
 
 
 
 
 
 

以上是关于如何在MFC界面开发中响应Button按钮的Down和Up事件的主要内容,如果未能解决你的问题,请参考以下文章

MFC如何添加系统消息处理函数?

MFC 自绘按钮 消息响应

在MFC 如何设置按钮的颜色

Visaul Studio 2015 MFC控件使用之--按钮(Button)

vs2013怎么用mfc添加菜单项消息响应函数

(转载)VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)