MFC编程基础

MFC编程基础

   一、MFC类库概述

MFC(Microsoft Foundation class)微软基本类(库),有时候也有人叫做微软基本类库,因为它确实是一个类库(物理上讲),而且非常庞大;它也是一个面向对象的应用程序架构(逻辑上),程序员利用它可以很方便搭建应用程序框架。MFC结合了面向对象的编程技术和WINDOWS消息驱动的编程技术,并封装了WIN32API,其设计好处:消除了WIN32API的复杂性,封装了WIN32API,统一了程序的概念,而且可扩展。MFC由AFX项目小组进化而来,还有一些AFX代码,如AfxMessageBox,AFxGetApp等。编写MFC类库的主要目的是为了软件的复用。

查阅MSDN,简单介绍CString类。

 

    二、MFC基础类简介

 

MFC框架图(太大,略,见MSDN)

 

1. 根类:CObject类

是大多数MFC中大多数类和用户自定义类的根类,为程序员提供了进入所编写程序的许多公用操作如:对象的建立和删除,序列化支持,对象的诊断输出等。

 

2. 应用程序结构类:

命令发送类(CCmdTarget):该类是CObject类的子类,是MFC中具有消息映射属性类的基类。当对象接收到消息以后,消息映射调用相关联的函数对消息进行处理。从他派生的类有:窗口类(CWnd)、应用程序类(CWinApp)、文档类(CDoc)、视图类(CView)以及框架窗口类(CFrameWnd)。

窗口应用程序类(CWinApp):每个应用程序只有一个应用程序对象,在运行程序中该对象和其他对象相互协调。

文档/视图类:文档对象由文档模板创建,管理应用程序的数据。视窗对象表示一个窗口的客户区,显示文档数据并允许用户与之交互。

文档模板类(CDocTemplate):文档模板协调文档、视图和框架窗口的创建。

线程支持类(CWinThread):所有线程的基类,可直接使用。应用程序类(CWinApp)就是由他派生来的。

 

3.  可视对象类

窗口类(CWnd):提供了MFC所有窗口类的基本功能。创建窗口要分两部分进行:首先引入构造函数,构造一个CWnd对象;调用Create函数建立Windows窗口并将它连接到CWnd对象上。由他派生的子类有:框架窗口类:SDI应用程序主框架的基类、多文档框架窗口类(CMDIFrameWnd):MDI应用程序主框架的基类、多文档子对象类(CMDIChildWnd):MDI应用程序框架的基类。

视图类(CView):管理框架窗口客户区和显示文档数据并接收输入的客户区。由他派生的子类有:CScrollView类:具有滚动功能的视图类、 CFormView类 :在对话资源中定义的滚动视图类、CEditView 类:具有文本编辑,查找,替换和滚动功能的视图类、CListView类:包含Windows列表控件的视图类、 CTreeView类:包含树形察看控件的视图类。

菜单类(CMenu):Cobject的子类,用于管理菜单。

对话框类(CDialog):因为对话框是一个特殊的窗口,所以该类是从CWnd的派生类。由他派生出来的子类有:CFileDialog类:提供打开或保存一个文件所使用的对话框;CColorDialog 类:提供选择颜色的标准对话框;CFontDialog类:同样,它是用来提供选择一种字体的标准对话框;CPrintDialog 类:提供打印一个文件的标准对话框;CFindReplaceDialog类:提供查找或替换的标准对话框;

 

4.  控件类

包括如下类,使用这些类可建立静态文本、命令按钮、位图按钮、列表框等。

CStatic类:静态文本空间窗口,用于标注、分隔对话框和窗口中的其他控件;

CButton类:按钮空间窗口,为对话框或窗口中的按钮、检查框或者单选框提供接口;

CEdit类:文本编辑对话窗口,用于接受用户的文本输入;

CScrollBar类:滚动条控件窗口,提供控制条的功能,用于对话框或窗口中的一个控件,通过它实现在一定范围内定位;

CRichEditCtrl类:多信息编辑控件;

CProgressCtrl类:进程指示控件窗口;

CCombBox类:组合框,由一个文本编辑控件和一个列表框组成;

CBitmapButton类:带有位图而非文字标题的按钮;

CSpinButtonCtrl类:带有双箭头按钮,点击某个箭头用于增大或减小某个值;

