Easyx进阶(二)
Easyx进阶(二)
——消息处理
消息缓冲区可以缓冲 63 个未处理的消息。每次获取消息时,将从消息缓冲区取出一个最早发生的消息。消息缓冲区满了之后,不再接收任何消息。
1. 消息以及分类
1.1 分类
- 键盘消息
- 鼠标消息
- 其他
1.2 消息结构体(ExMessage)
struct ExMessage
{USHORT message; // 消息标识union{// 鼠标消息的数据struct{bool ctrl :1; // Ctrl 键是否按下bool shift :1; // Shift 键是否按下bool lbutton :1; // 鼠标左键是否按下bool mbutton :1; // 鼠标中键是否按下bool rbutton :1; // 鼠标右键short x; // 鼠标的 x 坐标short y; // 鼠标的 y 坐标short wheel; // 鼠标滚轮滚动值,为 120 的倍数};// 按键消息的数据struct{BYTE vkcode; // 按键的虚拟键码BYTE scancode; // 按键的扫描码(依赖于 OEM)bool extended :1; // 按键是否是扩展键bool prevdown :1; // 按键的前一个状态是否按下};// 字符消息的数据TCHAR ch;// 窗口消息的数据struct{WPARAM wParam;LPARAM lParam;};};
};
成员
- message:消息标识
消息标识 | 消息类别 | 描述 |
---|---|---|
WM_MOUSEMOVE | EX_MOUSE | 鼠标移动消息。 |
WM_MOUSEWHEEL | 鼠标滚轮拨动消息。 | |
WM_LBUTTONDOWN | 左键按下消息。 | |
WM_LBUTTONUP | 左键弹起消息。 | |
WM_LBUTTONDBLCLK | 左键双击消息。 | |
WM_MBUTTONDOWN | 中键按下消息。 | |
WM_MBUTTONUP | 中键弹起消息。 | |
WM_MBUTTONDBLCLK | 中键双击消息。 | |
WM_RBUTTONDOWN | 右键按下消息。 | |
WM_RBUTTONUP | 右键弹起消息。 | |
WM_RBUTTONDBLCLK | 右键双击消息。 | |
WM_KEYDOWN | EX_KEY | 按键按下消息 |
WM_KEYUP | 按键弹起消息。 | |
WM_CHAR | EX_CHAR | 字符消息。 |
WM_ACTIVATE | EX_WINDOW | 窗口激活状态改变消息。 |
WM_MOVE | 窗口移动消息。 | |
WM_SIZE | 窗口大小改变消息。 |
- ctrl:Ctrl 键是否按下。仅当消息所属类别为 EX_MOUSE 时有效。
- shift:Shift 键是否按下。仅当消息所属类别为 EX_MOUSE 时有效。
- lbutton:鼠标左键是否按下。仅当消息所属类别为 EX_MOUSE 时有效。
- mbutton:鼠标中键是否按下。仅当消息所属类别为 EX_MOUSE 时有效。
- rbutton:鼠标右键是否按下。仅当消息所属类别为 EX_MOUSE 时有效。
- x:当前鼠标 x 坐标(物理坐标)。仅当消息所属类别为 EX_MOUSE 时有效。
- y:当前鼠标 y 坐标(物理坐标)。仅当消息所属类别为 EX_MOUSE 时有效。
- wheel:鼠标滚轮滚动值,为 120 的倍数。仅当消息所属类别为 EX_MOUSE 时有效。
- vkcode:按键的虚拟键码。仅当消息所属类别为 EX_KEY 时有效。在微软网站上列出有所有的虚拟键码:https://docs.microsoft.com/windows/win32/inputdev/virtual-key-codes
返回的常量 | Value | 说明 |
---|---|---|
VK_LBUTTON
|
0x01 | 鼠标左键 |
VK_RBUTTON
|
0x02 | 鼠标右键 |
VK_CANCEL
|
0x03 | 控制中断处理 |
VK_MBUTTON
|
0x04 | 中间鼠标按钮 (三键鼠标) |
VK_XBUTTON1
|
0x05 | X1 鼠标按钮 |
VK_XBUTTON2
|
0x06 | X2 鼠标按钮 |
-
|
0x07 | Undefined |
VK_BACK
|
0x08 | BACKSPACE 密钥 |
VK_TAB
|
0x09 | Tab 键 |
-
|
0x0A-0B | 预留 |
VK_CLEAR
|
0x0C | CLEAR 键 |
VK_RETURN
|
0x0D | Enter 键 |
-
|
0x0E-0F | Undefined |
VK_SHIFT
|
0x10 | SHIFT 键 |
VK_CONTROL
|
0x11 | Ctrl 键 |
VK_MENU
|
0x12 | Alt 键 |
VK_PAUSE
|
0x13 | PAUSE 键 |
VK_CAPITAL
|
0x14 | CAPS LOCK 键 |
VK_KANA
|
0x15 | IME Kana 模式 |
VK_HANGUEL
|
0x15 |
IME 朝鲜文库埃尔模式 (保持兼容性;使用 VK_HANGUL )
|
VK_HANGUL
|
0x15 | IME Hanguel 模式 |
VK_IME_ON
|
0x16 | IME On |
VK_JUNJA
|
0x17 | IME Junja 模式 |
VK_FINAL
|
0x18 | IME 最终模式 |
VK_HANJA
|
0x19 | IME Hanja 模式 |
VK_KANJI
|
0x19 | IME Kanji 模式 |
VK_IME_OFF
|
0x1A | IME 关闭 |
VK_ESCAPE
|
0x1B | ESC 键 |
VK_CONVERT
|
0x1C | IME 转换 |
VK_NONCONVERT
|
0x1D | IME 不转换 |
VK_ACCEPT
|
0x1E | IME 接受 |
VK_MODECHANGE
|
0x1F | IME 模式更改请求 |
VK_SPACE
|
0x20 | 空格键 |
VK_PRIOR
|
0x21 | PAGE UP 键 |
VK_NEXT
|
0x22 | PAGE DOWN 键 |
VK_END
|
0x23 | END 键 |
VK_HOME
|
0x24 | HOME 键 |
VK_LEFT
|
0x25 | 向左键 |
VK_UP
|
0x26 | 向上键 |
VK_RIGHT
|
0x27 | 向右键 |
VK_DOWN
|
0x28 | 向下键 |
VK_SELECT
|
0x29 | SELECT 键 |
VK_PRINT
|
0x2A | PRINT 键 |
VK_EXECUTE
|
0x2B | EXECUTE 键 |
VK_SNAPSHOT
|
0x2C | 打印屏幕键 |
VK_INSERT
|
0x2D | INS 密钥 |
VK_DELETE
|
0x2E | DEL 键 |
VK_HELP
|
0x2F | 帮助密钥 |
0x30 | 0 键 | |
0x31 | 1 个键 | |
0x32 | 2 键 | |
0x33 | 3 键 | |
0x34 | 4 键 | |
0x35 | 5 键 | |
0x36 | 6 个键 | |
0x37 | 7 键 | |
0x38 | 8 键 | |
0x39 | 9 键 | |
-
|
0x3A-40 | Undefined |
0x41 | 密钥 | |
0x42 | B 键 | |
0x43 | C 键 | |
0x44 | D 键 | |
0x45 | E 键 | |
0x46 | F 键 | |
0x47 | G 键 | |
0x48 | H 键 | |
0x49 | I 键 | |
0x4A | J 键 | |
0x4B | K 键 | |
0x4C | L 键 | |
0x4D | M 键 | |
0x4E | N 键 | |
0x4F | O 键 | |
0x50 | P 键 | |
0x51 | Q 键 | |
0x52 | R 键 | |
0x53 | S 键 | |
0x54 | T 键 | |
0x55 | U 键 | |
0x56 | V 键 | |
0x57 | W 键 | |
0x58 | X 键 | |
0x59 | Y 键 | |
0x5A | Z 键 | |
VK_LWIN
|
0x5B | 左Windows键 (自然键盘) |
VK_RWIN
|
0x5C | 右Windows键 (自然键盘) |
VK_APPS
|
0x5D | 应用程序键 (自然键盘) |
-
|
0x5E | 保留 |
VK_SLEEP
|
0x5F | 计算机休眠键 |
VK_NUMPAD0
|
0x60 | 数字键盘 0 键 |
VK_NUMPAD1
|
0x61 | 数字键盘 1 键 |
VK_NUMPAD2
|
0x62 | 数字键盘 2 键 |
VK_NUMPAD3
|
0x63 | 数字键盘 3 键 |
VK_NUMPAD4
|
0x64 | 数字键盘 4 键 |
VK_NUMPAD5
|
0x65 | 数字键盘 5 键 |
VK_NUMPAD6
|
0x66 | 数字键盘 6 键 |
VK_NUMPAD7
|
0x67 | 数字键盘 7 键 |
VK_NUMPAD8
|
0x68 | 数字键盘 8 键 |
VK_NUMPAD9
|
0x69 | 数字键盘 9 键 |
VK_MULTIPLY
|
0x6A | 乘键 |
VK_ADD
|
0x6B | 添加密钥 |
VK_SEPARATOR
|
0x6C | 分隔符键 |
VK_SUBTRACT
|
0x6D | 减去键 |
VK_DECIMAL
|
0x6E | 十进制键 |
VK_DIVIDE
|
0x6F | 除键 |
VK_F1
|
0x70 | F1 键 |
VK_F2
|
0x71 | F2 键 |
VK_F3
|
0x72 | F3 键 |
VK_F4
|
0x73 | F4 键 |
VK_F5
|
0x74 | F5 键 |
VK_F6
|
0x75 | F6 键 |
VK_F7
|
0x76 | F7 键 |
VK_F8
|
0x77 | F8 键 |
VK_F9
|
0x78 | F9 键 |
VK_F10
|
0x79 | F10 键 |
VK_F11
|
0x7A | F11 键 |
VK_F12
|
0x7B | F12 键 |
VK_F13
|
0x7C | F13 键 |
VK_F14
|
0x7D | F14 键 |
VK_F15
|
0x7E | F15 键 |
VK_F16
|
0x7F | F16 键 |
VK_F17
|
0x80 | F17 键 |
VK_F18
|
0x81 | F18 键 |
VK_F19
|
0x82 | F19 键 |
VK_F20
|
0x83 | F20 键 |
VK_F21
|
0x84 | F21 键 |
VK_F22
|
0x85 | F22 键 |
VK_F23
|
0x86 | F23 键 |
VK_F24
|
0x87 | F24 键 |
-
|
0x88-8F | 未分配 |
VK_NUMLOCK
|
0x90 | NUM LOCK 密钥 |
VK_SCROLL
|
0x91 | SCROLL LOCK 键 |
0x92-96 | OEM 特定 | |
-
|
0x97-9F | 未分配 |
VK_LSHIFT
|
0xA0 | 左 SHIFT 键 |
VK_RSHIFT
|
0xA1 | 右 SHIFT 键 |
VK_LCONTROL
|
0xA2 | 左 Ctrl 键 |
VK_RCONTROL
|
0xA3 | 右 Ctrl 键 |
VK_LMENU
|
0xA4 | 左 Alt 键 |
VK_RMENU
|
0xA5 | 右 ALT 键 |
VK_BROWSER_BACK
|
0xA6 | 浏览器后退键 |
VK_BROWSER_FORWARD
|
0xA7 | 浏览器前进键 |
VK_BROWSER_REFRESH
|
0xA8 | 浏览器刷新键 |
VK_BROWSER_STOP
|
0xA9 | 浏览器停止键 |
VK_BROWSER_SEARCH
|
0xAA | 浏览器搜索键 |
VK_BROWSER_FAVORITES
|
0xAB | 浏览器收藏键 |
VK_BROWSER_HOME
|
0xAC | 浏览器“开始”和“主页”键 |
VK_VOLUME_MUTE
|
0xAD | 静音键 |
VK_VOLUME_DOWN
|
0xAE | 音量减小键 |
VK_VOLUME_UP
|
0xAF | 音量增加键 |
VK_MEDIA_NEXT_TRACK
|
0xB0 | 下一曲目键 |
VK_MEDIA_PREV_TRACK
|
0xB1 | 上一曲目键 |
VK_MEDIA_STOP
|
0xB2 | 停止媒体键 |
VK_MEDIA_PLAY_PAUSE
|
0xB3 | 播放/暂停媒体键 |
VK_LAUNCH_MAIL
|
0xB4 | 启动邮件键 |
VK_LAUNCH_MEDIA_SELECT
|
0xB5 | 选择媒体键 |
VK_LAUNCH_APP1
|
0xB6 | 启动应用程序 1 键 |
VK_LAUNCH_APP2
|
0xB7 | 启动应用程序 2 键 |
-
|
0xB8-B9 | 预留 |
VK_OEM_1
|
0xBA | 用于其他字符;它可能因键盘而异。 对于美国标准键盘,“;:”键 |
VK_OEM_PLUS
|
0xBB | 对于任何国家/地区,“+”键 |
VK_OEM_COMMA
|
0xBC | 对于任何国家/地区,“,键 |
VK_OEM_MINUS
|
0xBD | 对于任何国家/地区,“-”键 |
VK_OEM_PERIOD
|
0xBE | 对于任何国家/地区,“.”键 |
VK_OEM_2
|
0xBF | 用于其他字符;它可能因键盘而异。 对于美国标准键盘,“/?” key |
VK_OEM_3
|
0xC0 | 用于其他字符;它可能因键盘而异。 对于美国标准键盘,“~”键 |
-
|
0xC1-D7 | 预留 |
-
|
0xD8-DA | 未分配 |
VK_OEM_4
|
0xDB | 用于其他字符;它可能因键盘而异。 对于美国标准键盘,“[{”键 |
VK_OEM_5
|
0xDC | 用于其他字符;它可能因键盘而异。 对于美国标准键盘,“|”键 |
VK_OEM_6
|
0xDD | 用于其他字符;它可能因键盘而异。 对于美国标准键盘,“]}”键 |
VK_OEM_7
|
0xDE | 用于其他字符;它可能因键盘而异。 对于美国标准键盘,“单引号/双引号”键 |
VK_OEM_8
|
0xDF | 用于其他字符;它可能因键盘而异。 |
-
|
0xE0 | 保留 |
0xE1 | OEM 特定 | |
VK_OEM_102
|
0xE2 |
<> 美国标准键盘上的键,或\| 非美国 102 键键盘上的键
|
0xE3-E4 | OEM 特定 | |
VK_PROCESSKEY
|
0xE5 | IME PROCESS 密钥 |
0xE6 | OEM 特定 | |
VK_PACKET
|
0xE7 |
用于将 Unicode 字符当作键击传递。 该 VK_PACKET 键是用于非键盘输入方法的 32 位虚拟键值的低字。 有关详细信息,请参阅“备注”,以及KEYBDINPUT SendInput WM_KEYDOWN WM_KEYUP
|
-
|
0xE8 | 未分配 |
0xE9-F5 | OEM 特定 | |
VK_ATTN
|
0xF6 | Attn 键 |
VK_CRSEL
|
0xF7 | CrSel 键 |
VK_EXSEL
|
0xF8 | ExSel 密钥 |
VK_EREOF
|
0xF9 | 擦除 EOF 密钥 |
VK_PLAY
|
0xFA | 播放键 |
VK_ZOOM
|
0xFB | 缩放键 |
VK_NONAME
|
0xFC | 预留 |
VK_PA1
|
0xFD | PA1 键 |
VK_OEM_CLEAR
|
0xFE | 清除键 |
- scancode:按键的扫描码(依赖于 OEM)。仅当消息所属类别为 EX_KEY 时有效。
- extended:按键是否为扩展按键,例如功能键和数字键盘。仅当消息所属类别为 EX_KEY 时有效。
- prevdown:按键的前一个状态是否为按下。仅当消息所属类别为 EX_KEY 时有效。
- ch:收到的字符。仅当消息所属类别为 EX_CHAR 时有效。
- wParam:消息对应的 wParam 参数。仅当消息所属类别为 EX_WINDOW 时有效。
- lParam:消息对应的 lParam 参数。仅当消息所属类别为 EX_WINDOW 时有效。
2. 键盘&鼠标消息处理
1. 流程
- 获取消息(getmessage)
- 对消息类型进行判断
- 处理对应的消息
2. 实例
#include <easyx.h>
#include <conio.h>int main(void) {// 1. 初始化图形设备initgraph(400, 400);ExMessage msg; // 存储消息while (true) {getmessage(&msg); // 从消息队列中获取一条消息if (msg.message == WM_KEYDOWN || msg.message == WM_KEYUP) {// 如果为按键按下或弹起消息TCHAR m[120] = { 0 };RECT r = { 0, 0, 400, 400 };_tcscpy_s(m, _T("按键消息"));drawtext(m, &r, DT_CENTER | DT_VCENTER);}else if (msg.message == WM_MOUSEMOVE) {TCHAR m[120] = { 0 };RECT r = { 0, 0, 400, 400 };_tcscpy_s(m, _T("鼠标移动"));drawtext(m, &r, DT_CENTER | DT_VCENTER);}}// 3. 关闭图形化设备,并释放资源closegraph();return 0;
}
3. 详细函数介绍
传送门
Easyx进阶(二)相关推荐
- python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...
Pyhton--面向对象进阶二: 一.类的内置函数补充 1.isinstance(obj,cls)--检查obj是否是该类的对象 class Hoo: def __init__(self,name,t ...
- python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解
#Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...
- QIIME2进阶二_元数据及数据导入QIIME2
本节主要讲解如何将元数据与数据导入生物信息分析软件QIIME2,实现数据导入与检查. 本实战教程将使用来自人源化(humanized)小鼠的一组粪便样品,展示16S rRNA基因扩增子数据的" ...
- JavaScript进阶(二)
JavaScript进阶(二) 2019版黑马程序员javaScript进阶面向对象ES6 122集教程,哔哩哔哩链接:https://www.bilibili.com/video/BV1Kt411w ...
- Android进阶(二十八)上下文菜单ContextMenu使用案例
上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等 ...
- vue高级进阶( 二 ) 8种组件通信详解
猛兽总是独行,牛羊才成群结队. -------鲁迅 vue组件通信的重要性无需多言...但是你肯定没有全部掌握,所以这第二篇文章应运而生 props和$emit props父传子,$emit子传父,看 ...
- mysql revoke 用法_mysql进阶(二十八)MySQL GRANT REVOKE用法
mysql进阶(二十八)MySQL GRANT REVOKE用法 MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执行查 ...
- Linux命令进阶二
Linux命令进阶二 系统信息查看 1.1 系统硬件.内核信息 uname -m 显示机器的处理器架构 uname -r 显示系统内核版本 cat /proc/version 显示内核的版本 host ...
- J2EE进阶(二十四)JBoss Web和 Tomcat的区别
J2EE进阶(二十四)JBoss Web和 Tomcat的区别 在Web2.0的浪潮中,各种页面技术和框架不断涌现,为服务器端的基础架构提出了更高的稳定性和可扩展性的要求.近年来,作为开源中间件的全球 ...
最新文章
- 10分钟学会php面相对象基础(Ⅰ)
- MYSQL人事工资管理系统-插入数据(三)
- runloop源代码
- 如何调试 Android 上 HTTP(S) 流量
- php代码规范说明文档
- 软件工程电商系统数据库定义_某个电子商务系统项目的数据库设计
- java内存与系统内存,Java获得jvm占用的内存和系统的可用内存信息详解
- 2013-01-09 13:31 IE不支持textarea的maxlength属性,Firefox支持
- Sublime Text SFTP 注册码
- 模拟经营游戏框架构思
- web打印插件hiprint
- 如何实现电脑端和手机端数据传输与共享
- 基于单片机步进电机ppt答辩_智能小车答辩课件.ppt
- 高质量web前端后台模板
- 微信开放平台apk应用签名获取
- iOS 音乐 播放器 声音
- 第一种单击事件方法 onCreate 1、先在按钮中添加onCreate单击事件 android:onClick=wlj/ 2、再在主函数MainActivity中添加自定义方法
- High Performance Visual Tracking with Siamese Region Proposal Network 阅读笔记
- 计算机操作透明化,win10系统如何设置透明化效|win10电脑透明化功能怎么开启
- 还我一个干净的Mac OS(如何彻底删除不需要的App)
热门文章
- python微信公众号爬虫_微信公众号推送信息爬取---python爬虫
- 可变形卷积(Deformable Conv)原理解析与torch代码实现
- 03-STM32+BC26丨260Y远程升级篇(自建物联网平台)-功能测试-STM32+BC26丨260Y实现利用http远程更新STM32程序(单片机程序检查更新)
- C4: ETF 和 ETF联接
- java image 保存_如何将BufferedImage保存为文件
- Jmeter启用英文界面
- wan端口未连接怎么弄_WAN口未插网线怎么办? | 192路由网
- Minio介绍及使用
- 软件测试面试:电梯测试用例怎么写
- mysql数据库中添加emoji表情