WINDOWS 几种坐标系

【学习笔记】Windows GDI绘图(一)图形概述、直线、曲线和图形 Windows GDI(Graphics Device Interface图形设备接口)绘图学习笔记 阅读详情

在窗口中绘图

图形设备接口(GDI)与设备描述表(DC)

图形设备接口(GDI)
许多MS-DOS程序都直接往视频存储区或打印机端口输送数据, 
这种做法的不利之处在于需要对每种显示卡或打印机类型提供相应的驱动程序。
Windows则提供了一抽象的接口,称之为图形设备接口(GDI)。
Windows己经提供了各种显示卡及打印机的驱动程序,
这样我们的程序就可以不必关心与系统相连的显示卡及打印机的类型。
我们的程序可以通过调用GDI函数和硬件打交道,
而各种GDI函数会自动参考被称为设备环境(CDC)的数据结构。
Windows会自动将设备环境结构映射到相应的物理设备,并且会提供正确的输入输出指令。

设备描述表(DC)

在Windows环境中,各程序的输出必须限制在自己的窗口中。
GDI使用一种简单的机制保证在窗口中画图的各程序遵循这个规则。
这种机制即为设备描述表(DC);

当Windows程序在屏幕、打印机或其它设备上画图时,
它并不是将像素直接输出到设备上,而是将图绘制到由设备描述表表示的逻辑意义上的"显示平面"上去。

设备描述表是深寓于Windows中的一种数据结构,
它包含GDI需要的所有关于显示平面情况的描述字段,包括相连的物理设备和各种各样的状态信息。

设备描述表对象
在使用MFC编制Windows程序时,设备描述表具有更加突出的作用。
除了可作为通往各种设备的桥梁之外,设备描述表对象还封装了程序用来产生输出的GDI函数。
在MFC中,你不用捕获设备描述表句柄和调用GDI输出函数,至少不必直接捕获和调用,
而是通过创建一设备描述表对象并调用它的成员函数来画图。

设备描述表句柄
在平面上画图之前,Windows程序从GDI获取设备描述表句柄,
并在每次调用完GDI输出函数时将句柄返回给GDI。
在MFC应用程序中获取设备描述表的一种方法是调用CWnd::GetDC,
它返回指向表示Windows设备描述表的CDC对象的指针。
在画图完毕,要用CWnd::ReleaseDC释放指针(注:在OnPaint处理程序中,不用显示调用这两个函数)

CDC派生类
为了避免获取和释放设备描述表所带来的麻烦,
MFC提供了一些CDC派生类,如CPaintDC,CClientDC,CWindowDC这些类被设计为可直接进行实例化。
各个类的构造函数和析构函数调用相应的函数捕获和释放设备描述表,
从而便得设备描述表的使用非常方便简捷。

例如:
CPaintDC dc(this);
//Do some drawing
传送给类构造函数的指针确定了设备描述表所属的窗口。

设备描述表属性
当使用CDC输出函数在屏幕上画图时,
输出的某些特性并没有在函数调用过程中规定(采用系统默认的属性画图),
但我们可以通过设备描述表自身获得或得新设置属性。
MFC提供了获得和设置这些属性的函数,我们可以用这些函数方便地改变画图时的默认属性。
例如:
CDC::SetTextColor//设置文本颜色
CDC::GetTextColor//获得文本颜色
CDC::SetBkColor//设置背景颜色
CDC::SetBkMode//设置背景模式
CDC::SetMapMode//设置映射模式
CDC::CDC::SetROP2//设置绘图模式
CDC::MoveTo//当前位置
CDCL::SelectObject//当前画笔,当前画刷,当前字体

(如果想忽略背景色,可将背景设置为"Transparent",dc.SetBkMode(TRANSPARENT);)

SelectObject函数
最常用来定义设备描述表属性的CDC函数是SelectObject。
例如:
CPen pen(PS_SOLID,2,RGB(0,192,0));
CPen* pOldPen = dc->SelectObject(&pen);//把新的CDC对象选入设备描述表,同时保存旧的CDC对象
dc->Ellipse(0,0,100,100);
dc.SelectObject(pOldPen);//