CAnimateCtrl类:动画显示,用于显示简单的video图像;

CToolTip类:一个小的弹出式窗口,用于提示应用程序中某个工具的作用;

CHotKeyCtrl类:使用户创建一热键,迅速地执行某项操作;

CTreeCtrl类:树形察看控件;

CListCtrl类:管理由图标和标签组成的列表项;

CHeaderCtrl类:显示列标题或标签。

 

5.  控件条类

指的是连接在主窗口框架顶部或底部的小窗口。他有以下相关的派生类:

CStatusBar类:状态条控件窗口的基类;

CToolBar类:包含非基于HWND的位图式命令按钮的工具条控件窗口;

CDialogBar类:控制条形式的非模式对话框。

 

6.  绘图工具类CDdiObject

包括一下派生类:

CBitmap类:封装一个GDI位图,提供操作位图的接口;

CBrush类:封装一个GDI画刷,可被选择为设备描述表的当前画刷;

CFont类:封装一个GDI字体,可被设备描述表的当前字体;

CPalate类:封装一个GDI调色板,可被设备描述表的当前调色表;

CPen类:封装一个GDI画笔,可被设备描述表的当前画笔;

 

7.  设备情景对象类CDC

是Cobject类的子类,和它的派生类支持设备情景对象。它的子类有:

CPaintDC类:设备情景对象类;

CClientDC类:窗口客户区设备情景对象类,如响应鼠标点击进行绘图等;

CWindowsDC类:整个窗口的设备情景对象类;

CMetaFileDC类:元文件设备情景对象类。

 

8.  数据类型类

CString类:字符串类;

CTime类:存放绝对日期时间类;

COleDateTime类:封装OLE自动化中使用的DATE数据类型,包含日期和时间;

CPoint类:存放坐标(x,y);

CSize类:存放距离或者相对位置;

CRect类:存放矩形区域的坐标,类似与windows的RECT;

 

9.  通用类

文件输入/输出类:CFile类和CArchive类

CFile类:提供访问磁盘二进制文件的接口;

CMemFile类:提供访问内存文件的接口;

CStudioFile类:提供访问缓存磁盘文件的接口;

CArchive类:与CFile类一起通过序列化实现对象的永久存储;

 

10.   模板集合类

CArray类:提供任意的类型数组的模板类;

CList类:任意类型的列表模板类;

CMap类:映射任意关系类型的模板类;

CTypedPtrList类:负责将对象指针存入列表中;

CTypedPtrArray类:负责将对象指针存入数组中;

 

11.   异常类

是所有异常子类的基类。派生类有:

CArchiveException类:表示文档序列化异常;

CFileException类:有关文件的异常;

CMemException类:内存不足产生的异常;

CNotSupportedException类:使用不支持特性产生的异常;

CUseException类:停止用户初始化操作的异常;

COleException类:表示于OLE有关的异常;

 

12.   调试支持类

CDumpContext类:提供诊断转储(diagnostic dump)目标;

CMemoryState类:表示内存的使用状态。

 

13.   ODBC数据库类

包括以下子类:

CDatabase类:封装与数据源的链接,通过此链接应用程序可以在数据源上进行操作;

CRecordSet类:封装一组从数据源选出的记录集;

CRecordView类:提供直接链接记录集对象的格式视图;

 

14.   OLE类

九个类组成层次结构分为三类

a、  OLE容器类

COleDocument类:用于实现复合文档,是容器文档的基类;

COleItem类:文档项的基类;

COleException类:表示与OLE操作有关的异常情况;

COleClientDoc类和COleClientItem类为支持OLE的客户类。

 

b、  OLE服务器类

COleServerDoc类:服务器应用程序文档类基类;

COleServerItem类:表示与COleServerDoc类的接口;

COleTemplateServer类:创建由OLE可视编辑服务器、自动化服务器和链接容器使用的文档。

 

c、  ActiveX控件类

COleControlModule类:用于开发ActiveX控件模块对象,提供成员函数来初始化ActiveX控件模块;

COleControl类:用于开发ActiveX控件;

CConnectionPoint类:用于定义与其它ActiveX对象通信的接口类型。

 

 

MFC的这些类本质上都是对Win32对象的封装,很多Win32对象都有对应的MFC类与之对应。如:

 

Win32对象

