Windows应用程序对键盘与鼠标的响应总结

MIT6.824-lab2D-2022(日志压缩详细讲解) 从paper中去讲解,并实现关于lab2D的代码。 阅读详情

键盘: 

1、键盘上每一个有意义的键都对应着一个唯一的标识值,称为扫描码。

2、WINDOWS 系统定义的与设备无关的键的标识,称为虚拟码。虚拟码是;一种与设备无关的键盘编码,它的值存放在键盘消息的wParam参数中,最常用的虚拟码;已经在windows.h中定义;

3、键盘消息可以分为两类,即按键消息和字符消息。按键消息又可分为两类:系统按键消息和非系统按键消息。

(系统消息对应与使用Alt键与相关输入键的组合产生的消息,一般由Windows系统内部直接处理应用程序一般不处理,如果应用程序处理了这些系统键消息,就要调用DefWindowPro()函数以便不影响Windows对他们的处理)

按键消息的两个变量wParam和lParam中包含了许多的重要信息,其中wParam参数包含了识别按下的键的虚键码。

在WinMain函数的消息循环中包含了TranslateMessage函数,它的主要功能是把按键消息转化为字符消息,但只有当键盘驱动程序把键盘字符映射成ASCII码后才能产生WM_CHAR消息。

例:

常用的虚拟码:VK_ENTER  Enter键  VK_SHIFT Shift键  等;

按键消息:WM_KEYDOWN 非系统 按下   WM_KEYUP  非系统  松开

                  WM_SYSKEYDOWN 系统 按下   WM_SYSKEYUP 系统 松开

字符消息:WM_CHAR 非系统 字符            WM_DEADCHAR   非系统   死字符

                   WM_SYSCHAR  系统 字符        WM_SYSDEADCHAR  系统   死字符

鼠标:

1、可以通过LoadCursor函数来加载光标资源

重点:能接收鼠标事件的窗口并不一定要求是活动窗口或者是具有输入焦点的窗口;

在鼠标消息中,参lParam包含了鼠标光标位置,lParam字的低位包含了鼠标光标位置的x坐标值,lParam 字的高位包含了鼠标光标位置的y值。参数wParam内包含了一个指示各种虚键状态的值。

2、对鼠标消息的处理,一般分为两种,一种是要对Shift和Ctrl键进行监测,另一种则不监测;

例如:

1:   case WM_LBUTTONDOWN:

        if((wParm&MK_CONTROL)&&(wParam & MK_SHIFT))  //Shift 和Ctrl都按下

      break;

2:  case WM_LBUTTONDOWN:

     ...

    break;

3、若要使窗口函数能接收鼠标双击产生的消息,则在注册窗口类时必须注明该窗口类具有CS_DBLCLKS属性

定义方式如下:

wndclass.style=CS_HREDRAW| CS_VREDRAW|CS_DBLCLKS;

4、对于非用户区鼠标消息,将送往函数DefWindowProc进行处理。

5、调用SetCapture()函数即可实现对鼠标的捕捉,如SetCapture(hWnd);就可以向句柄为hWnd的窗口发送所有的鼠标消息。当调用完后,通过ReleaseCapture()函数释放鼠标,以便其他窗口可以正常地接收鼠标信息。

【系统分析师】高分论文:论软件需求验证方法及应用 本文以某清算平台建设项目为例,探讨了软件需求验证方法的应用。该项目旨在隔离银行与支付公司的直接通信,满足央行监管要求。作为系统分析师,作者通过需求测试和需求评审两种方法确保需求质量。需求测试采用概念测试用例提前发现问题;需求评审通过正式与非正式形式多方确认需求。项目结合邮件评审、专家会议等方式,最终形成完善的需求文档。平台上线后运行良好,验证了需求管理的重要性。该案例表明,科学的需求验证是项目成功的关键保障。 阅读详情

相关推荐

海康视觉通讯配置

本文介绍了海康通讯管理中TCP和Modbus协议的配置方法。TCP通讯时,视觉系统作为服务器接收PLC客户端发送的触发信号,需注意十进制与十六进制字符串的转换。Modbus配置需填写PLC的IP地址和寄存器首地址,并预先定义整型变量。TCP通讯需开启16进制发送模式以避免数据格式问题。文章重点说明了不同通讯方式下的数据格式转换和参数设置要点。

A567852的博客 2244

Windows 触摸操作的响应及处理

这里的触摸,指的是支持触摸的显示器;另外一种触摸,指的是笔记本的触摸板,他们是不同的情况。 先看图: 笔记本的触摸板,在上下滑动的时候,发送 WM_MOUSEWHEEL,这和鼠标操作是一样的。而在触屏显示器上进行上下滑动,发送 WM_VSCROLL (前提是窗口有 WS_VSCROLL 样式) 笔记本的触摸板,在左右滑动的时候,发送 WM_MOUSEHWHEEL,鼠标不存在这个操作。而在

FUN 3659