绘图模式与SetROP2
GDI将像素点输出到逻辑平面上时,它不只是简单地输出像素点颜色。
相反,它能过一系列的布尔运算将输出像素点的颜色和目标位置上像素点的颜色合成一起。
它所使用的逻辑关系由设备描述表当前的绘图模式确定。
使用CDC::SetROP2(Set Raster Operation To)可更改绘图模式。
默认绘图模式为R2_COPYPEN,它将将像素点复制到显示平面上。

映射模式

默认映射模式
固定比例映射模式
可编程映射模式

简单地说,映射模式是设备描述表的属性,用于确定从逻辑坐标值到设备坐标值的转换方式。

默认的映射模式

默认的映射模式使MM_TEXT,它使以象素为单位的。X轴向左为正,Y轴向下为正。默认的坐标原点在左上角。

固定比例映射模式

固定比例的映射模式有MM_LOMETRIC、MM_HIMETRIC、MM_LOENGLISH、MM_HIENGLISH、MM_TWIPS种。
它们默认的坐标原点都使在左上角。其区别在于每一个逻辑单位对应的物理大小不一样。
所对用的逻辑单位分别为0.1毫米,0.01毫米,0.01英寸,0.001英寸,1/1440英寸(0.0007英寸)。

可变比例映射模式(可编程映射模式)

对于可变比例的映射模式用户可以自己定义一个逻辑单位代表的大小,其大小可以任意。
也可以让这个大小随环境改变而改变。有MM_ISOTROPIC,MM_ANISOTROPIC这两种映射模式。
其逻辑单位的大小等于视口范围和窗口范围的比值。
两者的不同在于前者要求X轴和Y轴的度量单位必须相同,而后者没有这样的限制。

 

可编程映射模式
MM_ISOTROPIC和MM_ANISOTROPIC是由用户决定从逻辑坐标值转换成设备坐标值的方式,
即是由用户决定一个逻辑单位等于多少个设备单位(cm,mm,m等),而不是由Windows决定。
所以被称之为可编程映射模式;
MM_ISOTROPIC和MM_ANISOTROPIC映射模式最常用于根据窗口尺寸按比例自动调节画图的输出大小的场合。

MM_ISOTROPIC和MM_ANISOTROPIC映射模式的区别
前者中X方向和Y方向具有同一个缩放比例因子,而后者两个方向可以单独缩放;

例子:
CRect rect;
GetClientRect(&rect);
dc.SetMapMode(MM_ISOTROPIC);
dc.SetWindowExt(500,500);//设置窗口范围,将窗口的逻辑尺寸高为500单位×500单位
dc.SetViewportExt(rect.Width(),rect.Height());//设置视口范围
dc.Ellipse(0,0,500,500);

注:窗口的尺寸以逻辑单位计算,视口的尺寸以设备单位或像素计算。
特别说明
MM_TEXT为默认映射模式,其原点在窗口的左上角,X轴的正向向右,Y轴的正向向下,
并且一个逻辑单位对应于设备坐标下的一个象素

其它映射模式则原点不变,只是Y轴会翻转使正向朝上,并且逻辑单位被按比例转换为实际距离大小,而不是像素数。
需要注意的是,使用公制映射模式(非默认映射模式)时,为使输出可见,Y坐标必须为负值。
例如:
dc.Rectangle(0,0,200,100);//默认模式下画图
dc.SetMapMode(MM_LOENGLISH);//改变映射模式
dc.Rectangle(0,0,200,-100);//画图

传送给CDC输出函数的是逻辑坐标值。
设备坐标值是指窗口中相应的像素点位置。

 


Windows中的几种坐标体系

1、屏幕坐标

屏幕坐标描述物理设备(显示器、打印机等)的一种坐标体系,
坐标原点在屏幕的左上角,X轴向右为正,Y轴向下为正。度量单位是象素。
原点、坐标轴方向、度量单位都是不能够改变的。