MFC类

 

Win32对象

MFC类

HWND

CWnd

 

HBRUSH

CBrush

RECT

CRect

 

HPEN

CPen

POINT

CPoint

 

HFONT

CFont

SIZE

CSize

 

HBITMAP

CBitmap

 

 

 

 

 

 

可以使用FromHandle函数将一个Win32对象转换成MFC类对象。如:

static CWnd* PASCAL CWnd ::FromHandle( HWND hWnd );

static CDC* PASCAL CDC ::FromHandle( HDC hDC );

static CBrush* PASCAL CBrush::FromHandle( HBRUSH hBrush );

static CFont* PASCAL CFont::FromHandle(HFONT hFont);

 

三、Windows资源

 

凡是提供给Windows应用程序运行时,所使用到的东西统称为资源。包括加速键、位图、光标、对话框、图标、菜单、字符串等等。在VC编写相关Windows应用程序的时候在资源文件(Resource File)中都要对他们进行编辑,定义。

以下对四种比较常用的资源添加、使用举例说明:

 

1、  加速键资源:也叫快捷键。方便用户进行比较常见的应用程序操作。应用程序在进入消息循环之前调用LoadAccelerator(hInstance,(LPCTSTR)strTablename)加载加速键表(简单的进行翻译:某组合键在该应用程序中代表什么含义。)TranslateAccelerator(msg.hwnd, hAccelTable, &msg)

其中的ID代表某一个菜单的资源ID号,Key代表用户自定义的组合键:Ctrl+?,Alt+?等。

 

2、  字符串资源:应用程序所使用到的字符串标识符,如对话框标题,提示给用户的文本信息等等。使用方法:在字符串表(String Table)中定义相应的字符串资源,可以使用程序员需要的任何序言,在需要用到的时候使用LoadString加载他们既可。

 

3、  菜单资源:应用程序提供给用户主要功能的体现,也是应用程序窗口的重要组成部分。程序设计者可以根据需要进行订制。使用方法:使用VC界面Resouce File界面中Menu项,进行菜单编辑并添加菜单处理函数。

4、  图标资源:代表应用程序的位图,可以进行绘制,在窗口的注册函数中进行加载。

 

5、  对话框资源:特殊的窗口,放置控件等基本元素,方便用户和应用程序进行交互。使用方法:添加对话框,放置控件以及编写相关控件功能处理函数。

 

作业:

1、  将时钟程序移植到SDI项目中

2、  复习Win32和MFC编程知识。

