Microsoft visual studio 2005入门实战

目     录
 
(一)Microsoft visual studio 2005简介
(二)Microsoft visual studio 2005的安装和环境配置
(三)如何开发一个新C++项目?
(四)如何在C++中应用已建好的项目?
(五)如何在C++文件中写代码?
(六)如何在C++中调试运行C++程序?
(七)实际应用程序举例说明
(1)创建 Windows 窗体控件
(2)创建一个新的标准 C++ 程序 
 
 
一、         Microsoft visual studio 2005简介
 虽然业界对Visual Studio 2005的期望值很高,但它正式推出后,依然远远超出业界的预期。以.NET Framework 2.0为基础的Visual Studio 2005包括微软5年来对.NET 1.0的所有修正。在1.0中还需花费大量时间编写代码的功能,在2.0几乎不需要再写代码或者只需短短几行代码就可以完成。更重要的是,.NET Framework 2.0增添了的不少新类,同时相当多的类被重写,并赋予新的功能,从某种角度来说,2.0更像一种新的语言,由于它的严重“超值”,引来不少开发人员得抱怨。除此以外,微软努力使Visual Studio 2005更适应团队开发,落实了生命周期管理和流程管理,整合了单元测试功能。在2000年我们震惊于.NET 1.0,今天Visual Studio 2005带来的无疑是第二次震撼。
Microsoft visual studio 2005与Microsoft visual studio 2003的比较
 Visual  C++中新增功能:
(1)2003在 web开发方面和2005的区别如下:
1、在2003下,web窗体有2种模式,和form窗体的两种模式差不多,2005中,web窗体只有一种模式,它限制你了把控件拖来拖去,所以在2005中更注重了css样式作用。
2、在2003中没有GirdView等数据绑定控件,2003中一般用的是DataGrid,2005中新增了GirdView控件,它在分页处理方面比DataGrid要出众的多,同时2005还增加了很多服务器空间,来弥补服务器空间的不足。
3、2005在程序处理能力方面引进很多新的东西,这是2003没有的。
(2)2003在控件和类的功能方面和2005的比较:
 2005的控件和类的功能比20 03强
 更确切的说是他们之间是由.net framework1.1 转到.net framework2.0上
1、 增加了MFC和ATL 的新功能
ATL 和 MFC 版本号
下表列出了 Visual C++ 附带的 ATL 的各版本号。

ATL 版本
Visual C++ 版本
1.0, 1.1, 2.0
无。在 Visual C++ 4.x 时间范围内发布到 Web。
3.0
Visual C++ 6.0
7.0
Visual C++ .NET 2002
7.1
Visual C++ .NET 2003
8.0
Visual C++ 2005

下表列出了 Visual C++ 附带的 MFC 的各版本号。

MFC 版本
Visual C++ 版本
1.0
Microsoft C/C++ 7.0
2.0
Visual C++ 1.0
2.5
Visual C++ 1.5
3.0
Visual C++ 2.0
3.1
Visual C++ 2.1
3.2
Visual C++ 2.2
4.0
Visual C++ 4.0
4.1
Visual C++ 4.1
4.2
Visual C++ 4.2
4.21 (mfc42.dll)
Visual C++ 5.0
6.0 (mfc42.dll)
Visual C++ 6.0
7.0 (mfc70.dll)
Visual C++ .NET 2002
7.1 (mfc71.dll)
Visual C++ .NET 2003
8.0 (mfc80.dll)
Visual C++ 2005

