黑马MFC教程总结(后续更新)

1基于对话框学习控件

1.1对话框 模态非模态
1.2按钮 两个captain修改内容 直接输入内容
1.3点击触发事件 右侧属性闪电图标;右键按钮 添加事件处理程序;双击按

1.4插入窗口 窗口 右键 添加类
1.5模态窗口创建 CDlgExe cdlg
1.5.1 dlg.DoModal()
1.6非模态创建
1.6.1 CDlgshow dlg 写到.h做成员
1.6.2 dlg.Create 写到初始化oninitDlalog 保证只创建一次
1.6.3 dlg.showWindow()

2 CStaticText 静态文本

2.1 添加变量以 STATIC为结尾的ID是不可以添加变量,需要修改ID
2.2设置内容 setWindowTextW
2.3获取内容 getWindowTextW 按钮也一样
2.4利用静态文本显示图片
2.4.1 bmp图片
2.4.2

#define   HBMP(filepath,width,height)
(HBITMAP)Loadimage(AfxGetinstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
m_pic.SetBitmap(HBMP(TEXT("./1.bmp"),rect Width(),rect.Height());

2.5如何禁用按钮
2.5.1 EnableWindow(FALSE)禁用

3编辑框使用

3.1EditCtrl 属性
3.1.1 mutiline多行
3.1.2 want returne
3.1.3 滚动条 无限横向 纵向的输入
3.2getWindowText setWindowText 设置和获取值
3.3默认小bug单行点击回车就退出
3.3.1重写OnOk 注释掉里面的代码
3.4退出当前对话框
3.4.1CDialog::Onok() OnCancel()
3.5添加变量时候 选择 value
3.6本身关联的变量 就是那个值
3.7UpdateData(TURE)
3.7.1将控件的内容同步到变量中

4下拉框 CCombox

4.1属性中加入数据 data 进行分割
4.2默认排序 sort 修改 false 不排序了
4.3 type 类型 DropList 不可以编辑
4.4添加AddString
4.5删除DeleteString
4.6插入InsertString
4.7设置默认选项 setCursel
4.8获取当前素引 getCursel
4.9根据索引获取内容 getLBText(索引,CString str)
4.10控件事件OnCbnSelchangeCombol

5 ListContrl列表登件

5.1 view 报表模式 Report
5.2 添加表头 InsertCol
5.3 添加正文 从0索引
5.4 添加第一行第一列 Insertitem(0,"张三");
5.5添加第一行的其他列 setItemText(行,列,具体内容)
5.6设置风格整行选中网格显示
5.7 m_list.SetExtendedStyle(m_list.GetExtendedStyle()I LVS_EX_FULLROWSELECTl LVS_EX_GRIDLINES);

6CTreeCtrl树控件

6.1设置属性、设置线、按钮
6.1.1 设置图标
HICON icons[4];
icons[0]=AfxGetApp()->LoadIconW(按钮ID);
6.2 设置图片集合
6.2.1 setlmagelist(Clmageust*list,正常显示的宏)(第三步)
6.2.1.1 list准备
CimageList list;(在类中声明为类成员)
create(30,30,32位色,4.4)(第一步)
6.2.1.2 add(HICON)(第二步)
6.3 添加节点
6.3.1InsertItem(节点名称,显示图片,选中后显示的图,父节点)
6.4设置默认节点
6.4.1 selectItem
6.5节点间切换触发事件OnTvmSelchangedTreel
6.5.1获取当前项 item=getSelectItem
6.5.2 CString str=getItemText(item)

7 CTabCtrl 标签页使用

7.1 引用Tabsheet.h .cpp2添加到项目中
7.2拖入控件 tabctrl
7.3添加变量类型Tabsheet类型
7.4创建两个标签页属性 border改为none style改为child
7.5标签页添加类
7.6王窗口中的头文件中先创建标签页的类成员
添加标 签 m_tab.AddPage(TEXT("系统设置"),&dlg1,IDD_DIALOG1)
7.7调用 show 方法显示出来

项目笔记

配置

mfc 单文档,去掉工具栏
项目-属性-c/c++预处理-预处理器定义 添加宏 _CTR_SECURE_NO_WARNINGS

主窗口 设置图标 添加icon 资源属性中修改ID号
CmainFrame 中的OnCreat()中 设置图标

//设置图标,ID_ICON.WIN为图标资源1D,此为WINApI函数
SetClassLong(m_hWnd,GCL HICOV,(LONG)AfxGetApp()->LoadlconW(IDI_ICON_WIN);

设置窗口标题(右侧)

SetTitle(TEXT(销售管理系统));

设置窗口标题 (左侧)

CSaleSystemDoc文档中的OnNewDocument()添加

setTitle(TEXT(销售管理系统));

主窗口大小,在相框CmainFrame中的OnCreat()设置

MoveWindow(0,0,800,500);//起点,宽高

CenterWindow();//居中显示

文件处理类CInfoFile引入

添加InfoFile .h .cpp文件

登陆对话框

  1. 添加对话框资源,并修改ID
  2. 登录窗口的设计
  3. 创建类,并关联。

在CSaleSystemApp的InitInstance()中修改,在CWinApp初始化之前创建以模态的 登陆窗口,(包含头文件)
CLoginDlg dlg;
dlg.DoModal();

实现点击登录按钮验证信息 登陆主窗口

  1. 关联用户名与密码变量
  2. 更新数据,拿到最新的值。UpdateData(TRUE);
  3. 登录按钮 点击事件,先判断是否为空。
    获取正确的值,(写入文本与配置文本一致),双重判断并弹出消息。
    若都一致,则退出对话框。CDialog::OnCancel();

实现默认有用户、密码登陆

  1. 对话框添加初始化函数(自己添加的对话框无初始化函数)

在这里插入图片描述

实现取消按钮,添加事件。

修改BUG

  1. 重写OnOK函数
  2. 重写WM_OnClose函数(关闭当前对话框)

静态拆分窗口

1自定义MFC视图类
自定义两个类:CSelectView和CDispalyView(它的基类必须是视图类)。
CSelectView继承于CTreeView,CDispalyView继承于CFormView.

添加类,MFC类。

通过CSplitterWnd类拆分窗口

  1. 在CMainFrame类(相框)中,声明CSplitterWnd m_spliter 对象。
  2. 先添加后 重写CMainFrame的OnCreatClient函数。
BOOL CMainFrame::OnCreateClent(LPCREATESTRUCT lpcS,CCreateContext*pContext)
/T0DO:套此添规麦用伐码和/感调用基类
//静态拆分窗口,1行2列,CSpliterwnd-isreatetaticr 
m_spliter.CreateStatic(this,1,2);
//创建视图:CSli过erW/nsd:cceate/i意效
//0,0:放在第0听第0列的位置
//RUNTIME_CLASS(CSelextVie):需要头文件include“SelestView.h",
//CSelectView在SelectView.h中声明
//CSize(250,500]:指定视图宽度和高度
//pContet:为OnCreateClent()最后一个形参
m_spliter.CreateView(0,0,RUNTIME_CLASS(CSelectView),CSize(200,500),pContext);
//0,1:放在第0于第1列的位置
//sDispalWiew,需要头文件include"Dispalyiew.h”
m_spliter.CreateView(0,1,RUNTIME_CLASS(CDispalyWiew),CSize(600,500),pContext);
//return SFramewnd:QnCreateClientlecs,pcontext)
return TRUE;//代表自己拆分
)

树视图功能实现

  1. 添加功能节点

    1.1加载图标资源并改ID

  2. CSelectView 类中声明相应变量

    CTreeCtrl *m_treeCtrl;//树控住
    ClmageList m_imageList;//图标列表
    
  3. 重写CSelectView的OnInitialUpdate函数

void CSelectView::OnInitialUpdate()
{
CTtreeView::OnInitialUpdate();
//T0D0:在此添加专用代码或遇用基类

//获取数视图中的过按件CIreeView::GetTreectrl 
m_treeCtrl= &GetTreeCtrl();


//图标资源的加载cWinApg:Loadlcon
//IOLICON.RE为图标资源ID 
HICON icon =afxGetApp->LoadIconW(IDI_ICON_RE);
//图片列表的创建 clmagelist::Create
//80,30:指定图标的宽度和高度/nLC_CoLoR32:图标格式
//1,1:有多少图标就写多少
m_imagelist.Create(30,30,ILC_COLOR32,1,1);
//图片列表追加图标 Clmagelist::Add 
m_imagelist.Add(icon); 
//树控住设置图片列表 SIuseCtrd::SetlmageList
m_treeCtrl->SetImageList(&m_imageList,TVSIL_NORMAL);


//树控件设置节点 cTreectrl:inserttem 
m.treeCtrl->InsertItem(TEXT("个人信息"),0,0,NULL);
m_treeCtrl->lnsertItem(TEXTT("销焦管理"),0,0,NULL);
m_treeCtrL->lnsertItem(TEXTI("库存信息"),0,0,NULL);
m_treeCtrl->InsertItem(TEXTI("库存添加"),0,0,ULL);
m_treectrl->lnsertItem(TEXT("库存删除"),0,0,NULL);
}

选中功能实现添加 事件 OnTvnSelchanged

1.得到选中的项 2 获取内容

个人信息界面

  1. 添加个人信息对话框并修改ID,在窗口属性中,Border 改为None,Style改为Child

  2. 选中对话框一>右击->添加类->类名:CuserDlg,基类选择CFormView

  3. 根据需求,控件关联所需变量
    身份编辑区关联CString m_user,用户名编辑框关联CString m_name,

    新密码编辑框关联CString m_newPwd,确定密码编辑框关联 CString m_surePwd。

界面挂载

自定义信息发送

  1. 在CMainFrame框架类中,添加自定义消息宏。

    //WM_USER是用户自定义消息的一个起始值
    //WM_USER+100是为了区分系统消息和用户消息,避免冲突
    #define NM_A(WM_USER+100)
    #define NM_B(WM_USER+101)
    #define NM_C(WM_USER+102)
    #define NM_D(WM_USER+103)
    #define NM_E(WM_USER+104)
    
  2. 在CMainFrame框架类中添加自定义消息处理函数:

    //自定义消息处理函数
    afx_msg LRESULT OnMyChange(WPARAM wParam,LPARAM IParam)
    
  3. 对应的.cpp定义其函数

  4. 在CMainFrane框架类BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加自定义消息入口,与自定义消息处理函数绑定。

//ON_MESSAGE响应的是自定义消息
//产生NM_X道息,自动调用OnMyChange的函数
ON_MESSAGE(NM_A,OnMyChange)
ON_MESSAGE(NM_B,OnMyChange)
ON_MESSAGE(NM_C,OnMyChange)
ON_MESSAQE(NM_D,QnMyChangs)
ON_MESSAGE(NM_E,OnMyChange)
  1. 发送自定义信号

    在CSelectView的OnTvnSelchanged函数中,发送自定义信号.

在这里插入图片描述

在这里插入图片描述

界面挂载函数(不用记)CMainFrame框架类中的OnMyChange函数里面

在这里插入图片描述

个人信息完善

  1. 初始化,CUserdlg属性中添加初始化函数

在这里插入图片描述

  1. 修改密码的双击确定事件

    先更新参数,拿到最新值。UpdateData(TRUE);

    判断是否为空,并弹出消息,不能为空。

    判断新密码和确定密码一直,并弹出消息,新密码与确定密码要一致。

    判断新密码与就密码一致性。

在这里插入图片描述

修改密码并清空

在这里插入图片描述

取消修改密码事件

void CUserD1g::OnBnClickedButton2()
{
//T0D0:在此添加控件通知处理程序代码
/取消按钮
//清空内容
m_newPwd.Eanypty();
m_surePwd.Enpty();
UpdateData(FALSE);
}

销售管理窗口

  1. 添加对话框资源,并修改ID,修改属性。设计界面,添加所需控件。

  2. 选中对话框->右击->添加类->类名:CSellDlg,基类选择CFormView。

  3. 根据需求,控件关联所需变量。
    商品名组合框关联CComboBox m_combo,

    单价编辑框关联int m_price,

    个数编辑框关联int m_num,

    销售信息编辑框关联CString m_sellInfo。

界面挂载

在CMainFrame 类中OnMyChange函数,添加如下代码:

case NM_B:
{//CSelIDla类需要包合头文件include"Selplg.h"+
Context.m_pNewViewClass=RUNTIME_CLASS(CSellDlg);
Context.m_pCurrentFrame = this;
Context.m_pLastView=(CForaView*) m_spliter.GetPane(0,1);
m_spliter.DeleteView(0,1);
m_spliter.CreateView(0,1,RUNTIME_CLASS (CSellDlg),CSize(600,0),&Context);
CSellDlg*pNewView=(CSellDig*) m_spliter.GetPane(0,1);
m_spliter.RecalcLayout();
pNewView->OninitialUpdate();
m_spliter.SetActivePane(0,1);
}
    breaks

功能实现

在类CSellDlg中设置初始化,并添加按钮事件,实现功能函数

在这里插入图片描述

在函数里调用切换事件,显示默认商品数目。

商品切换事件,并更新。

在这里插入图片描述

购买功能实现

  1. 先同步数据,拿到最新的。
  2. 检测数据 num必须大于0,数量不能大于库存。
  3. 获取购买商品名称,同步库存量,同步控件库存量
  4. 告诉用户购买信息。字符串拼接。
  5. 信息同步到变量,并显示与提示购买成功。
  6. 将最新的数据写到文件中。
  7. 清空购买数据与购买信息。

取消按钮事件

  1. 购买数量为0,并更新。
  2. 默认选中第一个
  3. 调用下拉框切换事件

添加商品个数功能

  1. 界面实现同上
  2. 功能实现,先拿到数据,再功能实现,最后需要同步到文件。
  3. 同步到左侧下拉框,并清空数据。

菜单栏设置

在资源视图,Menu中,添加事件处理程序,并实现事件处理功能。

第1章 MFC概述 1 1.1 MFC是一个编程框架 1 1.1.1 封装 1 1.1.2 继承 2 1.1.3 虚拟函数和动态约束 2 1.1.4 MFC的宏观框架体系 2 1.2 MDI应用程序的构成 3 1.2.1 构成应用程序的对象 3 1.2.2 构成应用程序的对象之间的关系 5 1.2.3 构成应用程序的文件 5 第2章 MFC和Win32 9 2.1 MFC Object和Windows Object的关系 9 2.2 Windows Object 12 2.2.1 Windows的注册 12 2.2.2 MFC窗口类CWnd 15 2.2.3 在MFC下创建一个窗口对象 17 2.2.4 MFC窗口的使用 18 2.2.5 在MFC下窗口的销毁 19 2.3 设备描述表 20 2.3.1 设备描述表概述 20 2.3.2 设备描述表在MFC中的实现 22 2.3.3 MFC设备描述表类的使用 24 2.4 GDI对象 25 第3章 CObject类 28 3.1 CObject的结构 28 3.2 CObject类的特性 30 3.3 实现CObject特性的机制 32 3.3.1 DECLARE_DYNAMIC等宏的定义 32 3.3.2 CruntimeClass类的结构与功能 35 3.3.3 动态类信息、动态创建的原理 38 3.3.4 序列化的机制 39 第4章 消息映射的实现 42 4.1 Windows消息概述 42 4.1.1 消息的分类 42 4.1.2 消息结构和消息处理 42 4.2 消息映射的定义和实现 44 4.2.1 MFC处理的三类消息 44 4.2.2 MFC消息映射的实现方法 45 4.2.3 在声明与实现的内部 46 4.2.3.1 消息映射声明的解释 47 4.2.3.2 消息映射实现的解释 49 4.2.4 消息映射宏的种类 51 4.3 CcmdTarget类 54 4.4 MFC窗口过程 55 4.4.1 MFC窗口过程的指定 56 4.4.2 对Windows消息的接收和处理 58 4.4.2.1 从窗口过程到消息映射 59 4.4.2.2 Windows消息的查找和匹配 60 4.4.2.3 Windows消息处理函数的调用 62 4.4.2.4 消息映射机制完成虚拟函数功能的原理 63 4.4.3 对命令消息的接收和处理 64 4.4.3.1 MFC标准命令消息的发送 64 4.4.3.2 命令消息的派发和消息的多次处理 67 4.4.3.3 一些消息处理类的OnCmdMsg的实现 69 4.4.3.4 一些消息处理类的OnCommand的实现 71 4.4.4 对控制通知消息的接收和处理 72 4.4.4.1 WM_COMMAND控制通知消息的处理 72 4.4.4.2 WM_NOTIFY消息及其处理: 73 4.4.4.3 消息反射 74 4.4.5 对更新命令的接收和处理 77 4.4.5.1 实现方法 77 4.4.5.2 状态更新命令消息 78 4.4.5.3 类CCmdUI 79 4.4.5.4 自动更新用户接口对象状态的机制 80 4.5 消息的预处理 82 4.6 MFC消息映射的回顾 83 第5章 MFC对象的创建 85 5.1 MFC对象的关系 85 5.1.1 创建关系 85 5.1.2 交互作用关系 86 5.2 MFC提供的接口 87 5.2.1 虚拟函数接口 87 5.2.2 消息映射方法和标准命令消息 91 5.3 MFC对象的创建过程 94 5.3.1 应用程序中典型对象的结构 94 5.3.1.1 应用程序类的成员变量 95 5.3.1.2 CDocument的成员变量 97 5.3.1.3 文档模板的属性 97 5.3.2 WinMain入口函数 99 5.3.2.1 WinMain流程 99 5.3.2.2 MFC空闲处理 101 5.3.3 SDI应用程序的对象创建 102 5.3.3.1 文档模板的创建 102 5.3.3.2 文件的创建或者打开 103 5.3.3.3 SDI边框窗口的创建 112 5.3.3.4 视的创建 115 5.3.3.5 窗口初始化 116 5.3.3.6 视的初始化 120 5.3.3.7 激活边框窗口(处理WM_ACTIVE) 121 5.3.3.8 SDI流程的回顾 122 5.3.4 MDI程序的对象创建 123 5.3.4.1 有别于SDI的主窗口加载过程 124 5.3.4.2 MDI子窗口、视、文档的创建 125 5.3.4.3 MDI子窗口的初始化和窗口的激活 127 第6章 应用程序的退出 131 6.1 边框窗口对WM_CLOSE的处理 131 6.2 窗口的销毁过程 135 6.2.1 DestroyWindow 135 6.2.2 处理WM_DESTROY消息 136 6.2.3 处理WM_NCDESTROY消息 136 6.3 SDI窗口、MDI主、子窗口的关闭 137 第7章 MFC的DLL 139 7.1 DLL的背景知识 139 7.2 调用约定 141 7.2.1 MFC的DLL应用程序的类型 142 7.3 DLL的几点说明 143 7.4 输出函数的方法 145 第8章 MFC的进程和线程 148 8.1 Win32的进程和线程概念 148 8.2 Win32的进程处理简介 148 8.2.1 进程的创建 148 8.2.2 进程的终止 149 8.3 Win32的线程 150 8.3.1 线程的创建 150 8.3.2 线程的终止 150 8.3.3 线程局部存储 151 8.4 线程同步 152 8.4.1 同步对象 152 8.4.2 等待函数 153 8.5 MFC的线程处理 154 8.5.1 创建用户界面线程 155 8.5.2 创建工作者线程 155 8.5.3 AfxBeginThread 155 8.5.4 CreateThread和_AfxThreadEntry 157 8.5.5 线程的结束 160 8.5.6 实现线程的消息循环 161 第9章 MFC的状态 163 9.1 模块状态 163 9.2 模块、进程和线程状态的数据结构 164 9.2.1 层次关系 164 9.2.2 CNoTrackObject类 166 9.2.3 AFX_MODULE_STATE类 166 9.2.4 _AFX_BASE_MODULE_STATE 169 9.2.5 _AFX_THREAD_STATE 169 9.2.6 AFX_MODULE_THREAD_STATE 171 9.3 线程局部存储机制和状态的实现 172 9.3.1 CThreadSlotData和_afxThreadData 173 9.3.1.1 CThreadSlotData的定义 173 9.3.1.2 CThreadSlotData的一些数据成员 174 9.3.1.3 _afxThreadData 175 9.3.2 线程状态_afxThreadState 176 9.3.3 进程模块状态afxBaseModuleState 178 9.3.4 状态对象的创建 180 9.3.4.1 状态对象的创建过程 180 9.3.4.2 创建过程所涉及的几个重要函数的算法 183 9.4 管理状态 184 9.4.1 模块状态切换 184 9.4.2 扩展DLL的模块状态 186 9.4.2.1 _AFX_EXTENSION_MODULE 187 9.4.2.2 扩展DLL的初始化函数 188 9.4.3 核心MFC DLL 190 9.4.4 动态链接的规则DLL的模块状态的实现 190 9.5 状态信息的作用 192 9.5.1.1 模块信息的保存和管理 192 9.5.2 MFC资源、运行类信息的查找 193 9.5.3 模块信息的显示 194 9.5.4 模块-线程状态的作用 196 9.5.4.1 只能访问本线程MFC对象的原因 196 9.5.4.2 实现MFC对象和Windows对象之间的映射 196 9.5.4.3 临时对象的处理 199 9.6 状态对象的删除和销毁 199 第10章 内存分配方式和调试机制 202 10.1 M内存分配 202 10.1.1 内存分配函数 202 10.1.2 C++的new 和 delete操作符 204 10.2 调试手段 204 10.2.1 C运行库提供和支持的调试功能 204 10.2.2 MFC提供的调试手段 205 10.2.3 内存诊断 208 第11章 MFC下的文件类 210 11.1 文件操作的方法 210 11.2 MFC的文件类 210 11.2.1 CFile的结构 211 11.2.1.1 CFile定义的枚举类型 211 11.2.1.2 CFile的其他一些成员变量 212 11.2.1.3 CFile的成员函数 212 11.2.2 CFile的部分实现 213 11.2.3 CFile的派生类 215 第12章 对话框和对话框类CDialog 217 12.1 模式和无模式对话框 217 12.1.1 模式对话框 217 12.1.2 无模式对话框 218 12.2 对话框的MFC实现 219 12.2.1 CDialog的设计和实现 219 12.2.1.1 CDialog的成员变量 219 12.2.1.2 CDialog的成员函数: 219 12.2.2 MFC模式对话框的实现 220 12.2.2.1 MFC对话框过程 220 12.2.2.2 模式对话框窗口过程 221 12.2.2.3 使用原对话框窗口过程作消息的缺省处理 225 12.2.2.4 Dialog命令消息和控制通知消息的处理 226 12.2.2.5 消息预处理和Dialog消息 228 12.2.2.6 模式对话框的消息循环 229 12.2.3 对话框的数据交换 233 12.2.3.1 数据交换的方法 233 12.2.3.2 CDataExchange 234 12.2.3.3 数据交换和验证函数 236 12.2.3.4 UpdateData函数 239 12.3 无模式对话框 240 12.3.1 CScrollView 240 12.3.2 CFormView 242 12.3.2.1 CFormView的创建 243 12.3.2.2 CFormView的消息预处理 245 12.3.2.3 CFormView的输入焦点 247 第13章 MFC工具条和状态栏 248 13.1 Windows控制窗口 248 13.2 MFC的工具条和状态栏类 249 13.2.1 控制窗口的创建 251 13.2.1.1 PreCreateWindow 251 13.2.1.2 控制条的窗口创建 253 13.2.2 控制条的销毁 259 13.2.3 处理控制条的位置 259 13.2.3.1 计算控制条位置的过程和算法 259 13.2.3.2 CFrameWnd的虚拟函数RecalcLayout 260 13.2.3.3 CWnd的成员函数RepositionBars 262 13.2.4 工具条、状态栏和边框窗口的接口 265 13.2.4.1 应用程序在状态栏中显示信息 265 13.2.4.2 状态栏显示菜单项的提示信息 268 13.2.4.3 控制条的消息分发处理 270 13.2.4.4 Tooltip 275 13.2.4.5 禁止和允许 279 13.2.4.6 显示或者隐藏工具栏和状态栏 285 13.2.5 泊位和漂浮 286 第14章 SOCKET类的设计和实现 288 14.1 WinSock基本知识 288 14.1.1 WinSock API 288 14.1.2 Socket的使用 290 14.2 MFC对WinSockt API的封装 291 14.2.1 CAsyncSocket 291 14.2.2 socket对象的创建和捆绑 292 14.2.3 异步网络事件的处理 296 14.3 CSocket 297 14.4 CSocketFile 299
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值