2、设备坐标(又称物理坐标)

设备坐标是描述在屏幕和打印机显示或打印的窗体的一种坐标体系。
默认的坐标原点是在其客户区的左上角。X轴向右为正,Y轴向下为正。
度量单位为象素。原点和坐标轴方向可以改变,但是度量单位不可以改变。

3、逻辑坐标

逻辑坐标是在程序中控制显示,打印使用的坐标体系。
该坐标系与定义的映射模式密切相关。默认的映射模式是MM_TEXT。
我们可以通过设置不同的映射模式来改变该坐标体系的默认行为。

注意:
首先,要记住两点:
1。设备坐标的(0, 0)点始终是客户区的左上角。 
2。我们在绘图时指定的点全部都是逻辑坐标点。

坐标转换
调用CDC::LPtoDP可以将逻辑坐标转换为设备坐标;
高用CDC::DPtoLP可以将设备坐标转换为逻辑坐标;

什么时候用什么坐标系

  • 可以认为CDC的所有成员函数都以逻辑坐标作为参数
  • 可以认为CWnd的所有成员函数都以设备坐标作为其参数
  • 所有选中测试操作中都应该考虑设备坐标。区域的定义应采用设备坐标。
    某些像CRect::PtInRect之类的函数只有在采用设备坐标参数时才会保证有正确的结果
  • 将一些需要长期使用的值用逻辑坐标或物理坐标来保存。
    如果用逻辑坐标来保存某点的坐标的话,那么只要用户对窗口进行一下滚动,该点的坐标就不再有效了。
  • 鼠标单击事件下得到的坐标都是设备坐标!

移动原点
CDC::SetViewportOrg()移动视口的原点 
CDC::SetWindwosOrg()移动窗口的原点
正常情况下,只能使用其中之一,同时使用两个会搞提一团糟。

获取设备信息
获得系统分辨率
CClientDC dc(this);
int cx = dc.GetDeviceCaps(HORZRES);
int cy = dc.GetDeviceCaps(VERTRES);

用GDI绘图

MFC的CDC类将相关的GDI函数封装在类成员函数中。
在设备描述表对象中或通过指向设备描述表对象的指针可以方便地调用这些函数

画线
dc.MoveTo(0,0);//设置当前位置
dc.LineTo(100,100);//指定一个线的终点位置

画圆
dc.Ellipse(0,0,100,100);
CRect rect(0,0,100,100);
dc.Ellipse(rect);

画矩形
dc.Rectangle(0,0,100,100);//画一个带直角的矩形

GDI画笔和CPen类
Windows用当前选入设备描述表的画笔绘制直线和曲线,
并给用Rectangle,Ellipse以及其他图形生成函数画出的图形镶画边框。
默认画笔画出的是一个像素点宽的黑色实线。
如果要改变画线方式,则需创建一个GDI画笔,并由CDC::SelectOjbect将它选设备描述表

MFC用类CPen表示GDI画笔。

创建画笔的方法
创建画笔的最简单的方法是构造一个CPen对象并把定义画笔所用的参数都传送给该对象
CPen pen(PS_SOLID,1,RGB(255,0,0));

创建画笔的第二种方法是构造 一个汉有初始化的CPen对象并调用CPen::CreatePen:
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));

创建画笔的第三种方法是构造一个没有初始化的CPen对象,向LOGPEN结构中填充描述画笔特性的参数
,然后调用CPen::CreatePenIndirect生成画笔
CPen pen;
LOGPEN lp;
lp.lognStyle = PS_SOLID;//样式
lp.lopnWidth.x = 1;//宽度
lp.lopnColor = RGB(255,0,0);//颜色
pen.CreatePenIndirect(&lp);

从以上的画笔定义可以看出,定义画笔需要三个特性:样式,宽度和颜色。
画笔的样式说明请参见MSDN

