基于Easyx实现同时接收键盘鼠标消息

这篇具有很好参考价值的文章主要介绍了基于Easyx实现同时接收键盘鼠标消息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

利用C++11结合Easyx简单实现并发接收键盘鼠标消息


说明:本示例开发环境为vs2019 & 且需要C++11语法支持,旨在帮助初学者能够以更便捷的方式使用IO设备。

头文件中的两个监听器专门用于监听鼠标、键盘消息。

两个监听器的参数均为函数指针,因此事件触发后具体执行哪些事情完全由你来决定。你只需要编写两个对应的处理函数并且其传递给对应的监听器即可。

鼠标处理函数声明式:void deal_mousefunc(MOUSEMSG mouse_data);
键盘处理函数声明式:void deal_keyfunc(int keyboard_data);
具体请参考示例程序。


函数接口以及必要的函数类型定义:

IODevice.h:

#ifndef __IODEVICE__
#define __IODEVICE__
#include <graphics.h>
#include <conio.h>
#include <thread>
#include <memory>
typedef void deal_keyfunc(int);
typedef void deal_mousefunc(MOUSEMSG);

/*
* @function: 开辟一个新线程,用以监听键盘事件,考虑到避免内存泄漏,我们将新开辟的线程对象以unique_ptr封装返回。
* 对捕获到鼠标数据将其交于参数中的函数处理。
* @return value:指向开辟的新线程对象的一个unique_ptr;
* @第一参数:接收到鼠标数据后的处理函数(func pointer..),用于处理来自鼠标的数据
* for example:
*	void deal_key_func(int key_data){...}//对接收到的鼠标数据进行处理
*	auto thread_1 = listening_mouse(deal_mouse_func);
**/
std::unique_ptr<std::thread> listening_mouse(deal_mousefunc* func);

/*
* @function: 开辟一个新线程,用以监听鼠标事件,考虑到避免内存泄漏,我们将新开辟的线程对象以unique_ptr封装返回。
* @return value:指向开辟的新线程对象的一个unique_ptr;
* @第一参数:接收到键盘数据后的处理函数(func pointer..),用于处理来自键盘的数据
* for example:
*	void deal_key_func(int from_key_data){...}//对接收到的键盘数据进行处理
*	auto thread_2 = listening_key(deal_key_func);
*/
std::unique_ptr<std::thread> listening_key(deal_keyfunc* func);

#endif // __IODEVICE__

IODevice.cpp:

#include "IODevice.h"

std::unique_ptr<std::thread> listening_mouse(deal_mousefunc* func) {
	//Create a new thread...
	std::unique_ptr<std::thread> u_ptr(new std::thread([func]() {
		//loop listening the message from mouse.
		while (1)
		{
			while (!MouseHit()) std::this_thread::yield();
			func(GetMouseMsg());
		}
		}));
	u_ptr->detach();
	return u_ptr;
}

std::unique_ptr<std::thread> listening_key(deal_keyfunc* func) {
	//Create a new thread...
	std::unique_ptr<std::thread> u_ptr(new std::thread([func]() {
		//loop listening the message from keyboard.
		while (1) {
			while (!_kbhit()) std::this_thread::yield();
			func(_getch());
		}
		}));
	u_ptr->detach();
	return u_ptr;
}

程序示例:

#include <easyx.h>
#include <stdio.h>
#include <graphics.h>
#include "IODevice.h"

//键盘响应处理函数(这里由你根据自己的需要的功能自定义即可,我们只需将其传递给键盘监听器)----------------------->
void deal_key_func(int key_data) {
	LOGFONT f;
	gettextstyle(&f);						// 获取当前字体设置
	f.lfHeight = 20;						// 设置字体高度
	wcscpy_s(f.lfFaceName, _T("黑体"));		// 设置字体为“黑体”(高版本 VC 推荐使用 _tcscpy_s 函数)
	f.lfQuality = ANTIALIASED_QUALITY;		// 设置输出效果为抗锯齿  
	settextstyle(&f);						// 设置字体样式
	switch (key_data)
	{
	case 'w':
		outtextxy(100, 100, _T("I push button: w"));
		break;
	case 'a':
		outtextxy(100, 100, _T("I push button: a"));
		break;
	case 'd':
		outtextxy(100, 100, _T("I push button: d"));
		break;
	case 's':
		outtextxy(100, 100, _T("I push button: s"));
		break;
	default:
		break;
	}
}

//鼠标响应处理函数(这里由你根据自己的需要的功能自定义即可,我们只需将其传递给鼠标监听器)---------------------->
void deal_mouse_func(MOUSEMSG mouse_message) {
	TCHAR message__[100];
	settextcolor(BLACK);
	if (mouse_message.uMsg == WM_MOUSEMOVE)
	{
		swprintf_s(message__, _T("Mouse coordinate is: [%d,%d]"), mouse_message.x, mouse_message.y);
		outtextxy(0, 0, message__);
	}
}