2、 CRT新功能
3、 标准C++库的新增功能
4、 新的C++支持库
5、 Visual C++代码DOM的新功能
二、        Microsoft visual studio 2005的安装和环境配置
下载Microsoft Visual Studio 2005编程工具 简体中文专业版(DVD);然后按照提示进行安装,详细的安装步骤再此就忽略了,安装完成后,第一次运行时,需要你配置使用的语言种类,我们在此选择C++,然后打开的页面如下图:
2、 SDK的安装
先下载相应的SDK版本,一般建议使用SDK 9.0 b版本,其安装步骤也不做详细说明,只要安装步骤一步步进行就可以了。
3、 安装完成后的环境配置
在Microsoft visual studio 2005中需要,配置库文件,包含文件,以及一些可执行文件;具体方法如下:
假如Microsoft visual studio 2005安装在C:/Program Files下;SDK装在C盘根目录下;
打开“工具”菜单->“选项”,弹出“选项”对话框,选择“项目和解决方案”选项卡,选择“VC++目录”,将相应的路径添加进去;
包含文件:
C:/DXSDK/Include
C:/DXSDK/SAMPLES/C++/DIRECTSHOW/BASECLASSES
C:/DXSDK/SAMPLES/C++/COMMON/INCLUDE
C:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/include
C:/Program Files/Microsoft Visual Studio 8/VC/include
C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include
库文件:
C:/DXSDK/Lib
C:/DXSDK/SAMPLES/C++/DIRECTSHOW/BASECLASSES/DEBUG
C:/DXSDK/SAMPLES/C++/DIRECTSHOW/BASECLASSES/RELEASE
C:/Program Files/Microsoft Visual Studio 8/VC/lib
C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Lib
C:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib
C:/Program Files/Microsoft Visual Studio 8/VC/atlmfc/lib/i386
4、 关于SDK的库编译问题
在一些版本的SDK中,由于缺少strmbasd.lib文件,所以建议使用SDK 9.0 B版本的,在使用SDK之前,必须将其中的baseclasses文件编译通过,生成strmbasd.lib库文件。
一、        如何开发一个新C++项目?
开发一个新的C++项目,具体步骤如下:
1、“文件”->“新建”->“项目”,然后按照提示选择项目类型,输入项目名称和选择保存的位置,按照提示进入“下一步”,依照自己的项目需求选择相应的设置,选择“完成”。程序会自动打开项目,然后就可以进行编写代码的操作。
四、        如何在C++中应用已建好的项目?
“文件”->“打开”->“项目和解决方案”,选择打开的路径,这样就可以打开你希望打开的项目,不过,在C++中项目的扩展名为.dsw,否则不能打开一个项目文件。
五、        如何在C++文件中写代码?
打开一个项目后,我们需要将一些代码写入,先要创建相应的文件,例如你想写一个头文件,先要创建一个头文件,右击选择“添加”->“新建项”,然后在打开的对话框中选择你要建立的文件类型,输入名字就可以。
六、        如何在C++中调试运行C++程序?
  选择要进行编译的类型,主要有四种类型:Debug、Debug Unicode、Release、Release Unicode
  以及WMF9 Debug 、WMF9 Debug Unicode等。
