MFC鼠标左键响应长按操作

本文详细介绍了一种在Windows应用程序中使用定时器结合鼠标事件,实现在按住特定按钮时,每隔固定时间通过TCP发送数据的方法。具体实现包括在窗口类中添加PreTranslateMessage和OnTimer成员函数,用于拦截鼠标左键按下和抬起的消息,以及设置和取消定时器。

参考:https://blog.youkuaiyun.com/qq_20515461/article/details/78760257

实现代码:

1、在窗口类内添加成员函数

BOOL PreTranslateMessage(MSG* pMsg);
void CMy02_TCPClientDlg::OnTimer(UINT nIDEvent);

 

2.在Dlg中下列列表中添加 ON_WM_TIMER()

3.程序编写:
 

BOOL CMy02_TCPClientDlg::PreTranslateMessage(MSG* pMsg)
{
	if (pMsg->message == WM_LBUTTONDOWN)//拦截鼠标左键按下消息
	{
		if (pMsg->hwnd == GetDlgItem(IDC_BUTTON51)->m_hWnd)//判断按下的位置是否为目标button,button名为IDC_BUTTON5
		{
			SetTimer(2, 50, NULL);//触发定时器,定时器ID为2  1000=1s
		}		
	}
	else if (pMsg->message == WM_LBUTTONUP)//鼠标左键抬起
	{
		KillTimer(2);//关闭ID为2的定时器
	}
	return CDialog::PreTranslateMessage(pMsg); //一定要有,其他消息系统默认处理
}
void CMy02_TCPClientDlg::OnTimer(UINT nIDEvent)
{
	switch (nIDEvent)
	{
	case 2: ///当ID为2的定时器时间到时,执行以下程序
	{
		CString aaaa;//定义字符串
		aaaa = _T("1");//字符串赋值
		USES_CONVERSION;
		char * send1 = T2A(aaaa);//转换
		m_connSocket.Send(send1, strlen(send1));//tcp发送
	}		
		break;
	}
	CDialog::OnTimer(nIDEvent);
}

完整介绍:https://blog.youkuaiyun.com/JanKin_BY/article/details/105557302

之前是点击,发送,现在改为,按住前,STM32接收到1,车体前进,停止按动,收不到1,停止

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值