一、效果展示

直接上效果图:

二、利用XInput实现获取XBox游戏手柄数据

在网上搜寻了很久,发现方法可以对游戏手柄进行测试,但是MFC版本以及完全版的很少有比较完全的资料,因此作为新手的我,正在攻克这方面,写的不足请多包含!

  1. 首先我实验的版本是如图所示的游戏手柄:

  2. 开始读取游戏手柄的数据,在.cpp文件中创建一个线程,代码如下:
    //读取游戏手柄的线程
    UINT _cdecl CMFC_GameHandle2Dlg::ReadJoystickThread(LPVOID lpParm)
    {CMFC_GameHandle2Dlg *dlg = (CMFC_GameHandle2Dlg*)lpParm;XINPUT_GAMEPAD gamepad;CString temp;//识别游戏手柄是否插入,并读取数据while (XInputGetState(0,&(dlg->m_ControllerState)) == ERROR_SUCCESS ){LastLxDataLX = LxDataLX;LastLxDataLY = LxDataLY;LastLxDataRX = LxDataRX;LastLxDataRY = LxDataRY;gamepad = dlg->m_ControllerState.Gamepad;//上下左右按键(gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP) ? (dlg->IsPressed_upT()): (dlg->IsPressed_upF());(gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN) ? (dlg->IsPressed_downT()): (dlg->IsPressed_downF());(gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT)?(dlg->IsPressed_leftT()): (dlg->IsPressed_leftF());(gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT)?(dlg->IsPressed_rightT()): (dlg->IsPressed_rightF());(gamepad.wButtons & XINPUT_GAMEPAD_START)?(dlg->IsPressed_StartT()):(dlg->IsPressed_StartF());(gamepad.wButtons & XINPUT_GAMEPAD_BACK)?(dlg->IsPressed_BackT()):(dlg->IsPressed_BackF());(gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER)?(dlg->IsPressed_RLT()):(dlg->IsPressed_RLF());(gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER)?(dlg->IsPressed_RRT()):(dlg->IsPressed_RRF());if(gamepad.wButtons & XINPUT_GAMEPAD_A){dlg->IsPressed_AT();}else{dlg->IsPressed_AF();}(gamepad.wButtons & XINPUT_GAMEPAD_B)?(dlg->IsPressed_BT()):(dlg->IsPressed_BF());(gamepad.wButtons & XINPUT_GAMEPAD_X)?(dlg->IsPressed_XT()):(dlg->IsPressed_XF());(gamepad.wButtons & XINPUT_GAMEPAD_Y)?(dlg->IsPressed_YT()):(dlg->IsPressed_YF());//TZ轴,也是就是游戏手柄最上的两个按钮{LxDataTZ  =(gamepad.bRightTrigger)/1.7-(gamepad.bLeftTrigger)/1.7+360;dlg->DrawGradientColor1(210,LxDataTZ);dlg->ClearDrawGradientColor(510,LxDataTZ);}//摇杆{{LxDataLX = gamepad.sThumbLX/345 + 150;           LxDataLY = (-gamepad.sThumbLY)/345 + 525;    //gamepad.sThumbLY:32767LxDataRX = gamepad.sThumbRX/345 + 400;         LxDataRY = (-gamepad.sThumbRY)/345 + 525;if(LxDataRX > 500 && LxDataRY > 625 ){LxDataRX = 470;LxDataRY = 620;}if(LxDataRX < 0 && LxDataRY < 0){LxDataRX = 400;LxDataRY = 525;}dlg->ClearSmartEclise(LastLxDataLX ,LastLxDataLY);     //150,525dlg->ClearSmartEclise(LastLxDataRX ,LastLxDataRY);     //400,525 dlg->SetSmartEclise(LxDataLX  ,LxDataLY );        //75,525dlg->SetSmartEclise(LxDataRX ,LxDataRY);     //400,525           } }}return 0;
    }
  3. A、X、Y、B等一些按键我是通过重绘CButton类进行贴图按钮

三、 附带注意事项

1、在.h文件中需要添加一些条件:

#include "resource.h"      // 主符号
#include <XInput.h>
#include "afxwin.h"
#pragma comment(lib, "XInput.lib")  //添加依赖库

2、因为我这边采取的是直接按照我的页面进行的数值设置,所以一些需要进行数值微型调整!

四、附带代码下载

(1条消息) MFC识别XBox游戏手柄,并进行UI界面开发-单片机文档类资源-CSDN文库