VS2010之MFC入门到精通教程的pdf,共306页 ,10大章节,55小节。完整有图版 第一部分:VS2010/MFC 开发环境 VS2010/MFC 编程入门之前言 VS2010/MFC 编程入门之一(VS2010 与MSDN 安装过程图解) 第二部分:VS2010/MFC 应用程序框架 VS2010/MFC 编程入门之二(利用MFC 向导生成单文档应用程序框架) VS2010/MFC 编程入门之三(VS2010 应用程序工程中文件的组成结构) VS2010/MFC 编程入门之四(MFC 应用程序框架分析) VS2010/MFC 编程入门之五(MFC 消息映射机制概述) 第三部分:对话框 VS2010/MFC 编程入门之六(对话框:创建对话框模板和修改对话框属性) VS2010/MFC 编程入门之七(对话框:为对话框添加控件) VS2010/MFC 编程入门之八(对话框:创建对话框和添加控件变量) VS2010/MFC 编程入门之九(对话框:为控件添加消息处理函数) VS2010/MFC 编程入门之十(对话框:设置对话框控件的Tab 顺序) VS2010/MFC 编程入门之十一(对话框:模态对话框及其弹出过程) VS2010/MFC 编程入门之十二(对话框:非模态对话框的创建及显示) VS2010/MFC 编程入门之十三(对话框:属性页对话框及相关的介绍) VS2010/MFC 编程入门之十四(对话框:向导对话框的创建及显示) VS2010/MFC 编程入门之十五(对话框:一般属性页对话框的创建及显示) VS2010/MFC 编程入门之十六(对话框:消息对话框) VS2010/MFC 编程入门之十七(对话框:文件对话框) VS2010/MFC 编程入门之十八(对话框:字体对话框) VS2010/MFC 编程入门之十九(对话框:颜色对话框) 第四部分:常用控件 VS2010/MFC 编程入门之二十(常用控件:静态文本框) VS2010/MFC 编程入门之二十一(常用控件:编辑框Edit Control) VS2010/MFC 编程入门之二十二(常用控件:按钮控件Button、Radio Button 和Check Box) VS2010/MFC 编程入门之二十三(常用控件:按钮控件的编程实例) VS2010/MFC 编程入门之二十四(常用控件:列表框控件ListBox) VS2010/MFC 编程入门之二十五(常用控件:组合框控件Combo Box) VS2010/MFC 编程入门之二十六(常用控件:滚动条控件Scroll Bar) VS2010/MFC 编程入门之二十七(常用控件:图片控件Picture Control) VS2010/MFC 编程入门之二十八(常用控件:列表视图控件List Control 上) VS2010/MFC 编程入门之二十九(常用控件:列表视图控件List Control 下) VS2010/MFC 编程入门之三十(常用控件:树形控件Tree Control 上) VS2010/MFC 编程入门之三十一(常用控件:树形控件Tree Control 下) VS2010/MFC 编程入门之三十二(常用控件:标签控件Tab Control 上) VS2010/MFC 编程入门之三十三(常用控件:标签控件Tab Control 下) 第五部分:菜单、工具栏与状态栏 VS2010/MFC 编程入门之三十四(菜单:VS2010 菜单资源详解) VS2010/MFC 编程入门之三十五(菜单:菜单及CMenu 的使用) VS2010/MFC 编程入门之三十六(工具栏:工具栏资源及CToolBar ) VS2010/MFC 编程入门之三十七(工具栏:工具栏的创建、停靠与使用) VS2010/MFC 编程入门之三十八(状态栏的使用详解) 第六部分:文档、视图和框架 VS2010/MFC 编程入门之三十九(文档、视图和框架:概述) VS2010/MFC 编程入门之四十(文档、视图和框架:各对象之间的关系) VS2010/MFC 编程入门之四十一(文档、视图和框架:分割窗口) 第七部分:MFC 常用 VS2010/MFC 编程入门之四十二(MFC 常用:CString ) VS2010/MFC 编程入门之四十三(MFC 常用:CTime 和CTimeSpan ) VS2010/MFC 编程入门之四十四(MFC 常用:定时器Timer) VS2010/MFC 编程入门之四十五(MFC 常用:CFile 文件操作) VS2010/MFC 编程入门之四十六(MFC 常用MFC 异常处理) 第八部分:字体和文本输出 VS2010/MFC 编程入门之四十七(字体和文本输出:CFont 字体) VS2010/MFC 编程入门之四十八(字体和文本输出:文本输出) 第九部分:图形图像 VS2010/MFC 编程入门之四十九(图形图像:CDC 及其屏幕绘图函数) VS2010/MFC 编程入门之五十(图形图像:GDI 对象之画笔CPen) VS2010/MFC 编程入门之五十一(图形图像:GDI 对象之画刷CBrush) 第十部分:Ribbon 界面开发 VS2010/MFC 编程入门之五十二(Ribbon 界面开发:创建Ribbon 样式的应用程序框架) VS2010/MFC 编程入门之五十三(Ribbon 界面开发:为Ribbon Bar 添加控件) VS2010/MFC 编程入门之五十四(Ribbon 界面开发:使用更多控件并为控件添加消息处理函数)
目 录 本书通过85个实例全面讲述了应用MFC进行Visual C++编程的思想。每个实例均以编写一个应用程序要走的步骤编写。全书共分四部分进行介绍,第一部分是基础知识,第二部分讲述用户界面的实例,第三部分讲述MFC内部处理方面的实例,第四部分讲述打包实例。全书基本上面向实例进行阐述,讲解透彻、易于掌握。本书既可作为初学者和大专院校师生的自学参考书,也可作为计算机软件开发人员的技术参考书。 译者序 前言 第一部分 基础知识 第1章 窗口 2 1.1 窗口和API环境 2 1.1.1 三种型窗口 2 1.1.2 客户区和非客户区 3 1.2 窗口和MFC环境 4 1.3 怎样应用MFC创建一个窗口 5 1.4 怎样使用MFC销毁一个窗口 9 1.4.1 捆绑到一个已有的窗口 9 1.4.2 窗口 10 1.4.3 窗口进程 10 1.5 怎样使用MFC创建一个窗口 11 1.5.1 使用AfxRegisterWndClass () 函数注册一个窗口 11 1.5.2 使用AfxRegisterClass ()函数 创建一个窗口 12 1.6 怎样销毁一个MFC窗口 14 1.7 厂商安装的窗口 14 1.8 其他型窗口 15 1.9 桌面窗口 16 1.10 小结 16 第2章 18 2.1 基 18 2.1.1 CObject 18 2.1.2 CCmdTarget 19 2.1.3 CWnd 19 2.2 应用程序、框架、文档和视图 19 2.2.1 CWinApp(O/C/W) 20 2.2.2 CView (O/C/W) 21 2.3 其他用户界面 22 2.3.1 通用控件 23 2.3.2 菜单 23 2.3.3 对话框 24 2.3.4 控制条 24 2.3.5 属性 25 2.4 绘图 25 2.4.1 设备环境 25 2.4.2 图形对象 25 2.5 文件 26 2.6 数据库 26 2.6.1 ODBC 26 2.6.2 DAO 27 2.7 数据集 27 2.8 其他数据 27 2.9 通信 28 2.10 其他 29 2.11 小结 31 第3章 消息处理 32 3.1 发送或寄送一个消息 32 3.1.1 发送一个消息 32 3.1.2 寄送一个消息 32 3.1.3 发送一个消息与寄送一个消息 的比较 32 3.2 怎样使用MFC发送一个消息 33 3.3 怎样用MFC寄送一个消息 33 3.4 三种型的消息 34 3.4.1 窗口消息 34 3.4.2 命令消息 34 3.4.3 控件通知 34 3.5 MFC怎样接收一个寄送的消息 36 3.6 MFC怎样处理一个接收到的消息 36 3.7 处理用户界面的对象 44 3.8 创建自定义窗口消息 45 3.8.1 静态分配的窗口消息 45 3.8.2 动态分配的窗口消息 46 3.9 重定向消息 47 3.9.1 子分和超分 47 3.9.2 用MFC子分窗口 48 3.9.3 重载OnCmdMsg ( ) 49 3.9.4 使用SetWindowsHookEx ( ) 49 3.9.5 使用SetCapture ( ) 49 3.9.6 专有的消息泵 50 3.10 小结 50 第4章 绘图 51 4.1 设备环境 51 4.2 在MFC环境中创建一个设备环境 52 4.2.1 屏幕 52 4.2.2 打印机 53 4.2.3 内存 54 4.2.4 信息 54 4.3 绘图例程 55 4.3.1 画点 55 4.3.2 画线 55 4.3.3 画形状 55 4.3.4 形状填充和翻转 55 4.3.5 滚动 56 4.3.6 绘制文本 56 4.3.7 绘制位图和图标 56 4.4 绘图属性 56 4.4.1 设备环境属性 57 4.4.2 画线属性 58 4.4.3 形状填充属性 58 4.4.4 文本绘制属性 58 4.4.5 映像模式 59 4.4.6 调色板属性 62 4.4.7 混合属性 62 4.4.8 剪裁属性 63 4.4.9 位图绘制属性 64 4.5 元文件和路径 65 4.5.1 元文件 65 4.5.2 路径 66 4.6 颜色和调色板 66 4.6.1 抖动色 67 4.6.2 未经抖动色 67 4.6.3 系统调色板 67 4.6.4 使用系统调色板 68 4.6.5 动画色 71 4.7 控制什么时候在哪里绘图 71 4.7.1 处理WM_PAINT 71 4.7.2 只绘制被无效化的区域 72 4.7.3 处理WM_DRAWITEM 72 4.7.4 在其他时间绘图 73 4.8 小结 74 第二部分 用户界面实例 第5章 应用程序与环境 76 5.1 例1 规划MFC应用程序 76 5.2 例2 用AppWizard创建一个MFC 应用程序 79 5.3 例3 用ClassWizard创建一个 83 5.4 例4 初始化应用程序屏幕 84 5.5 例5 保存应用程序屏幕 86 5.6 例6 处理命令行选项 88 5.7 例7 动态改变应用程序图标 91 5.8 例8 提示用户优先选项 93 5.9 例9 保存和恢复用户优先选项 97 5.10 例10 终止应用程序 100 5.11 例11 创建一个启动窗口 101 第6章 菜单 107 6.1 例12 使用菜单编辑器 107 6.2 例13 添加一个菜单命令处理函数 109 6.3 例14 根据当前可视文档动态改 变菜单 110 6.4 例15 启用和禁用菜单命令 111 6.5 例16 复选标记菜单命令 112 6.6 例17 单选标记菜单命令 113 6.7 例18 动态修改菜单 114 6.8 例19 动态修改系统菜单 116 6.9 例20 触发一个菜单命令 117 6.10 例21 创建弹出式菜单 117 第7章 工具栏和状态栏 120 7.1 例22 使用工具栏编辑器 120 7.2 例23 启用和禁用工具栏按钮 122 7.3 例24 为工具栏按钮添加字 123 7.4 例25 非标准工具栏大小 128 7.5 例26 保持工具栏按钮按下 129 7.6 例27 保持工具栏按钮组中 一个按钮按下 130 7.7 例28 为工具栏添加非按钮控件 131 7.8 例29 修改应用程序的状态栏 136 7.9 例30 更新状态栏窗格 138 7.10 例31 为状态栏添加其他控件 139 第8章 视图 145 8.1 例32 滚动视图 145 8.2 例33 改变鼠标光标形状 147 8.3 例34 沙漏光标 148 8.4 例35 窗体视图 149 8.5 例36 列表视图 152 8.6 例37 动态分割一个视图 163 第9章 对话框和对话条 166 9.1 例38 使用对话框编辑器 166 9.2 例39 创建一个对话框 168 9.3 例40 模式对话框 170 9.4 例41 无模式对话框 171 9.5 例42 在无模式对话框的控件间 切换焦点 172 9.6 例43 对话框中的动画 173 9.7 例44 消息框 174 9.8 例45 对话条 176 第10章 控件窗口 182 10.1 例46 在任意位置创建一个控 件窗口 182 10.2 例47 用子分定制一个通用 控件窗口 183 10.3 例48 用超分定制一个通用 控件窗口 188 10.4 例49 在按钮上放置位图 190 10.5 例50 动态填充一个组合框 192 10.6 例51 排序一个列表控件 194 10.7 例52 分隔线控件 196 第11章 绘图 198 11.1 例53 绘制图形 198 11.2 例54 绘制文本 201 11.3 例55 从任意位置装入一个图 标并绘制 203 11.4 例56 从任意位置装入一个位 图和绘制一个位图 204 11.5 例57 从文件中创建一个位图 206 11.6 例58 创建一个自绘位图 211 第三部分 内部处理实例 第12章 消息 215 12.1 例59 添加消息处理函数或重 载MFC 216 12.2 例60 添加命令范围消息处理函数 219 12.3 例61 重定向命令消息 221 12.4 例62 创建自己的窗口消息 222 第13章 文件、串行化和数据库 225 13.1 例63 访问二进制文件 225 13.2 例64 访问标准I/O文件 227 13.3 例65 访问内存文件 228 13.4 例66 在数据中实现串行化 229 13.5 例67 串行化SDI或MDI文档 235 13.6 例68 按要求串行化 240 13.7 例69 透明地更新串行化的文档 242 13.8 例70 串行化多态 246 13.9 例71 串行化数据集 248 13.10 例72 访问ODBC数据库 252 13.11 例73 访问DAO数据库 257 第14章 杂 263 14.1 例74 剪切、拷贝和粘贴文本 数据 263 14.2 例75 剪切、拷贝、粘贴多信 息文本数据 268 14.3 例76 剪切、拷贝和粘贴二进制 数据 273 14.4 例77 数组函数 280 14.5 例78 列表函数 281 14.6 例79 映像函数 283 14.7 例80 系统键盘输入 285 14.8 例81 时间 288 第四部分 打包实例 第15章 库 291 15.1 例82 静态链接C/C++库 291 15.2 例83 动态链接C/C++库 295 15.3 例84 动态链接MFC扩展库 300 15.4 例85 资源库 303 第五部分 附录 附录A 控件窗口风格 305 附录B 消息、控件通知和消息映像宏 323 附录C 访问其他应用程序 328 附录D 开发中注意事项 330 附录E MFC快速参考指南 339
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值