鲁棒优化入门(6)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(上)

Matlab+Yalmip两阶段鲁棒优化通用编程指南(上篇),内容包括: ①.拿到一个复杂的两阶段鲁棒优化问题的分析步骤和方法。 ②.采用Yalmip工具箱中的uncertain函数和鲁棒优化模块求解两阶段鲁棒优化的子问题。 ③.Yalmip工具箱中的鲁棒优化模块和常规的求解思路有什么异同。 ④.使用KKT条件求解两阶段鲁棒优化的子问题,并使用C&CG算法进行迭代求解。

配电网和matlab的博客 1万+

鼠标消息处理

MFC简单鼠标消息处理操作

m0_63758151的博客 607

【医学影像】Deep Learning for Automatic Pneumonia Detection

写在前面的话: 这篇论文是北美放射学会(RSNA)在Kaggle平台上托管的肺炎区域检测挑战赛取得第二名成绩的解决方案。因为笔者需要用到其中的图像增强方案,因此本篇博客只介绍了数据集和图像增强,关于模型的改进和其它改进点没有涉及。 论文地址:https://arxiv.org/abs/2005.13899 代码地址:https://github.com/tatigabru/kaggle-rsna 比赛地址:https://www.kaggle.com/c/rsna-pneumonia-detection-c

chenzhoujian_的博客 1567

机器学习势能(MLPs) 第一章 基础理论与核心概念 第二章 数据生成与训练集构建

密度泛函理论(DFT)作为现代计算材料科学的基石,通过求解Kohn-Sham方程在电子结构层面提供可靠的势能面信息。然而,其计算复杂度随体系电子数呈O(N3) 至O(N4) 增长,对于包含数百个原子的体系,单点计算往往需消耗数小时至数天的计算资源。这一瓶颈严重限制了分子动力学模拟的时间尺度,传统DFT-MD通常仅能覆盖皮秒量级,远不足以观测扩散、相变等慢动力学过程。经验力场通过解析函数形式描述原子间相互作用,实现了经典力学的计算效率,但其参数化过程高度依赖物理直觉与经验调参。

VectorShift的博客 184

windows的鼠标、键盘消息(阅windows核心编程笔记)

一、基本概念:当系统初始化时,要建立一个特殊的线程,即原始输入线程(raw input thread,RIT)。此外,系统还要建立一个队列,称为系统硬件输入队列(System hardware input queue, SHIQ)。RIT和SHIQ构成系统硬件输入模型的核心。对鼠标消息,RIT只是确定是哪一个窗口在鼠标光标之下。RIT调用GetWindowThreadPro cessId来确定是哪

zhangyq73的专栏 4326

【Python LeetCode 专题】面试经典 150 题

面试经典 150 题

一杯水果茶!足矣~ 1173

计算机交互工作原理,键盘,鼠标与计算机之间的交互原理

键盘键盘(Keyboard)是常用的输入设备,它是由一组开关矩阵组成,包括数字键、字母键、符号键、功能键及控制键等。每一个按键在计算机中都有它的惟一代码。当按下某个键时,键盘接口将该键的二进制代码送入计算机主机中,并将按键字符显示在显示器上。当快速大量输入字符,主机来不及处理时,先将这些字符的代码送往内存的键盘缓冲区,然后再从该缓冲区中取出进行分析处理。键盘接口电路多采用单片微处理器,由它控制整个...

weixin_39832829的博客 3730

【Claude】Invalid API key 无效密钥报错已解决

API 拒绝了你提供的 key。最高频的根因是老的/被撤销的 key 藏在某处自动加载的配置文件里,而你对此不知情。→ 检查所有可能注入 key 的来源(.env.envrc、shell 配置、IDE 设置、)→ 清除无效来源 → 用/status验证。参考:Claude Code 官方《错误参考》"身份验证"章节、社区 Invalid API key 排查记录。

博客 7924

24. SAP 标准产品里使用 OData 服务的一些细节分享

笔者在编写使用事物码 SEGW 开发 SAP OData 服务的系列步骤时,但凡遇到技术上一些疑难问题,喜欢去参照 SAP 标准产品里是如何使用 OData 服务的,不少问题都可以去参考 SAP 标准产品的 OData 服务实现细节来解决。 因此本文记录笔者在编写本教程的过程中,曾经研究过的 SAP OData 服务实现的一些细节,把这些细节分享给大家,希望能起到参考作用。 同时,教程也不断收到一些朋友在评论区留言,对于不少留言的回复,我也是拿 SAP 标准 OData 服务的实现作为论据来回复的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2035

消息循环中的TranslateMessage函数和DispatchMessage函数

TranslateMessage函数函数功能描述:将虚拟键消息转换为字符消息。字符消息被送到调用线程的消息队列中,在下一次线程调用函数GetMessage或PeekMessage时被读出。 .函数原型:    BOOL TranslateMessage(  CONST MSG *lpMsg );.参数:    lpMsg         指向一个含有用GetMessage或PeekMe