MFC识别XBox游戏手柄,并进行UI界面开发相关推荐

  1. 【UI界面开发】基本组件概述

    文章目录 摘要 基本交互方式 基本交互内容 指针信号 按键信号 摘要 UI界面开发离不开各种UI组件的组合以及相互配合,实现需求.而各种各样的UI组件都有它们的共同特点. 本文将总结UI组件的基本特点 ...

  2. QT学习开发笔记(项目实战之智能家居物联 UI 界面开发 )

    智能家居物联 UI 界面开发 项目路径为 4/01_smarthome/01_smarthome/01_smarthome.pro,先看项目界面.项目界面如 下,采用暗黑主题设计,结合黄色作为亮色,让 ...

  3. 基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)

    摘要:本文详细介绍基于深度学习的中文车牌识别与管理系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中既可以选择需要识别的车牌视频.图片文件.批量图片进行检测识别,也 ...

  4. 安卓开发——UI界面开发

    功能说明 开发一个类似微信的主页面框架,UI布局为上中下结构,包含4个tab界面: 页面顶部为页面标题 页面底部为导航栏 页面中部为内容展示界面 开发技术 layout xml,控件,监听,fragm ...

  5. VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)

    前面一节中鸡啄米为大家简单介绍了如何创建Ribbon样式的应用程序框架,本节教程就来初步讲讲怎样为Ribbon Bar添加Ribbon控件. VS2010为Ribbon界面开发提供了Ribbon De ...

  6. HarmonyOS开发详解(四)——鸿蒙Page Ability功能及UI界面开发详解

    HarmonyOS里面的界面通过Page Ability和Java UI一起来实现:讲述Page Ability就离不开Ability.在HarmonyOS里面把各种具备的能力进行抽象,叫做Abili ...

  7. 【UI界面开发】基本组件——滑杆

    文章目录 摘要 Slider基本要素 UGUI之Slider Unity预设Slider组成分析 Inspector窗口参数 Slider常用成员 自制Slider 摘要 本文章是关于UGUI组件Sl ...

  8. 工作中的UI界面开发的知识点1

    1.//字符串转枚举 SceneType type = (SceneType)Enum.Parse(typeof(SceneType), sceneName); 2.鼠标移动图片 RectTransf ...

  9. 【UI界面开发】基本组件——按钮

    文章目录 摘要 Button基本要素 UGUI之Button 自定义Button 利用鼠标接口 自定义的键盘操作 摘要 本章就Button组件的一些知识进行总结.除了总结Unity自带的Button组 ...

最新文章

  1. 【机器学习基础】数学推导+纯Python实现机器学习算法18:奇异值分解SVD
  2. art-template-loader:template
  3. java复习2(编码)
  4. Python 每日定时查询数据库生成Excel报表,并群发邮件
  5. 4.7、Bootstrap V4自学之路------组件---广告屏
  6. 为什么要使用反射机制
  7. Linux CPU 信息查看
  8. max std value 宏_Rust Macro/宏 新手指南
  9. “越来越多的年轻人,都向往去体制里面工作”你怎么看?
  10. enctype=multipart/form-data的表单无法获取表单中除了type=file以外的其他参数 commons-fileupload 获取除file外其他参数...
  11. qkerntool使用说明
  12. java实现格拉布斯准则_格拉布斯准则附件.pdf
  13. 《软件工程(C编码实践篇)》学习总结
  14. 项目(百万并发网络通信架构)10.3---send()函数的极限测试
  15. 电商产品设计:后台订单管理设计
  16. XTTS,又一个值得你重视的Oracle数据库迁移升级利器
  17. matlab atem(),非特定人的英文
  18. python3之Scrapy+Selenium切换iframe抓取网易云音乐排行榜
  19. 林氏物语之春江花月.音乐随想系列之sleeping sun及诗经版译文
  20. WEKA——数据挖掘与机器学习工具

热门文章

  1. 计算机毕业设计Java校园便利店信息系统开发(源码+系统+mysql数据库+Lw文档)
  2. 管理MAC地址转发表
  3. 【Cocos Creator 3.x】如何进行光照烘焙(使用光照贴图)
  4. 刷下拉框diyiming好_决斗学院全新版本辅助一次性800号自动切换刷神器
  5. 苏州企业认定为高新技术企业后就可以享受所得税优惠吗
  6. 读取PC版微信数据库(电脑版微信数据库)内容
  7. sql字符串包含单引号
  8. qs.js库 使用方法
  9. 尼日利亚4g频段_世界各国全球主要4G频段资料.doc
  10. 在python中布尔表达式的应用——判断语句