Debug版——–有全部的debug符号和跟踪信息。它提供了很多的信息,但是一般输出文件也是最大的,便于程序员调试。
Debug Unicode版 ——–基本功能和debug相同,但是生成一个静态的dll
Release版——–没有debug符号,但是有全部跟踪信息,它的输出文件比Debug版小,但是它有完全的跟踪信息日志输出。
调试运行方法:
1、 选择需要编译的项目,右击选择“生成”或者“重新生成”,然后就可以进行编译工作;
2、 选择“生成”菜单,“生成解决方案”或者“”重新生成解决方案;
3、 也可以使用“调试”菜单,选择“启动调试”或者直接按“F5”
注意的是:如果是使用F5进行的调试,如果没有错误的话,就可以直接运行生成的可执行文件,而以上的前2种方法是不可以直接运行可执行文件的。
七、        实际应用程序举例说明
1、 创建 Windows 窗体控件
Windows 窗体控件是可以放置到 Windows 窗体应用程序(面向公共语言运行库的 GUI 应用程序)中的组件。使用 Visual C++ 编写的 Windows 窗体应用程序通过新的 Visual C++ 语法使用 .NET Framework 类和其他 .NET 功能。
在本过程中,您将创建一个 Windows 窗体控件,该控件显示在每次单击应用程序中的标签时都递增的一个数字。您还将创建一个 Windows 窗体应用程序项目来测试该控件。
本例子涵盖以下内容:
·         创建新项目
·         设计控件
·         向控件添加自定义属性
·         添加用于测试控件的项目
·         将控件放在应用程序中
·         运行应用程序
(1)创建新项目
您也可以通过直接从Control 类(其中的代码负责绘制控件)或者Compontent类(无 UI 的控件)派生一个类来创建 Windows 窗体控件。
创建新的 Windows 窗体控件项目
1.     在“文件”菜单上,单击“新建”,然后单击“项目”。
2.     在“项目类型”窗格中,选择“Visual C++”节点中的“CLR”,然后在“Visual Studio 已安装的模板”窗格中选择“Windows 窗体控件库”。键入项目的名称,如“clickcounter”
为解决方案键入一个不同的名称,如“controlandtestapp”。您可以接受默认位置、键入一个位置或者浏览到要保存项目的目录。
3.     Windows 窗体设计器将打开并显示一个区域,您可以将要放置到控件设计图面上的控件添加到该区域中。
(2)设计控件
在本步骤中,您要将一个Label 控件添加到控件设计图面中。然后,设置控件本身及其包含的 Label 控件的一些属性。
设置用户控件的属性
1.如果“属性”窗口不可见,请单击“视图”菜单上的“属性窗口”。
单击以选择控件,并按照下面的操作设置其属性:
o        将“Size”属性设置为“100, 100”。
o        将“BorderStyle”设置为“Fixed3D”。
当控件放置到应用程序中时,将显示标签的边框。
2.如果“工具箱”窗口不可见,请单击“视图”菜单上的“工具箱”。将一个 Label 控件从“工具箱”拖动到设计图面上,将其放置到靠近控件中心的位置。
设置标签的下列属性:
o        将“BorderStyle”设置为“FixedSingle”。
o        将“Text”设置为数字“0”(零)。
o        将“Autosize”设置为“False”。
o        将“Size”设置为“30, 20”。
o        将“TextAlign”设置为“MiddleCenter”。
保留“Name”属性(在代码中将使用它来引用该控件)为“label1”。控件应如下所示:
                        
3.通过双击标签,为标签的 Click 事件(标签的默认事件)添加事件处理程序。
4.clickcounter.h 文件将显示在编辑区域中,并自动生成一个空事件处理程序方法。

注意
如果需要更多空间,可以关闭“工具箱”或“属性”窗口,方法是单击它们的“关闭”框,或者解除它们的锁定使其自动隐藏。

