简易入门MFC

MFC学习记录005——VS2019通过按钮拖动窗体(初学者详细步骤) MFC - 通过按钮拖动无界面的窗体 阅读详情
AI摘要

本文介绍了如何使用MFC创建一个简单的计算器项目,包括创建MFC工程项目、界面设计、控件事件处理等关键步骤。通过实际操作,帮助读者快速掌握MFC的基本用法。

工作需要用到MFC,需要能快速上手,中间碰到不懂的简单的看了下源码,参考了些资料。


目标:做一个简单的计算器,代码就不考虑了,主要强调如何上手MFC,和简单了解MFC的框架。


1.如何创建一个MFC工程项目
创建MFC的过程如下:(visual studio 2012)
1>.新建->项目:选择MFC应用程序,名称这里用test(随意,和后面代码那里一致)。然后点确定。

2>.出现MFC生成向导:这里选择基于对话框,其他默认。

2.界面设计方式
2.1.拖拉控件及修改空间属性
1>.界面设计主要是在这个资源文件中修改。
2>.控件在工具箱中拖拽出来放到界面上。

3>.修改控件属性
单击控件后,可以在属性中修改控件的属性。
常用的属性:
Caption 标题
ID 控件标识

2.2.修改控件布局
这个没查资料,感觉可以设置布局。
界面的左边和上方能控制水平和垂直方向上的自动对齐。
可以在设置好位置后,将控件移动对齐到这个方向的位置,后面拖动这个位置的坐标就可以进行整体对齐移动了。

3.控件的事件回调函数处理
双击控件,可自动跳转到点击控件的事件回调处理函数。
可以在跳转到的函数回调上编写处理代码:
void CtestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString str = NULL;
GetDlgItemText(IDC_EDIT1, str);
SetDlgItemText(IDC_EDIT1, str+_T("1"));
}
这里在界面上除自身的代码外比较常用的就是这些属性相关(设置和获取)的函数。
这部分可以通过搜索引擎或者MSDN解决。

4.粗略分析自动生成的代码
4.1.关于自动生成的几个类
这里可能涉及到框架的部分程序了,这里做简单的了解。
首先最简单的Dialog中间有这几个类:CAboutDlg,CtestApp,CtestDlg。
其中CAboutDlg类和CtestDlg类被放到了testDlg.cpp中实现。
1>.CAboutDlg
CAboutDlg是用于应用程序“关于”菜单项的 CAboutDlg 对话框。估计是这个关于的对话框。在.rc的资源中的dialog中的IDD_ABOUTBOX中可修改。。
这部分是CAboutDlg的代码,可以看出一个简单的对话框窗口:
1.继承CDialogEx类;
2.有自己的映射关系;
3.DoDataExchange函数;这个函数在MFC框架中的UpdateData会调用。
4.类中声明的IDD枚举???

class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
enum { IDD = IDD_ABOUTBOX };// 对话框数据

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 实现
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD){}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()

2>.CtestDlg
所以CtestDlg应该是主界面的代码。结构和上述类似。只是增加了几个消息回调函数。但中间有结果回调函数比较特殊。应该是和后面几个消息回调连着的,可能不需要给用户自定义,连名字都省略了= =
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
注:afx_msg 是个标识,来表示MFC的消息处理

OnQueryDragIcon从注释上意思:当用户拖动最小化窗口时系统调用此函数取得光标
OnPaint从注释上意思:来绘制该图标。对于使用文档/视图模型的 MFC 应用程序。在初始化后会向窗口发送WM_PAINT消息,然后框架自动回调。这部分的代码也是由框架封装好的CDialogEx::OnPaint(),可以跳转进去看看,用来绘制图形的。
OnSysCommand不详。。。
另外:BOOL CtestDlg::OnInitDialog()是初始化消息的回调函数。用来初始化窗口。

3>.CtestApp
CtestApp类在test.h/test.c中,继承了CWinApp,定义应用程序的类行为,且有唯一一个对象theApp,在一开始就会被构造。
这个类中的构造函数添加了支持重新启动管理器的flag。
另一个方法是初始化实例InitInstance。

