CxSkinButton增加鼠标按下抬起事件

CxSkinButton.h中增加两个宏定义


#define WM_MYLBTN_UP WM_USER + 0x1001
#define WM_MYLBTN_DOWM WM_USER + 0x1002

CxSkinButton.cpp中修改
void CxSkinButton::OnLButtonDown(UINT nFlags, CPoint point)
{
    //Pass this message to the ToolTip control
    RelayEvent(WM_LBUTTONDOWN,(WPARAM)nFlags,MAKELPARAM(LOWORD(point.x),LOWORD(point.y)));

    //If we are tracking this button, cancel it
    if (m_tracking) {
        TRACKMOUSEEVENT t = {
            sizeof(TRACKMOUSEEVENT),
            TME_CANCEL | TME_LEAVE,
            m_hWnd,
            0
        };
        if (::_TrackMouseEvent(&t)) {
            m_tracking = false;
        }
    }

    //Default-process the message
    CButton::OnLButtonDown(nFlags, point);
    GetParent()->SendMessage(WM_MYLBTN_DOWM, GetDlgCtrlID(), 0); //增加这行
    m_button_down = true;
}


void CxSkinButton::OnLButtonUp(UINT nFlags, CPoint point)
{
if (m_Style)
     {
          //track mouse for radio & check buttons
        POINT p2 = point;
         ::ClientToScreen(m_hWnd, &p2);
        HWND mouse_wnd = ::WindowFromPoint(p2);
         if (mouse_wnd == m_hWnd)
{
 // mouse is in button
         if (m_Style==BS_CHECKBOX) SetCheck(m_Checked ? 0 : 1);
        if (m_Style==BS_RADIOBUTTON) SetCheck(1);
 }
 }
 //Pass this message to the ToolTip control
RelayEvent(WM_LBUTTONUP,(WPARAM)nFlags,MAKELPARAM(LOWORD(point.x),LOWORD(point.y)));

//Default-process the message
m_button_down = false;
CButton::OnLButtonUp(nFlags, point);
GetParent()->SendMessage(WM_MYLBTN_UP, GetDlgCtrlID(), 0);  //增加这行
}


使用方法 窗口头文件中引用
#include "xSkinButton.h"

定义变量:
CxSkinButton m_btnCenter;
窗口cpp文件中
控件与变量关联
void CHGVideoDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CENTER, m_btnCenter);
}

//事件关联
BEGIN_MESSAGE_MAP(CHGVideoDlg, CDialog)
ON_MESSAGE(WM_MYLBTN_DOWM, OnLBtnDownPtzCtrl)//OnLBtnDownPtzCtrl中实现鼠标按下
ON_MESSAGE(WM_MYLBTN_UP, OnLBtnUpPtzCtrl)//鼠标抬起事件
END_MESSAGE_MAP()

//注:按钮添加图片
BOOL CHGVideoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE);// 设置大图标
SetIcon(m_hIcon, FALSE);// 设置小图标

m_btnCenter.SetTextColor(RGB(255,0,0));
m_btnCenter.SetSkin(IDB_CENTER, IDB_CENTER, IDB_CENTER, IDB_CENTER, 0, IDB_CENTER, 0, 0, 0);
}

效果图:

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

whisht

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值