如何在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按钮抬起");
    }
}

…… ……

  

时间: 2024-12-24 05:57:56

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

ios 界面开发中的常见元素

界面开发中的 CGPoint.CGSize.CGRect.CGRectMake.window(窗口).视图(view)简单记录 定义 /* Points. */ struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CGPoint CGPoint; /* Sizes. */ struct CGSize { CGFloat width; CGFloat height; }; typedef struct CGSize CGSize; /*

IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例

IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add button. AD:[线下活动]三大新锐HTML 5企业汇聚51CTO—大话移动前端技术 IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add button.代

iOS开发中如何保存按钮的状态

在iOS开发中我们经常会需要保存某个按钮的状态,比如很多设置选项中的UISwitch按钮的开关,比如一些按钮的选中与否等等,今天项目中有一个需求是要保存自动登录按钮的选中状态,想要实现这个功能,可以用归档来完成. 首先需求图: 我需要记录自动登录按钮的状态,若用户选择了下次自动登录,那么程序退出再次启动这个按钮仍然是选中状态. 首先,我们需要监听按钮的点击事件,因为在点击事件里面我们能够拿到按钮的状态. 通过下面代码,存储选中状态. - (IBAction)autologinClick:(UIB

Unity中Button按钮的触发监听事件

第一种方式:需要把自己添加的Button按钮属性(Inspector)中的(Button)onclick添加方法. public void BtnCreteClick() { Debug.Log("一切正常!!"); } 第二种方式:把自己添加的Button按钮拖到代码所在的物体下和不拖Button按钮的代码如下. //拖动Button按钮执行的代码如下 public  GameObject btnPrint; Button btn = btnPrint.GetComponent<

MFC 应用开发中 复习

//hwnd 和 cwndHWND是windows系统中对所有窗口的一种标识,即窗口句柄,这是一个SDK概念CWnd是MFC类库中所有窗口类的基类,微软在MFC中将所有窗口的通用操作都封装到了这个类中,如:ShowWindow等等,同时它封装了窗口句柄即m_hwnd由HWND得到CWnd*CWnd wnd;HWnd hWnd;wnd.Attach(hWnd)通常一个窗口资源已经和一个Cwnd类的对象关联起来的,由于一般来说,这个类是自己创建的,所以自然知道,怎么得到指向这个类的指针.如果没有就C

MFC界面开发(QQ透明皮肤:多层算法,一键适配各种背景 )

http://blog.csdn.net/kent19900125/article/category/1368203/3 QQ透明皮肤:多层算法,一键适配各种背景 . http://blog.csdn.net/liu__ke/article/details/8889171

Xamarin.Forms listview中的button按钮,实现带着参数返回上一级页面

今天在做列表显示的时候遇到一个问题,就是在ListView中如何才能让一个button的按钮工作并且包含参数呢? 其实有点类似于rep里的控件无法起获取一样.在Xamarin中,当你button绑定事件并不包含在listview的数据源中,那么这个按钮的事件便是无效的. 那么该怎么解决呢?找了一下午终于找到了解决方案 xaml: <AbsoluteLayout IsVisible="True" HorizontalOptions="EndAndExpand"&

C++ windows图形界面,点击Button按钮通过openFileDialog控件选择文件

一直没用C++写过图形界面,之前用C#写很简单啊,没想到今天用C++还是有点不爽! 第一个问题,就是点击一个按钮button,选择文件,非文件夹,是文件,就是图片之类的东西! 首先,可以在界面中拖一个openFileDialog控件,控件名字就叫openFileDialog1,如图所示 也可以在Button的点击事件里new一个openFileDialog控件也可以! 然后,就是在button点击事件里,写下相应的代码就可以了: private: System::Void button1_Cli

微信开发中自动回复(扫码、关注推事件)

1, 进入微信公众平台,开启自动回复功能 2,进入基本配置 服务器配置 3, 找到刚设置的服务器地址,写如下内容(我的服务器地址:mp_event): 4, 到weixinPush中写相关逻辑代码 示例如下: //执行检测的信息 47     public function weixin_run() 48     { 49         $this->responseMsg(); 50     $ids = ''; 51 52         switch ($this->MsgType)