这里需要提到MFC框架的入口和初始化过程:
theApp在一开始就被构造,初始化了一些变量,然后将当前应用指到本身。
MFC的入口在源代码的APPMODUL.CPP文件中的_tWinMain函数中。_tWinMain中调用了AfxWinMain函数。
AfxWinMain为一个MFC框架的 全局函数 。在这个函数中模仿了WIN32的创建一个应用的过程:
1.获得一个CWinThread和app的指针(CWinApp也是继承CWinThread的,通过宏可知这两个指针一样。)
2.通过APP指针初始化应用(InitApplication),初始化CWinThread指针的实例(InitInstance方法)。
InitApplication做框架的内部管理工作。
这里InitInstance方法就调用CtestApp重写的部分(这部分代码其实也是系统自动生成的)。这个函数完成了窗口CtestDlg创建,显示,并向窗口发送WM_PAINT消息的功能。
注:这里好像不同的写法(使用方式)中间的调用过程也不大一样。如果是前面那种方式在DoModal里就调用了DoDataExchange函数来加载资源??
3.运行theApp

4.2.关于函数回调部分的代码
前面说双击回调后,会自动跳转生成的代码。这里自动生成的部分主要有:
回调处理函数:
void CtestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
}

关系映射:
BEGIN_MESSAGE_MAP(CtestDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CtestDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CtestDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CtestDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CtestDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CtestDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON6, &CtestDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON7, &CtestDlg::OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON8, &CtestDlg::OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTON9, &CtestDlg::OnBnClickedButton9)
ON_BN_CLICKED(IDC_BUTTON10, &CtestDlg::OnBnClickedButton10)
END_MESSAGE_MAP()

声明:
afx_msg void OnEnChangeEdit1();

调到宏里面看看原理:(截取了一段button的)
// User Button Notification Codes
#define ON_BN_CLICKED(id, memberFxn) \
ON_CONTROL(BN_CLICKED, id, memberFxn)
#define ON_BN_DOUBLECLICKED(id, memberFxn) \
ON_CONTROL(BN_DOUBLECLICKED, id, memberFxn)
#define ON_BN_SETFOCUS(id, memberFxn) \
ON_CONTROL(BN_SETFOCUS, id, memberFxn)
#define ON_BN_KILLFOCUS(id, memberFxn) \
ON_CONTROL(BN_KILLFOCUS, id, memberFxn)

定义了几种动作的宏(每种控件间会有差异),将控件标识和对应的动作类型和对应的响应回调函数连接起来。宏里面的结构如下,看上去像一个表的形式。
// for general controls
#define ON_CONTROL(wNotifyCode, id, memberFxn) \
{ WM_COMMAND, (WORD)wNotifyCode, (WORD)id, (WORD)id, AfxSigCmd_v, \
(static_cast< AFX_PMSG > (memberFxn)) },

5.其他注意事项
5.1.关于命名的问题
命名的规则:


5.2.MFC自定义的类型
第一次用MFC中,出现了一些类型,比如CString,可以在afx.h头文件中查看它的定义。另外使用MSDN可以查看。
另外:这里要注意字符集的问题。可以用_T("XXXX")来统一字符集。

5.3.窗口中定义的控件
拖进界面生成的控件的资源被,按照一定的组织格式放在了test.rc这个文件中。MFC框架中在CtestApp::InitInstance()里就加载这个.rc的文件的部分并进行了显示。
注*:这里的控件也可在窗口创建的回调函数中创建。只不过这里的方法不同。

5.4.关于一些辅助的宏
看到了随便加进来一下:
①. TRACE
TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");
追踪路径,先看TRACE的定义:
#define TRACE ATLTRACE
#define ATLTRACE ATL::CTraceFileAndLineInfo(__FILE__, __LINE__)
void __cdecl operator()(
_In_ DWORD_PTR dwCategory,
_In_ UINT nLevel,
_In_z_ const char *pszFmt,
...) const
{
va_list ptr; va_start(ptr, pszFmt);
ATL::CTrace::s_trace.TraceV(m_pszFileName, m_nLineNo, dwCategory, nLevel, pszFmt, ptr);
va_end(ptr);
}
再往下好像封装进去了,大概可以通过这个宏,可以把追踪信息文件,行数,必要的提示,警告等级之类的都显示下来。
TRACE宏只对Debug 版本的工程产生作用。

②.ASSERT
编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是 异常处理 的一种高级形式。断言表示为一些 布尔表达式 ,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证, 因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。

看看MFC中的ASSERT。
#define ASSERT(f) DEBUG_ONLY((void) ((f) || !::AfxAssertFailedLine(THIS_FILE, __LINE__) || (AfxDebugBreak(), 0)))
#define DEBUG_ONLY(f) (f)
相当于DEBUG模式下,直接判断ASSERT中的表达式f是否满足条件。如果满足表达式满足,就会调用AfxAssertFailedLine,然后中断退出。