Tech is Online(物联网技术传播) 3万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

实现Windows应用程序对键盘与鼠标的响应

 源文件代码://windows.h文件中包含应用程序中所需的数据类型和数据结构的定义#include"windows.h"#include"实验二.h"HMENU hmenu,haddmenu;LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明//---------以下初始化窗口类--------i

Listen1to2me3的专栏 2581

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

可视化:windows应用程序对键盘鼠标的响应

键盘与鼠标是windows应用程序的输入设备 键盘消息 按键后,电路产生编码,每个有意义的键都对应一个唯一的扫描码,按键或释放键会产生。但不同产家生产的设备产生的编码不同,所以用虚拟码(e.gVK_ENTER)统一表示,表示成设备无关的键。 按键消息过程: 设备驱动程序获取键的扫描码,将扫描码翻译为虚拟码。产生了一条含扫描码、虚拟码和其它按键相关信息的消息。 设备驱动程序将消息放到系统的...

wangqianqianya的博客 1128

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

第六章 Windows应用程序对键盘与鼠标的响应

转载于:https://www.cnblogs.com/wangprince2017/p/9236020.html

weixin_30598225的博客 240

第六章 Windows应用程序对键盘与鼠标的响应 P121 6-8

基于键盘与鼠标应用的程序设计 一、实验目的 1.掌握键盘与鼠标在应用程序中的消息响应机制。 二、实验内容及步骤 实验任务 1.熟悉键盘的消息响应; 2.熟悉鼠标的消息响应; 实验内容 设计一个窗口,再该窗口中练习键盘的响应,要求如下: (1)单机键盘上的向上箭头时,窗口中显示“You had hitted...

weixin_30480075的博客 527

Windows程序中的键盘与鼠标

<br />键盘在应用程序中的应用<br />键盘上的键在按下或释放某键时产生一个唯一的标识值(扫描码)。<br />扫描码是依赖于具体设备的,为达到设备无关性的要求,往往使用与具体设备无关的虚拟码,虚拟码是由Windows系统定义的与设备无关的键的标识。设备驱动程序截取键的扫描码将其翻译成虚拟码。<br />按下讲盘上的按键将产生一条消息,它包含扫描码、虚拟码以及其他与击键有关的消息。<br />虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的wParam参数中,用以标识哪一个键被按下或释放,最常

wuti_pl的专栏 804

Windows应用程序设计基础(鼠标 键盘 窗体数据交互)

C# Windows应用程序设计基础(鼠标 键盘 窗体数据交互)

in_kim的博客 714

3.键盘与鼠标消息处理

【代码】3.键盘与鼠标消息处理。

BSODExpert的博客 112

传递并响应Windows消息实例

VC6下建立一个“A    Simple    Win32     Application ”工程,命名为PeekMsgDemo 将第4章的CMyWnd加入工程,并从CMyWnd派生一个新类,命名为CMsgWnd // MsgWnd.h: interface for the CMsgWnd class. // ////////////////////////////////////////

假装狠牛逼 3585

Win32 SDK基础(13)—— 键盘和鼠标消息

一、键盘消息 1、键盘消息 WM_KEYDOWN —— 键盘按键按下时产生。 WM_KEYUP —— 键盘按键弹起时产生。 WM_SYSKEYDOWN —— 系统按键按下时产生,如ALT、F10等等 WM_SYSKEUP —— 系统放开时产生 WM_CHAR —— 字符消息 2、消息参数: 按键消息: WPARAM —— 按键的VirtualKey(虚拟键码) LPARAM —

Hyman的博客 3161

黄维通源码--对鼠标与键盘的响应

#include#includelong WINAPI WndProc(HWND,UINT,WPARAM,LPARAM);BOOL InitWindowsClass(HINSTANCE hInstance);BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);HWND hWndMain;int WINAPI WinMain(HINSTANC

1038

利用Windows绘制界面并且编写窗口过程函数

这篇blog主要是将的是如何实现窗口过程编程。 即通过窗口过程函数的编写来实现其如何处理消息的方式。 例如: #include #include /*LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ return DefWindowProc( hWnd, uMsg, wP

yangshuolll的专栏 1889

windows消息大全

鼠标位置end;消息中有什么?是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。wParam 通常是一个

redpetallsg的专栏 626

C#(二十八)之C#鼠标事件、键盘事件

C#

camellia的博客 6874

Windows 消息大全使用详解二

WM_MENURBUTTONUP = $0122;WM_MENUDRAG = $0123;WM_MENUGETOBJECT = $0124;WM_UNINITMENUPOPUP = $0125;WM_MENUCOMMAND = $0126;WM_CHANGEUISTATE = $0127;WM_UPDATEUISTATE = $0128;WM_QUERYUISTATE = $0129; WM_CT

LALAA的专栏 822
上一篇: 正确声明全局变量
下一篇: 设置半透明对话框
海浪
博客等级 码龄20年 27粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值