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 位虚拟键值的低字。 有关详细信息,请参阅“备注”,以及KEYBDINPUTSendInputWM_KEYDOWNWM_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. 流程

  1. 获取消息(getmessage)
  2. 对消息类型进行判断
  3. 处理对应的消息

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进阶(二)相关推荐

  1. python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...

    Pyhton--面向对象进阶二: 一.类的内置函数补充 1.isinstance(obj,cls)--检查obj是否是该类的对象 class Hoo: def __init__(self,name,t ...

  2. python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解

    #Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...

  3. QIIME2进阶二_元数据及数据导入QIIME2

    本节主要讲解如何将元数据与数据导入生物信息分析软件QIIME2,实现数据导入与检查. 本实战教程将使用来自人源化(humanized)小鼠的一组粪便样品,展示16S rRNA基因扩增子数据的" ...

  4. JavaScript进阶(二)

    JavaScript进阶(二) 2019版黑马程序员javaScript进阶面向对象ES6 122集教程,哔哩哔哩链接:https://www.bilibili.com/video/BV1Kt411w ...

  5. Android进阶(二十八)上下文菜单ContextMenu使用案例

    上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等 ...

  6. vue高级进阶( 二 ) 8种组件通信详解

    猛兽总是独行,牛羊才成群结队. -------鲁迅 vue组件通信的重要性无需多言...但是你肯定没有全部掌握,所以这第二篇文章应运而生 props和$emit props父传子,$emit子传父,看 ...

  7. mysql revoke 用法_mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法 MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执行查 ...

  8. Linux命令进阶二

    Linux命令进阶二 系统信息查看 1.1 系统硬件.内核信息 uname -m 显示机器的处理器架构 uname -r 显示系统内核版本 cat /proc/version 显示内核的版本 host ...

  9. J2EE进阶(二十四)JBoss Web和 Tomcat的区别

    J2EE进阶(二十四)JBoss Web和 Tomcat的区别 在Web2.0的浪潮中,各种页面技术和框架不断涌现,为服务器端的基础架构提出了更高的稳定性和可扩展性的要求.近年来,作为开源中间件的全球 ...

最新文章

  1. 10分钟学会php面相对象基础(Ⅰ)
  2. MYSQL人事工资管理系统-插入数据(三)
  3. runloop源代码
  4. 如何调试 Android 上 HTTP(S) 流量
  5. php代码规范说明文档
  6. 软件工程电商系统数据库定义_某个电子商务系统项目的数据库设计
  7. java内存与系统内存,Java获得jvm占用的内存和系统的可用内存信息详解
  8. 2013-01-09 13:31 IE不支持textarea的maxlength属性,Firefox支持
  9. Sublime Text SFTP 注册码
  10. 模拟经营游戏框架构思
  11. web打印插件hiprint
  12. 如何实现电脑端和手机端数据传输与共享
  13. 基于单片机步进电机ppt答辩_智能小车答辩课件.ppt
  14. 高质量web前端后台模板
  15. 微信开放平台apk应用签名获取
  16. iOS 音乐 播放器 声音
  17. 第一种单击事件方法 onCreate 1、先在按钮中添加onCreate单击事件 android:onClick=wlj/ 2、再在主函数MainActivity中添加自定义方法
  18. High Performance Visual Tracking with Siamese Region Proposal Network 阅读笔记
  19. 计算机操作透明化,win10系统如何设置透明化效|win10电脑透明化功能怎么开启
  20. 还我一个干净的Mac OS(如何彻底删除不需要的App)

热门文章

  1. python微信公众号爬虫_微信公众号推送信息爬取---python爬虫
  2. 可变形卷积(Deformable Conv)原理解析与torch代码实现
  3. 03-STM32+BC26丨260Y远程升级篇(自建物联网平台)-功能测试-STM32+BC26丨260Y实现利用http远程更新STM32程序(单片机程序检查更新)
  4. C4: ETF 和 ETF联接
  5. java image 保存_如何将BufferedImage保存为文件
  6. Jmeter启用英文界面
  7. wan端口未连接怎么弄_WAN口未插网线怎么办? | 192路由网
  8. Minio介绍及使用
  9. 软件测试面试:电梯测试用例怎么写
  10. mysql数据库中添加emoji表情