6.相关参考
VC++深入讲解

7.总结
在大致看完之后,MFC其实就是Windows下的API进行进一步的封装。如果直接在.rc文件中设计,只需添加对应的回调函数再加处理即可。这样比较快。
另外一种是对MFC提供出来的框架的部分进行重写(根据自己需求),但大体上也是封装Windows的API的过程,这样会相对麻烦一些。

VS2015之博大精深的MFC项目开发(一) not captured,就是当鼠标移出了对话框窗口客户区之外的时候,标题栏上的文字就不响应了(不响应鼠标移动消息了),离开窗口的话光标就无效了,光标在窗口内的话就响应鼠标移动消息,也就是说包含光标的窗口才能收到这个消息;the window that has captured the mouse,也就是把这个光标绑到这个窗口,离开窗口之后光标仍然有效。继续研究wParam参数,如何把按下左键拖动也能显示出来呢? 阅读详情

相关推荐

MFC入门教程

编写MFC程序,其实跟编写C++程序一样,在VS编译平台上新建项目,然后一直默认下一步就行,不过有其他需求则需要根据实际情况来添加。建好一个项目后,会出现两个界面,一个是显示窗口,一个是编程界面,类似LV中的前面板和程序框图。在界面右边有个工具箱,可以根据需要添加控件。 下面主要编写一个简单的计算器程序,实现对输入数的四则运算,主要步骤如下: 1、在对话框中放置6个按钮控件和3个编辑框控件

程序人生 6万+

C++学习| MFC简单入门

MFC、WIN32和QT的区别,MFC文件结构的解读,MFC实现简单的加法器。

qq_40306845的博客 1万+

基于VS2010平台的MFC入门编程——简易加法计算器

平台/工具:VS2010 目的:利用VS2010平台创建一个MFC工程,实现加法运算器的程序编写和界面设计 项目分析:实现加法计算有几个必要的因素——被加数、加数、和。被加数和加数需要输入,和需要输出显示。这几个因素都需要相应的控件来输入或显示,建立基于对话框的MFC应用程序后,需要分别添加相应的控件,配合一定的代码来实现简易加法计算器界面的编程设计 方法步骤: Step1:打开VS2010

gfy571127的博客 1万+

MFC编程入门级教程

MFC (Microsoft Foundation Classes) 是微软公司专门为C++开发者设计的一套应用程序框架和类库。它通过C++类的形式对Windows API进行了高度封装,简化了Windows应用程序的开发过程。MFC提供了一系列预定义的类,这些类对应于Windows编程中的各种基本元素,如窗口、菜单、对话框、控件等,同时也包含了应用程序框架的支持,如文档/视图体系结构、命令路由、消息映射机制等。

new9232的博客 2万+

C++的图像界面学习(MFC) 简单入门