GDI画刷和CBrush类
在默认情况下,则Rectangle,Ellipse以及其它CDC函数画出的封闭图形填充着白色像素点。
通过创建GDI画刷并在画图之前将它选入设备描述表,可以改变图形的填充颜色。
MFC的CBrush类封装了GDI画刷。
画刷有三种基本类型:单色、带阴影和带图案。
单色画刷填充的单色。
阴影线画刷采用预先定义好的交叉线图案填充图形。
图案画刷用位图来填充图形。

创建单色画刷的方法类似于创建画笔,如下所示:
CBrush brush(RGB(255,0,0));
或
CBrush brush;
brush.CreateSolidBrush(RGB(255,0,0));

创建带阴影线画刷
CBrush brush(HS_DIAGCROSS,RGB(255,0,0));//阴影索引,COLORREF值
或
CBrush brush;
brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0));
HS_DIAGCROSS是可供选择的六种阴影线样式之一,其它样式请参见MSDN

注意:
在用阴影线画刷填充时,除非用CDC::SetBkColor改变设备描述表的当前背景色,
或用CDC::SetBkMode把背景模式OPAQUE改成TRANSPARENT,禁止背景填充,
否则WIndows就以默认的背景钯(白色)填充阴影色线间的空白处。

 

原文出处:http://blog.programfan.com/article.asp?id=19140

C#的GDI+绘图详解 /消除锯齿 或 AntiAlias。// 1.在窗体或控件的Paint事件中,用PaintEventArgs e 创建绘图对象 ---- 控件或窗体重绘时。//为控件创建绘图对象。//--------------------以上方法三选一。//2.创建绘图对象 panel1中绘图。 阅读详情

相关推荐

WIFI中CSI的读取

学习目标: 目前正在做基于WIFI的无设备定位,准备使用信道状态信息(CSI),学习一下。 目前采集数据环境已经搭建好,准备研究信号的预处理。 学习内容: 1、 信号的读取——read_bf_file函数的研究 2、 3、 4、 1. read_bf_file详解: %READ_BF_FILE Reads in a file of beamforming feedback logs. % This version uses the *C* version of read_bfee, ...

sz3076799的博客 8894

GDI 绘图

DC(Device Context): 绘图设备 HDC: 绘图设备句柄 GDI(Microsoft Graphics Device Interface) Win32提供的绘图API GDI 绘图 1、窗口句柄得到设备环境句柄HDC, 1、 采用BeginPaint获取HDC PAINTSTRUCT ps;// 保存 HDC hdc = ::BeginPaint( hwnd, &ps ); /* 此处添加绘图代码 */ ::EndPaint( hw...

sinat_38363122的博客 1618

可信数据空间关键技术和功能架构研究

可信数据空间(TDS)是实现数据安全共享的基础设施,通过数字合约和使用控制技术确保数据跨域流通的可信与安全。其架构包括服务平台和接入连接器,关键技术涵盖访问控制、隐私计算、区块链等。评估重点在于合规性、连接器能力、互联互通及安全体系。核心在于构建规则引擎而非简单数据汇聚,连接器开发比平台建设更重要。当前面临技术成本博弈、跨域身份互认等挑战,需平衡安全、性能与成本,推动数据要素市场发展。

逸尘的专栏 2227

VS2017中GDI+绘图轻松入门(1)

