zoukankan      html  css  js  c++  java
  • 如何在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按钮抬起");
        }
    }
    
    …… ……
    

      

     
     
     
     
     
     
     
     
     
     
    作者:常想一二
    出处:http://www.cnblogs.com/wolfmvp/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    Tornado-Lesson06-ORM、SQLAlchemy连接数据库、Module和增删改查
    Tornado-Lesson04-模版、模版转义、静态文件的引用
    Tornado-Lesson05-模版继承、函数和类导入、ui_methods和ui_modules
    博弈论
    给图片添加水印
    Apsara Clouder专项技能认证:实现调用API接口
    好用的工具
    书写是为了更好的思考
    使用与破解ExcelVBA密码
    一款可以直接下载浏览器sources资源的Chrome插件
  • 原文地址:https://www.cnblogs.com/wolfmvp/p/5915177.html
Copyright © 2011-2022 走看看