有个大佬,写了一个入门日志,其实挺好的,只是因为缺少图,所以读起来相对有点费力些, (大佬日志,见:https://blog.youkuaiyun.com/Pepto_bismal/article/details/77725739) 本文,把他的整理了一下,(即使没有任何VS基础也能入门)给大家一个基础的认知,其实基础认知就够了剩下的内容,需要的时候再去查就好了 详细给了一些图片和解释(就是学习日志时的...

云端筑梦师 6万+

基于MFC的简易通讯录

通讯录的运行 一、功能 构思确定通讯录的功能 1. 基本功能 - 添加联系人 - 删除联系人 - 修改联系人 - 显示联系人信息 2. 附加功能 - 查找联系人 - 读取保存联系人信息 3. 创意小功能 - 显示备注 - 电话号码必须为11位 - 双击报表视图中联系人即可修改联系...

weixin_43978807的博客 7661

MFC入门(简易计算器)

    对于刚刚上手MFC或C++的朋友们,通过程序编写制作一个简易的计算器是一个不错的选择。以下我将介绍简易计算器的设计流程,它能实现通过键盘输入或按键输入完成四则运算,以下通过VS2017的MFC应用程序模块完成。 1. 创建项目     通过文件->新建->项目建立MFC应用程序,在应用程序类型选择基于对话框,点击右下角的“完成”即可创建项目。 2. 界面设计     首先打开...

踏梦远行 1万+

MFC 编程从入门到精通

MFC 从入门到精通 由于本科学的是电子信息专业,也就开了一门C,毕业居然去找了一份苦逼的程序猿工作,现在过上了比大学还苦逼的生活,啥都不懂,啥都要学。从最开始的VS是什么鬼都不知道的,到自己的第一个控制台程序,再到自己的第一个MFC程序;从最开始的断点是啥玩意儿,到自己一步步Debug自己的Code。发现自己真傻,隔行如隔山都不知道,还偏要一条路走到黑,梦想着有一天能用自己学的,开发一个牛逼的软...

GODOOOO的博客 1万+

mfc实现c语言的注释,简易入门MFC

工作需要用到MFC,需要能快速上手,中间碰到不懂的简单的看了下源码,参考了些资料。目标:做一个简单的计算器,代码就不考虑了,主要强调如何上手MFC,和简单了解MFC的框架。1.如何创建一个MFC工程项目创建MFC的过程如下:(visual studio 2012)1>.新建->项目:选择MFC应用程序,名称这里用test(随意,和后面代码那里一致)。然后点确定。2>.出现MFC生...

weixin_31688273的博客 751

基于MFC的九宫格简易计算器实现与详解

简介:本文详细介绍如何使用MFC(Microsoft Foundation Classes)在Visual Studio 2019环境下开发一个具备基本四则运算功能的九宫格简易计算器,支持小数点后六位精度计算。项目基于C++语言和MFC框架,利用CDialog、CButton和CEdit等核心类构建用户界面,通过消息映射机制实现按钮事件响应与数学逻辑处理。内容涵盖界面设计、控件绑定、运算逻辑实现、输入合法性校验及附加功能如清零与历史记录管理,适合作为C++和Windows桌面应用开发的入门实战案例。

weixin_36277197的博客 496

MFC基础教程:创建简易计算器

MFC,即Microsoft Foundation Classes,是微软公司提供的一套基于C++语言的类库,旨在简化Windows应用程序的开发过程。MFC类库封装了Windows API,通过面向对象的方式来构建应用程序。它提供了一组丰富的预定义类,这些类覆盖了从窗口管理、图形设备接口(GDI)、用户界面(UI)控件到数据处理等各个方面的功能。MFC的应用使得开发者能够专注于应用程序的逻辑设计,而不是底层的系统调用细节。C++是一种静态类型、编译式、通用编程语言。

weixin_28809949的博客 1105

MFC入门,做一个简易的计算器(C++)

MFC:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。 刚刚接触这个,跟着网上的教程做一个简易的加法计算器。 ...

kangjielearning的博客 2608

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

01 MFC 入门 简易程序 HelloWorld窗口

#include<afxwin.h>//MFC核心头文件 //应用程序对象,代表程序 class MyApp :public CWinApp { //虚方法重新写 virtual BOOL InitInstance() { //new窗口对象 CFrameWnd *pWnd = new CFrameWnd; //创建窗口 pWnd->Create(NULL, L"Hello World!"); //显示窗口 pWnd->ShowWindow(S

Write the Code. 506

Ubuntu 22.04 “软件与更新”装了NVIDIA驱动,WiFi等设备不见了

在Win10装了Ubuntu22.04的双系统,台式机里面有NVIDIA 3080Ti的独立显卡,Ubuntu默认使用的nouveau驱动,需要更换成NVIDIA相应的驱动,在软件和更新里面一键安装了NVIDIA-driver-535-server之后,发现wifi、蓝牙等设备消失了。这个问题的根源据说跟这个nouveau驱动有关,希望linux社区可以解决这个问题。命令安装后 sudo reboot就可以重新看到WiFi以及蓝牙等设备图标了。然后用U盘拷贝到不能上网的Ubuntu22.04系统上,利用。

me_ysd的博客 5855

【反封禁策略】集成 Undetected-Chromedriver:让 Browser-Use 绕过 Cloudflare 五秒盾

摘要:AI Agent如何突破Cloudflare检测的实战指南 本文针对AI Agent在Cloudflare检测下频繁受阻的问题,深入分析了undetected-chromedriver的工作原理与局限性。文章指出,Cloudflare 2026年的检测体系已升级为"浏览器指纹+IP信誉+协议指纹+行为模式"的多维交叉验证,单一伪装方案难以奏效。 核心内容包括: undetected-chromedriver的三层补丁体系解析 v2与v3版本的适用场景对比 两种Browser-Use集成方案:Selen

ZDQ58818的博客 284

MFC入门操作 --- 简易计算器制作

转:MFC入门教程 编写MFC程序,其实跟编写C++程序一样,在VS编译平台上新建项目,然后一直默认下一步就行,不过有其他需求则需要根据实际情况来添加。建好一个项目后,会出现两个界面,一个是显示窗口,一个是编程界面,类似LV中的前面板和程序框图。在界面右边有个工具箱,可以根据需要添加控件。 下面主要编写一个简单的计算器程序,实现对输入数的四则运算,主要步骤如下: 1、在对话框中放置6个...

breeze_blows的博客 8804

【项目实战】AES实施应符合NIST密码算法验证程序

AES由美国国家标准与技术研究院(NIST)制定。NIST是负责开发和维护美国政府使用的技术标准的机构,包括加密标准。

奶爸的编程之路,也就一周冷个三天 766

零基础做简易计算器超详细步骤 | MFC | Qt5 | C++ | Python | VS2017 | 温故而知新(上)

目录1 前言2 新建MFC项目3 计算器界面设计4 简易计算器代码5 运行效果6 碎碎念 1 前言 MFC版本:零基础做简易计算器 | MFC | Qt5 | C++ | Python | VS2017 | 温故而知新(上) Qt版本:零基础做简易计算器 | MFC | Qt5 | C++ | Python | VS2017 | 温故而知新(下) 在VS2017中,结合MFC做一个简易计算器。 全过程记录在此文,每一步都很详细。 小声哔哔:因为很简单,所以步骤不多。 适合新手用来熟悉MFC的基本操作。 由于

不唐 2516

【电源专题】Type-C母座外壳直接接主板GND还是接RC呢?别再纠结了!

Type-C屏蔽壳接地这件事,没有唯一标准答案。符合规范、贴合产品、能过认证,就是最优解。希望这篇文章能帮你理清思路。

一点硬件 601

【异常】DeepSeek API HTTP 401 认证失败错误完整排查与解决方案

摘要:本文针对DeepSeek API开发中的HTTP 401认证失败错误进行深度解析,指出该错误属于不可重试的认证类问题。文章首先拆解错误日志关键字段,区分401与其他API错误的本质差异。随后提供优先级排序的全链路解决方案:1)检查API密钥有效性;2)规范请求头认证格式;3)排查账户权限状态;4)验证请求环境配置。最后建议通过新建测试密钥、使用官方示例代码或联系技术支持进行兜底处理。全文采用技术脱敏处理,为开发者提供系统性的401错误排查指南。(149字)

