首页 > 代码库 > 如何在MFC界面开发中响应Button按钮的Down和Up事件
如何在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事件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。