5.在 label1_Click 方法的左大括号后按 Enter 并键入:
int temp = System::Int32::Parse(label1->Text); temp++; label1->Text = temp.ToString();
在键入范围解析运算符 (  点运算符 (.) 或箭头运算符 (-&g  后,IntelliSense™ 将显示有效选项的列表。您可以通过突出显示某个项并按 Tab 或 Enter,或者通过双击某个项,将该项插入代码中。此外,当键入方法的左括号时,Visual Studio 将显示该方法的每个重载的有效参数类型。
(3)向控件添加自定义属性
在本步骤中,您将定义一个自定义属性,它允许应用程序开发人员确定控件上显示的数字是在单击标签时递增还是在单击控件上的任何位置时递增。
向控件添加自定义属性
1.       将光标放置在 clickcounterControl.h 文件顶部的第一个 public 范围指示符的冒号之后,按 Enter,然后键入以下内容:
property bool ClickAnywhere { bool get() { return (label1->Dock == DockStyle::Fill); } void set(bool val) { if (val) label1->Dock = DockStyle::Fill; else label1->Dock = DockStyle::None; } }
当控件的 ClickAnywhere 属性设置为 true 时,标签的 Dock 属性将设置为 ockStyle::Fill,因此该标签将占据整个控件图面。单击控件图面上的任何位置将引发标签的 Click 事件,使标签上的数字递增。当 ClickAnywhere 属性为 false(默认值)时,标签的 Dock 属性将设置为 DockStyle::None。标签不填充整个控件,并且单击控件时,必须单击标签边框内部才会引发标签的 Click 事件,使数字递增。
2.       生成用户控件。在“生成”菜单上,选择“生成解决方案”。如果没有错误,将生成文件名为 clickcounter.dll 的 Windows 窗体控件。您可以在项目目录结构中找到此文件。
(4)添加用于测试控件的项目
在本步骤中,您要创建一个 Windows 窗体应用程序项目,您将在其中的一个窗体上放置“clickcounter”控件的实例。

注意
您所创建的用于测试控件的 Windows 窗体应用程序可以使用 Visual C++ 或其他 .NET 语言(如 C# 或 Visual Basic .NET)来编写。

创建 Windows 窗体应用程序项目
1.         在“文件”菜单上,单击“新建”,然后单击“项目”。也可以通过以下方法将项目添加到解决方案中:右击“解决方案资源管理器”中的“controlandtestapp”,指向“添加”,然后单击“新建项目”。
2.         在“项目类型”窗格中,选择“Visual C++”节点中的“CLR”,然后在“Visual Studio 已安装的模板”窗格中选择“Windows 窗体应用程序”。键入项目的名称,如“testapp”。确保选择“添入解决方案”,而不是接受“解决方案”下拉列表中默认的“创建新解决方案”设置,然后单击“确定”。
3.         将为新项目打开 Windows 窗体设计器,其中显示一个名为“Form1”的新窗体。
            
将控件添加到工具箱
1.         添加对控件的引用。在“项目”菜单上,单击“引用”;或者右击“解决方案资源管理器”中的“testapp”项目,并单击“引用”。单击“添加新引用”按钮,然后单击“项目”选项卡(这是在此解决方案中添加对另一个项目的引用),并选择“clickcounter”项目。单击“确定”两次。
2.         如果“工具箱”窗口不可见,请单击“视图”菜单上的“工具箱”。
3.         右击“工具箱”并单击“选择项”。单击“浏览”按钮,定位到解决方案目录结构中的 clickcounter.dll文件。选择该文件并单击“打开”。clickcounter 控件即出现在“.NET Framework 组件”列表中,并带有一个选中标记。单击“确定”。控件即显示在“工具箱”中,带有默认的“齿轮”图标。
(5)将控件放在应用程序中
在本步骤中,您要将控件的两个实例放到应用程序窗体上并设置其属性。
将控件的实例放置到窗体上
1.         从“工具箱”拖出“clickcounter”控件的两个实例。将它们放在窗体上,避免使它们重叠。如果需要加宽窗体,请单击以选择窗体,向外拖动一个选择手柄。
2.         如果“属性”窗口不可见,请单击“视图”菜单上的“属性”。如果属性是按类别组织的,“ClickAnywhere”属性将位于“属性窗口”的“杂项”部分。
3.         单击以选择窗体上的一个“clickcounter”控件实例,将其“ClickAnywhere”属性设置为 true
4.         保留“clickcounter”控件的另一个实例的“ClickAnywhere”属性设置为 false(默认值)。
5.         右击“解决方案资源管理器”中的“testapp”项目并选择“设为启动项目”。
6.         在“生成”菜单上,单击“重新生成解决方案”。您应当看到生成了两个项目,并且没有出现错误。
(6)运行应用程序
在本步骤中,您将运行应用程序,并单击控件以测试它们。
将控件的实例放置到窗体上
1.     在“调试”菜单上,单击“开始调试”。将显示窗体,其中控件的两个实例都可见。
2.     运行应用程序并单击两个“clickcounter”控件:
o        单击“ClickAnywhere”设置为 true 的控件。
o        当单击控件上的任何位置时,标签上的数字都会递增。
o        单击“ClickAnywhere”设置为 false 的控件。
o        仅当在标签的可见边框内单击时,标签上的数字才会递增。
  
单击“Form1”窗口右上角的“关闭”框,关闭测试应用程序。
(2)创建一个新的标准 C++ 程序
使用 Visual Studio IDE
Visual Studio 集成开发环境 (IDE) 提供了一组工具,可帮助您编写和修改程序代码,以及检测和更正程序中的错误。
在本例子中,您将创建一个新的标准 C++ 程序,并使用 Visual Studio 中适用于 C++ 开发人员的功能测试该程序的功能。
本例子涵盖以下内容:
·   使用项目和解决方案
·   使用解决方案资源管理器
·   添加源文件
·   修复编译错误
·   测试程序
·   调试程序
用 Visual Studio 编写 Visual C++ 程序的第一步是选择项目的类型。对于每种项目类型,Visual Studio 都为您设置了编译器设置并生成了起始代码。
(1)创建新项目
1.     在“文件”菜单上,指向“新建”,然后单击“项目”。
2.     在“项目类型”区域中,单击“Win32”,然后在“Visual Studio 已安装的模板”窗格中,单击“Win32 控制台应用程序”。
3.     键入“game”作为项目名称。
创建新项目时,Visual Studio 将该项目放入一个解决方案。请接受解决方案的默认名称,默认情况下,该名称与项目的名称相同。
您可以接受默认位置、键入一个不同的位置或者浏览到要保存项目的目录。
按“确定”启动“Win32 应用程序向导”。
4.     在“Win32 应用程序向导”对话框的“概述”页中,按“下一步”。
5.     在“应用程序类型”下的“应用程序设置”页,选择“控制台应用程序”。选择“其他选项”下的“空项目”设置并单击“完成”。
现在,您得到了一个没有源代码文件的项目。
(2)使用解决方案资源管理器
在本步骤中,您要向项目添加一个类,Visual Studio 会将 .h.cpp 文件添加到项目中。然后,为测试类的主程序向项目添加一个新的源代码文件。
向项目添加类
  1. 如果“解决方案资源管理器”窗口不可见,请单击“视图”菜单上的“解决方案资源管理器”。
  2. 右击“解决方案资源管理器”中的“头文件”文件夹并指向“添加”。然后单击类”。
在“Visual C++”类别中,单击“Visual Studio 已安装的模板”区域中的“C++”,然后单击“C++ 类”。单击“添加”。
  1. 在“一般 C++ 类向导”中,键入“Cardgame”作为“类名”,并接受默认的文件名,然后单击和设置。然后单击“完成”。
  2. 对编辑区域中显示的 Cardgame.h 文件进行下列更改:
o        在类定义的左大括号之后添加两个私有数据成员:
int players; static int totalparticipants;
o        添加一个采用一个 int 类型的参数的公共构造函数原型:
Cardgame(int p);
o        删除为您生成的默认构造函数。默认构造函数是没有参数的构造函数。默认构造函数类似于如下所示:
Cardgame(void);
  1. 进行上述更改后,Cardgame.h 文件应如下所示:
#pragma once class Cardgame { int players; static int totalparticipants; public: Cardgame(int p); ~Cardgame(void); };
#pragma once 行指明编译器只包含该文件一次。
有关此头文件中包含的其他 C++ 关键字的信息,双击“源文件”文件夹中的“Cardgame.cpp”,以将其打开进行编辑。
  1. 为采用一个 int 参数的构造函数添加代码:
Cardgame::Cardgame(int p) { players = p; totalparticipants += p; }
开始键入 pl 或 to 时,可以按 Ctrl-空格键,自动完成功能将为您完成键入 players 或 totalparticipants。
  1. 删除自动生成的默认构造函数:
Cardgame::Cardgame(void);
  1. 进行上述更改后,Cardgame.cpp 文件应如下所示:
#include “Cardgame.h” Cardgame::Cardgame(int p) { players = p; totalparticipants += p; } Cardgame::~Cardgame(void) { }
(3)添加源文件
添加新源文件
1.     在“项目”菜单上,单击“添加新项”。也可以使用“解决方案资源管理器”来向项目添加新文件,方法是右击“解决方案资源管理器”中的“源文件”文件夹,指向“添加”。然后单击“新建项”。在“Visual C++”区域中,选择“代码”。然后单击“C++ 文件 (.cpp)”。
2.     键入“testgames”作为“名称”,然后单击“添加”。
3.     在 testgames.cpp 编辑窗口中,键入以下代码:
#include “Cardgame.h” int Cardgame::totalparticipants = 0; int main() { Cardgame *bridge = 0; Cardgame *blackjack = 0; Cardgame *solitaire = 0; Cardgame *poker = 0; bridge = new Cardgame(4); blackjack = new Cardgame(8); solitaire = new Cardgame(1); delete blackjack; delete bridge; poker = new Cardgame(5); delete solitaire; delete poker; return 0; }
4.     在“生成”菜单上,单击“生成解决方案”。
在“输出”窗口中,您应当看到生成的输出,它指示已编译项目,并且未发生错误。
(4)修复编译错误
使用 IDE 修复编译错误
1.     在 testgames.cpp 中,删除最后一行中的分号,使代码如下所示:
return 0
2.     在“生成”菜单上,单击“生成解决方案”。
3.     “输出”窗口中显示一条消息,指示生成项目失败。单击“输出”窗口中的“转到下一条消息”按钮(指向右方的绿色箭头)。“输出”窗口中的错误消息和状态栏区域指示右大括号前缺少一个分号。
4.     将分号重新添加到导致语法错误的行的末尾:
return 0;
5.     在“生成”菜单上,单击“生成解决方案”。
“输出”窗口中显示一条消息,指示项目已正确编译。
(5)测试程序
在本步骤中,您将在程序运行时观察变量的值,并推断为什么值与预期的不同。
以“调试”模式运行程序
1.   如果“testgames.cpp”文件不可见,请在编辑区域中单击该文件对应的选项卡。
2.   单击以下行,将其设置为编辑器中的当前行:
solitaire = new Cardgame(1);
3.   若要在该行上设置断点,请单击“调试”菜单上的“切换断点”,或者按 F9。也可以     单击代码行左侧的区域来设置或清除断点。设置断点的代码行的左侧会显示一个红色圆圈。
4.   在“调试”菜单上,单击“开始调试”(或者按 F5)。
当程序运行到包含断点的行时,执行将暂时停止(因为程序处于“中断”模式)。代码行左侧的黄色箭头指示该行是要执行的下一个代码行。
5.   若要检查 totalparticipants 变量的值,请将鼠标指针悬停在该变量上方。该变量的名称及其值 12 即显示在工具提示窗口中。
右击 totalparticipants 变量并单击“添加监视”,以在“监视”窗口中显示该变量。您也可以选择该变量并将其拖动到“监视”窗口。
6.   在“调试”菜单上,单击“逐过程”,或者按 F10 步进到下一行代码。
totalparticipants 的值现在显示为 13。
7.   右击 main 方法的最后一行 (return ,并单击“运行到光标处”。代码左侧的黄色箭头指向要执行的下一个语句。
8.   在 Cardgame 终止时,totalparticipants 数应当减小。此时,totalparticipants 应当等于 0,这是因为所有的 Cardgame 指针都已删除,但是“监视 1”窗口指示 totalparticipants 等于 18。
代码中存在一个 bug,您将在下一节中检测并修复它。
9.   在“调试”菜单上,单击“停止调试”或者按 Shift-F5 停止程序。
(6)调试程序
修复包含 bug 的程序
1.     若要明白在 Cardgame 对象销毁时会发生什么,请查看 Cardgame 类的析构函数。
2.     在“视图”菜单上,单击“类视图”,或者单击“解决方案资源管理器”窗口中的“类视图”选项卡。
3.     展开“game”项目树并单击“Cardgame”类。下方的区域显示类的成员和方法。
4.     右击“~Cardgame(void)”析构函数并单击“转到定义”。
5.     要在 Cardgame 终止时减少 totalparticipants ,请在 Cardgame::~Cardgame 析构函数的左大括号和右大括号之间键入以下代码:
totalparticipants -= players;
6.     进行上述更改后,Cardgame.cpp 文件应如下所示:
#include “Cardgame.h” Cardgame::Cardgame(int p) { players = p; totalparticipants += p; } Cardgame::~Cardgame(void) { totalparticipants -= players; }
7.     在“生成”菜单上,单击“生成解决方案”。
8.     在“调试”菜单上,单击“运行”,或按 F5,以“调试”模式运行该程序。程序将在第一个断点处暂停。
9.     在“调试”菜单上单击“逐过程”或者按 F10 逐句通过程序。请注意,执行每个 Cardgame 构造函数后,totalparticipants 的值会增加,而在删除每个指针(并调用析构函数)后,totalparticipants 的值会减小。如果步进到程序的最后一行,正好在执行 return 语句之前,totalparticipants 等于 0。
10. 继续逐句通过程序,直到程序退出;或者,在“调试”菜单上单击“运行”或按 F5,允许程序继续运行,直到退出。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值