奶爸的编程之路,也就一周冷个三天 1530

简易计算器的实现(MFC)

一开始的思路是将数字栈和运算符栈设置在全局区,一边输入一边进栈处理。但是这样必然导致需要一个历史记录容器进行存储历史操作,反而使问题复杂化了,因此将数字栈和运算符栈设置为局部变量。

m0_61219098的博客 3091

爬虫实战:拆解WASM加密参数,破局2026电商动态接口反爬(实测某头部电商可用)

sign和wasm_token,而且每次请求这两个参数都在动态变化。用常规的参数拼接、MD5加密尝试还原,结果全是403;反编译前端JS,发现核心加密逻辑被打包成了.wasm,把关键参数加密、签名逻辑藏在二进制模块里,让爬虫无法直接逆向JS拿到加密规则。前后折腾了5天,从WASM文件解析、JS与WASM交互逻辑拆解,到本地还原加密参数、实战验证,踩了无数坑(比如WASM版本不兼容、内存数据读取失败、加密依赖环境缺失),最终成功还原了加密流程,稳定爬取商品详情、价格、销量等核心数据,连续运行72小时无封禁。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1913

MFC基础入门

VS2019中MFC开发入门

Star_ID的博客 1万+

【Bug已解决】npm install -g @anthropic-ai/claude-code 出现 EACCES: permission denied 解决方案

方案适用场景推荐指数nvm 管理 Node长期开发环境,一次配置永久生效⭐⭐⭐⭐⭐修改 npm 全局目录不想引入 nvm,快速解决⭐⭐⭐⭐修复现有目录权限之前用过 sudo 装包,需要修复⭐⭐⭐Windows 管理员/改目录Windows 平台专用⭐⭐⭐⭐官方原生安装脚本想彻底避开 npm 权限问题⭐⭐⭐⭐报的本质是npm 全局安装目录的属主权限与当前执行用户不匹配,而不是 npm 或 Claude Code 本身有问题。不要用sudo"强行"解决。

一键难忘的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 如何自定义一个通信协议
下一篇: USB HID设备数据的读取
忧愁的awe
博客等级 码龄14年 274粉丝 46原创
评论 14
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值