int main()
{
	initgraph(1200, 780);
	setbkcolor(WHITE);
	cleardevice();
	settextcolor(BLACK);
	auto thread1 = listening_key(deal_key_func);	//这里调用键盘监听器并将自定义的处理函数传递过来
	auto thread2 = listening_mouse(deal_mouse_func);//这里调用鼠标监听器并将自定义的处理函数传递过来
	while (1);
	return 0;
}

运行结果:
esayx监听鼠标事件函数,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-796444.html

到了这里,关于基于Easyx实现同时接收键盘鼠标消息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小技巧:罗技一个接收器连接多个鼠标或键盘

    安装Logitech Unifying™ 优联软件: 最多可以将六个罗技 Unifying™ 优联无线鼠标或键盘连接至一只小巧又节省空间的 Unifying 优联 USB 接收器。 Unifying Software – Logitech 支持 + 下载 Unifying Software More https://support.logi.com/hc/zh-cn/articles/360025297913

    2024年02月11日
    浏览(395)
  • 尝试用easyx窗口实现鼠标的操作

      (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 首先就是常规引用头文件 #includestdio.h #includegraphics.h  接着就是设置窗口的大小 initgraph(1000, 640, SHOWCONSOLE);//创建一个窗口 setbkcolor(WHITE);//设置窗口颜色 cleardevice();//刷新一

    2024年02月09日
    浏览(63)
  • python基于win32实现梦幻西游手游后台鼠标键盘

    获取窗口句柄         可以使用按键精灵的按键抓抓         

    2024年02月11日
    浏览(48)
  • STM32实现三个串口同时开启发送接收数据

            实现STM32开通三个串口,每个串口都可以实现接收和发送数据。          编程时,严禁在中断函数中写入发送串口数据代码,否则会出错,具体原因不清楚(有大佬知道的话帮我指出),可能原因是DR寄存器冲突导致。         RX,TX连接到A9,A10使用串口1,使

    2024年04月13日
    浏览(73)
  • SpringBoot实现WebSocket发送接收消息 + Vue实现SocketJs接收发送消息

    1、https://www.mchweb.net/index.php/dev/887.html 2、https://itonline.blog.csdn.net/article/details/81221103?spm=1001.2101.3001.6661.1utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~default-1-81221103-blog-121078449.pc_relevant_aadepth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~default-1-81221103-blog-12107

    2024年02月05日
    浏览(46)
  • 利用c++基于ffmpeg库接收rtsp视频数据,并利用udp将以RTP协议将数据发送,同时利用udp接收RTP数据包,并基于ffmpeg库播放视频。

    这是两个不同的任务,需要分别实现。 任务一:基于ffmpeg库接收rtsp视频数据,并利用udp将以RTP协议将数据发送。 以下是基于ffmpeg库接收rtsp视频数据,然后使用udp发送RTP协议数据的示例代码: 任务二:利用c++利用udp接收RTP数据包,并基于ffmpeg库播放视频。 以下是利用c++利用

    2024年02月12日
    浏览(44)
  • 键盘怎么控制鼠标?键盘控制鼠标实现点击和移动

    鼠标在电脑操作过程中非常重要,可是有时遇到尴尬的问题,就是摸鱼的时候觉得一直点击鼠标声音太大,或者舍友都睡觉了,你突然之间需要浏览一些网页,一直点击鼠标会产生很大的噪声,这时候该怎么办呢?如果你是笔记本,配合鼠标版可以解决。如果你正好有一个静

    2024年02月06日
    浏览(50)
  • 【Python】监听键盘鼠标,基于pynput库

    目录 前言 首先放上官网链接 示例代码 模拟输入 监控输入 按键与鼠标宏 测试时的问题:按键按下不弹起的bug 键盘输入我们第一时间会想到win32api,这货还行,就是稍微繁琐了点,底层了点 Windows平台Python编程必会模块之pywin32_顺其自然~的博客-CSDN博客_python pywin32 如果想监听

    2024年02月09日
    浏览(73)
  • Kafka消息队列实现消息的发送和接收

    消息在Kafka消息队列中发送和接收过程如下图所示: 消息生产者Producer产生消息数据,发送到Kafka消息队列中,一台Kafka节点只有一个Broker,消息会存储在Kafka的Topic(主题中),不同类型的消息数据会存储在不同的Topic中,可以利用Topic实现消息的分类,消息消费者Consumer会订阅

    2024年02月11日
    浏览(48)
  • easyx图形库基础:2.基本运动+键盘交互

    1.如何实现动画: 相信大家已经对动画的原理已经不陌生了。想要目标物体动起来,只需要逐个播放目标物体每一时刻位置的图片。只要播放的速度足够快,人们就会在视觉上认为目标物体动起来了。 帧率:具有连续性的一些图片在1秒中绘制的个数。 物体运动的速度单位一

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包