GDI+之前,我们先来解释一下,什么是GDI,G就是Graphic D就是Device I就是Interface,那放在一起就是绘图设备接口。所以GDI+就是GDI Plus,就好比我们的手机iPhone X8 后面跟一个IPhone8 Plus一样一样的,升级版。 GDI是用在VC中的,2001年微软整出了.net(C#,VB.net)都包含其中,又另外在GDI的基础上加强了一下,当然也是由于运...

河西~石头 1万+

ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】

ANSYS-CFX,计算时报错,内存参数报错,return code 1【终极解决方案】 在CFX计算时经常会遇到内存不足的错误报告,有的算例网格并不多也会出现这样的问题,本文就最近遇到的内存错误问题以及解决方法进行简单的总结,以供大家参考。 1 CFX-Solver Manager内存种类 打开Define Run,面板上的Partitioner、Solver、Interpolator选项中分别都有关于内存的设置选项。当出现内存不足错误时,应该设置哪一个选项的内存参数,要看是哪一部分的内存不足。 2 C

深海民工CFDer 3万+

Android 14安装的APK默认允许运行时权限

本文介绍了在Android系统中实现安装应用后自动授予运行时权限的方法。通过在安装完成广播中检测应用安装状态,调用新增的DefaultPermissionGrantPolicy.grantAppRuntimePermissions()函数来授予常规权限,并使用allowSpecialPermission()处理特殊权限(如安装未知应用和悬浮窗权限)。文章详细说明了如何修改DefaultPermissionGrantPolicy类,添加grantAppRuntimePermissions和grantRunti

热衷于Android Framework和系统APP的修改经验分享 686

GDI绘图的基本步骤

1、创建设备上下文(Device Context):使用CreateDC、GetDC或者BeginPaint函数创建设备上下文,它是GDI绘图的主要操作对象。2、创建画笔和画刷(Pen和Brush):使用CreatePen和CreateBrush等函数创建画笔和画刷对象,用于指定绘图的线条和填充样式。4、绘制图形:使用设备上下文的绘图函数,如LineTo、Rectangle、Ellipse等函数进行绘图操作。5、删除画笔和画刷:使用DeleteObject函数删除创建的画笔和画刷对象。

weixin_49146002的博客 707

重回童年的经典系列☀️|【炸弹人小游戏】制作过程+解析 | 收藏起来跟曾经的小伙伴一起梦回童年!

Unity,小游戏开发。 本篇文章对童年经典小游戏——炸弹超人进行制作和解析。不知道有没有勾起你童年的回忆呢!快来和我一起制作这个童年经典的小游戏吧! 敬请品尝!

努力前行,总会成为自己心中的那道光 13万+

几个WIindows函数。坐标转换

GetWindowRect()   得到的是在屏幕坐标系下的RECT;(即以屏幕左上角为原点)     GetClientRect()   得到的是在客户区坐标系下的RECT;   (即以所在窗口左上角为原点)     ScreenToClient()   就是把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标。 ClientToScreen()    GetCursorPos(

daojin505的专栏 188

【实战】LLaMA-Factory 如何做 LLM 的多轮对话微调

LLaMA-Factory 作为一个广受欢迎、易于使用的 LLM 微调框架,为开发者提供了便捷的途径来针对特定任务(包括多轮对话)优化模型。本文将深入探讨 LLaMA-Factory 如何支持多轮对话微调,涵盖其基本概念、数据准备、核心机制、评估方法等。简单来说,多轮对话是指包含两个或更多轮次(Turn)的交互过程,其中每一轮通常包含用户的一个输入和模型的一个输出。后续轮次的回应通常依赖于前面轮次的对话内容。模型需要理解并记忆对话历史。

kakaZhui的博客 1311

从零搭建运行Pytorch版pointNet++模型全流程及个性化数据集训练测试可视化

从零搭建运行Pytorch版pointNet++模型全流程及个性化数据集训练测试可视化

funfan的博客 9437

windows编程中关于设置映象模式的四个函数SetWindowOrg SetViewPortOrg SetMapMode SetWindowExtEx SetViewPortExtEx .

一、Windows中的映射模式  1、Windows定义映射模式的目的  经过我的综合,Windows定义映射模的目的有以下几个方面:1、不同人的使用习惯。不同国家的,不同地区,以及不同的人因为习惯喜欢用不同的度量单位,有的人人喜欢用英寸,而有的人喜欢用公制中的厘米,毫米等。其他的人又喜欢用另外一些单位。、2、使软件与硬件向分离开来。让开发的软件能够最大限度的与硬件无关。3、提供逻辑和物理的一

xuyongbeijing2008的专栏 1078

手把手教你学Simulink--电机控制架构与算法实现​场景示例:基于Simulink的电机速度环PID调节仿真

本文带你完成了电机速度环PID参数的科学整定,实现了:✅ 理解了速度环的级联系统特性与关键参数影响工程整定法(理论初值)系统辨识法(参数未知时)✅ PID Tuner自动调参(推荐!自动调参兼具快速性与鲁棒性✅ 学会了前馈补偿抗饱和等工程实用技巧。

MHD0815的博客 653

GetWindowRect GetClientRect

GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。     GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的。       ClientToSc

lcalqf的专栏 376

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

MFC中的坐标

Windows编程中的映射模式和坐标转换 一、Windows中的映射模式 1、Windows定义映射模式的目的 经过我的综合,Windows定义映射模的目的又以下几个方面:1、不同人的使用习惯。不同国家的,不同地区,以及不同的人因为习惯喜欢用不同的度量单位,有的人人喜欢用英寸,而有的人喜欢用公制中的厘米,毫米等。其他的人又喜欢用另外一些单位。、2、使软件与硬件向分离开来。让开发的软

zmr1991的专栏 1220

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

第3章,[标签 Win32] :Windows 坐标系,屏幕坐标系

Windows 程序设计

2401_82825368的博客 1032

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Windows GDI+坐标系统详解

Windows GDI+坐标系统解析。

smstong的成长轨迹 1万+

理解Windows坐标系概念及其转换

1. Windows坐标系统 坐标系主要分为两种: 逻辑坐标系:主要是在“虚拟界面”中绘图,是绘制到设备坐标系的准备阶段。 设备坐标系:由客户区坐标、窗口坐标、屏幕坐标组成,主要和显示设备有关。 在不同的空间中,各个坐标系及其坐标表示方法稍有不同。世界空间和页面空间的坐标系为平时熟悉的方式,x轴向右为正,y轴向上为正,设备空间中,y轴改为向下为正(要问为什么这么定,emm,自己问MS去)。 ...

Sudouble的专栏 1885

Windows 下的坐标系

这几天一直在看 Charles Petzold 的Programming Microsoft Windows with C#,有很多细节的东东,对偶等新手很容易搞混或搞错,所以作一总结。这篇文章主要关注 Windows 下的坐标系以及在不同坐标系下点的表示。 Windows 下有三种坐标系(如果算上 Desktop Coordinate 的话就是四种了): 1. Client Coordinate...

weixin_33920401的博客 381

Windows游戏开发——观察坐标系的变化

3D游戏物体的改变通过矩阵的线性变化方式,左乘最终变化矩阵(列向量的情况下).对于最终变化矩阵,是由世界矩阵(对于世界坐标系),观察矩阵(对应观察坐标系),投影矩阵(在3D空间到2D屏幕的投影变化)三者组合而来的。在一些游戏场景中,世界矩阵与投影矩阵在初始化时便被定义好了,而我们在游戏中改变的通常是观察坐标系,如CS中,鼠标移动对应着观察坐标系的旋转变化,键盘W触发的便是观察坐标系的平移变化。

killbibi的博客 586

Windows 编程基础:窗口坐标系

Windows 程序设计

2401_82825368的博客 676

Windows的三种坐标系:屏幕坐标系,非客户区坐标系,客户区坐标系

1. 屏幕坐标系:以屏幕的左上角为原点,如图所示GetWindowRect() 函数获得的 RECT 就是以屏幕坐标系算的。 2. 非客户区坐标系(窗口坐标系)包括标题栏的部分。GetWindowDC 返回的设备环境就是基于此坐标系,一般只在 WM_NCPAINT 消息中使用。 3. 客户区坐标系不包括标题栏,坐标的原点在标题栏下的客户区的左上角。BeginPaint 函数返回的设备环境是基...

u014712365的博客 3892
上一篇: WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标
下一篇: Google Hacking的实现以及应用
epluguo
博客等级 码龄18年 34粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值