SpinButton鼠标抬起的响应需要将CSpinButtonCtrl控件先子类化,然后再子类中响应WM_LBUTTONUP事件,在该事件的响应函数中发送消息给父窗口,这里博主发送的是自定义消息,然后再父窗口中接受该消息进行处理,即可响应Spin控件的鼠标抬起了。具体代码如下:
1. 子类化CSpinButtonCtrl为CMySpin
#pragma once #include "afxcmn.h" class CMySpin : public CSpinButtonCtrl { public: CMySpin(); ~CMySpin(); DECLARE_MESSAGE_MAP() afx_msg void OnLButtonUp(UINT nFlags, CPoint point); };
2. 在子类中天健LButtonUp事件的响应函数,给父窗口发送消息
#include "stdafx.h" #include "MySpin.h" CMySpin::CMySpin() { } CMySpin::~CMySpin() { } BEGIN_MESSAGE_MAP(CMySpin, CSpinButtonCtrl) ON_WM_LBUTTONUP() END_MESSAGE_MAP() void CMySpin::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CWnd * pDlg = (CWnd*)this->GetParent(); pDlg->SendMessage(WM_USER+8, 0, 0); CSpinButtonCtrl::OnLButtonUp(nFlags, point); }
这里我们发送的是自定义消息WM_USER+8
3. 在父窗口中接受消息并处理
头文件中
afx_msg LRESULT OnSpinRelease(WPARAM, LPARAM);
CPP文件中
BEGIN_MESSAGE_MAP(CRobotControlDlg, CDialogEx) ... ON_MESSAGE(WM_USER+8, OnSpinRelease) END_MESSAGE_MAP() ... LRESULT CRobotControlDlg::OnSpinRelease(WPARAM w, LPARAM l) { // TODO: Add your control notification handler code here return 0; }
然后就可以响应该事件了