自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

顺其自然~专栏

思路决定出路,科技创造奇迹。

  • 博客(64)
  • 收藏
  • 关注

转载 sprintf函数的用法

sprintf函数的原形:int sprintf( char *buffer, const char *format [, argument,...] );除了前两个参数固定外,可选参数可以是任意个。buffer是字符数组名;format是格式化字符串。sprintf函数的功能与printf函数的功能基本一样,只是它把结果输出到指定的字符串中了。sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕。sprintf的第一个参数是目的字

2020-11-30 21:28:54 443

转载 const char * 、char const *、 char * const 三者的区别

C/C++ 中关于以下三种定义:const char *ptr;char const *ptr;char * const ptr;现整理三者之间的区别与联系。一、const char *ptr;定义一个指向字符常量的指针,这里,ptr是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容,换句话说,*ptr的值为const,不能修改。但是ptr的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对ptr而言,这个值是常量。实验如下:ptr指向str,而str不是

2020-11-30 21:17:12 134

转载 SetROP2

Windows API SetROP2(int nDrawMode)主要用于设定当前前景色的混合模式。就是设置绘画的模式,绘画模式有很多种,比如最简单的绘画模式就是你的当前画笔是什么颜色,在屏幕上画的就是什么颜色。R2_NOT就是取反的意思,即前景色为背景色的反色,经常用R2_NOT来画橡皮线,因为两次取反可以还原背景色。函数原型:int SetROP2( HDC hdc, int fnDrawMode);返回值:函数调用成功后返回调用前的模式,调用失败则返回零。函数的主要的作用根据nDra

2020-11-27 22:12:44 123

转载 c++中CDC探究

继承层次:CObject└CDC定义:CDC类定义的是设备上下文对象的类。 (Class Device Context设备上下文)CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员。通过CDC对象的成员函数进行所有的绘图。类对设备上下文操作提供了成员函数,处理绘图工具。安全型图形设备接口(GDI)对象收集,以及处理颜色和调色板。它还为获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴、绘制直线及绘制简单椭圆和多...

2020-11-27 21:22:58 206

转载 MultiByteToWideChar和WideCharToMultiByte用法详解

一、MultiByteToWideChar 函数功能:该函数映射一个字符串到一个宽字符(unicode)的字符串。由该函数映射的字符串没必要是多字节字符组。  函数原型:int MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int cchMultiByte, LPWSTR lpWideCharStr, int cchWideChar);  参数:  CodePage:指定执行转换的代码...

2020-11-27 09:04:17 193

转载 DoDataExchange

void CDlgSelectCS::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //先调用父类方法 DDX_Text(pDX, IDC_EDIT_SCR, m_ScrCS_Name); DDX_Text(pDX, IDC_EDIT_DEST, m_DestCS_Name); }MSDN是这样描述的:Called by the framework to exchange and v.

2020-11-26 21:31:58 85

转载 Windows消息机制

1.Windows 的历史中国人喜欢以史为鉴,而事实也确实是,如果你能知道一件事情的来龙去脉,往往可以更容易地理解事物为什么会表现为当前这样的现状。所以,我的介绍性开场白通常会以一段历史开始。不过,我不会以精确到年月日的那种方式详细讲述,而是选取几个对我们的编程生涯有重要影响的关键点。Windows 是真正的图形化界面操作系统的普及者,无论任何人,争夺什么第一个实现的GUI、第一个商业化的GUI之类的虚名,都替代不了 Windows 的历史功绩,让最普通的用户能够容易地操纵PC。第一个声名大噪.

2020-11-20 22:24:58 120

转载 CWinApp

基本信息CWinApp为应用程序类MFC 中的主应用程序类封装用于 Windows 操作系统的应用程序的初始化、运行和终止。基于框架生成的应用程序必须有且仅有一个从 CWinApp 派生的类的对象。在创建窗口之前先构造该对象。CWinApp 是从 CWinThread 派生的,后者表示可能具有一个或多个线程的应用程序的主执行线程。在最新版本的 MFC 中,InitInstance、Run、ExitInstance 和 OnIdle 成员函数实际位于 CWinThread 类中。此处将这些函数..

2020-11-20 09:32:21 101

转载 查找main函数

一、说明1.使用环境寻找main函数的主要目的,还是寻找用户代码,所以通常只用在控制台程序和SDK程序。其他界面程序会使用各种界面库,即便找到main函数,里面也是一堆非用户编写代码,没有任何意义。2.调用方式会影响代码特征VS默认调用约定_cdecl,堆栈传参,所以传参的代码是PUSH*如果是其他CALL,会用到寄存器传参和堆栈传参,代码是会发生变化的二、查找main函数1.main函数特点main( int argc, // 命令行参数数量 .

2020-11-20 09:20:17 62

转载 MFC消息映射BEGIN_MESSAGE_MAP详解

MFC的消息映射对于对开发者处理消息可谓十分方便。MFC类继承众多,虚函数表占内存大导致微软直接不采用虚函数方式。发现《VC++深入详解》只大概说了消息映射的原理,没有详细介绍其实现,所以写篇小文章探究下。一、首先在使用消息映射之前,必须先声明DECLARE_MESSAGE_MAP()DECLARE_MESSAGE_MAP()是个宏定义,对应的源码为:#define DECLARE_MESSAGE_MAP()private:static const AFX_MSGMAP_...

2020-11-19 22:21:55 125

原创 c++中 \ 代表什么意思

\是行连续的意思,有这个符号,就是下一行是接着上一行的意思,就是下一行和上一行从语法上来说是一行,只是分成了多行来写。如果写在一行,可能太长了,不美观,所以用\分割一下子。如图所示:...

2020-11-19 21:52:30 145

原创 MFC结构分析

在VS2015中创建完项目之后,会自动生成下面的文件结构:包括引用、外部依赖、头文件、源文件、资源文件、ReadMe。下面对这些文件进行分类描述:和项目名称相同的有两个文件,比如说我的项目名称是MFCApplication3,则会有MFCApplication3.cpp和MFCApplication3Dlg.cpp。这个地方可以和C#项目的文件结构进行类比,C#项目创建完成之后会有两个文件,分别是Program.cs和Form1.cs。分别代表程序的入口和主窗口。其实MFCApplica

2020-11-19 21:43:22 102

转载 PASCAL语言的基本知识

Pascal是一种计算机通用的高级程序设计语言。它由瑞士Niklaus Wirth教授于六十年代末设计并创立。 以法国数学家命名的Pascal语言。现已成为使用最广泛的基于DOS的语言之一。其主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。pascal语法图程序组成例1.1计算半径为R的圆面积Sprogram Area; {程序首部}{已知半径求圆的面积}const pi=3.14159; {说明部分——数据描述}var s,r:real;begin 

2020-11-19 21:09:22 198

转载 subclassdlgitem

该函数用来子类化一个控件.Subclass(子类化)是MFC中最常用的窗体技术之一。子类化完成两个工作:一是把窗体类对象attach到一个windows窗体实体中(即把一个窗体的hwnd赋给该类)。另外就是把该类对象的消息加入到消息路由中,使得该类可以捕获消息。SubclassDlgItem可以把对话框中已有的控件与某个窗口对象动态连接起来,该窗口对象将接管控件的消息处理,从而使控件具有新的特性.SubclassDlgItem函数的声明为BOOL SubclassDlgItem( UINT nI

2020-11-19 17:22:00 91

转载 GetKeyState

该函数检取指定虚拟键的状态。该状态指定此键是UP状态,DOWN状态,还是被触发的(开关每次按下此键时进行切换)。函数原型SHORT GetKeyState(int nVirtKey);函数nVrtKey:定义一虚拟键。若要求的虚拟键是字母或数字(A~Z,a~z或0~9),nVirtKey必须被置为相应字符的ASCII码值,对于其他的键,nVirtKey必须是一虚拟键码。若使用非英语键盘布局,则取值在ASCIIa~z和0~9的虚拟键被用于定义绝大多数的字符键。例如,对于德语键盘格式,值

2020-11-19 14:32:25 49

转载 SetCapture

函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。作用及参数函数原型:HWND SetCapture(HWND hwnd);(函数原型相当于函数声明,包括函数类型、函数名、形参列表(其中形参名可以省略),且不需要函数体,函数定义需要函数体)参数:hWnd:当前线程里要捕获鼠标的窗口句柄。

2020-11-19 14:23:45 80

转载 MQ(Message Queue)

MQ 介绍MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据机构。指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息。MQ的作用消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。解耦:一个业务需要多个模块共同实现,或者一条消息有多个系统需要...

2020-11-18 15:43:48 30

转载 MQTT

简介MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器...

2020-11-18 13:38:17 73

转载 什么是缓冲区(buffer),什么是缓存(cache)

什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。为什么要引入缓冲区我们为什么要引入缓冲区呢?比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提

2020-11-17 22:31:03 341

转载 并发、并行、串行

并发(concurrency)和并行(parallellism)的区别:解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。解释三:在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。所有的并发处理都有排队等候,唤醒,执行至少三个这样的步骤.所以并发肯定是宏观概念,在微观上...

2020-11-17 22:12:18 64

转载 阻塞和非阻塞

阻塞和非阻塞指的是调用者(程序)在等待返回结果(或输入)时的状态。阻塞时,在调用结果返回前,当前线程会被挂起,并在得到结果之后返回。非阻塞时,如果不能立刻得到结果,则该调用者不会阻塞当前线程。因此对应非阻塞的情况,调用者需要定时轮询查看处理状态。1.同步与异步同步和异步关注的是消息通信机制(synchronous communication/ asynchronous communication)。所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到.

2020-11-17 11:13:35 27

转载 lib文件

lib是一种文件名后缀,代表的是静态数据连接库,在windows操作系统中起到链接程序和函数(或子过程)的作用,相当于Linux中的.a或.o、.so文件。意义LIB文件中存放的是函数调用的信息,值得一提的是数据库有静态数据库(.lib文件)和动态数据库(.dll文件)。静态编译静态编译将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序。静态编译的优点是编写出来的程序不需要调用DLL和载入函数,直接可以当成程序的一部分来使用。静态编译的缺点也是显而易见的,使用静态

2020-11-17 10:18:42 42

转载 ws2_32.dll和wsock32.dll

Wsock32.Dll与Ws2_32.Dll区别:CSocket在Wsock32.Dll中实现,Socket API在Ws2_32.Dll实现。这两个Dll是两个不同层次的接口,调用关系如下:网络应用程序->CSocket(WSock32.Dll)->Socket API(ws2_32.Dll)-> 网络传输服务进程.WSock32.Dll映射mswsock.dll和ws2_32.Dll两个文件。ws2_32.Dll是真正的实现。我们知道,WS2_32.DLL导出了send、se.

2020-11-17 08:53:08 48

转载 关于iostream与using namespace std 的解析

当我们在使用C++语法进行编程练习的时候,往往在代码的前两行会这样来写include<iostream>using namespace std;学过C语言的同学在学习C++的时候是否会产生这样的疑惑呢:练习C语言编程的时候,只需要声明一个头文件:#include<stdio.h>.而为什么在C++中,却需要写出include<iostream>和using namespace std;这两行代码呢?其中第一行include<iostream&

2020-11-16 17:05:52 38

转载 socket原理及实例

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。简介套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处

2020-11-16 16:04:23 125

转载 IT前端开发和后端开发

前端开发和后端开发都是干什么的?有哪些区别?通俗地讲,前端干的工作是用户可以直接看得见的,而后端开发的工作主要在服务端,用户不太能直接看到。虽然前端开发和后端开发的工作有巨大的区别,但是他们的工作都是相辅相成的,都是为了更好的用户体验。1、前端开发:网站的“前端”是与用户直接交互的部分,包括你在浏览网页时接触的所有视觉内容--从字体到颜色,以及下拉菜单和侧边栏。这些视觉内容,都是由浏览器解析、处理、渲染相关HTML、CSS、Java 文件后呈现而来。前端开发,就是要创造上面提到的网站面向用户的部分背

2020-11-16 08:37:12 81

原创 ChromeNativeMessaging 原生消息通信

原生消息通信chrome extension扩展程序可以与原生应用程序交换消息。支持该特性的原生应用程序必须注册一个了解如何与扩展程序通信的原生消息宿主,Chrome 浏览器将在单独的进程中启动宿主,并通过标准输入和标准输出流与之通信。在Chrome浏览器中,Native Messaging是唯一能让web page调用Native API的技术,这里记录要达到这个目的所要涉及到的知识。web page、extension和native messaging host三者之间用UTF-8编码的json字符

2020-11-13 14:58:17 162

转载 iostream

iostream是指iostream库。iostream的意思是输入输出流,直接点说就是in(输入) out(输出) stream(流),取in、out的首字母与stream合成。组成iostream 库的基础是两种命名为 istream 和 ostream 的类型,分别表示输入流和输出流。流是指要从某种 IO 设备上读出或写入的字符序列。术语“流”试图说明字符是随着时间顺序生成或消耗的。标准库定义了 4 个 IO 对象。处理输入时使用命名为 cin(读作 see-in)的 istream

2020-11-13 13:24:26 85

转载 cout后面输出时加endl和不加endl的区别

本文探讨一下C++中使用的时候加endl和不加endl的区别首先,endl就是end line的区别,也就是“结束此行”,但实际上有两个操作1 换行2对缓冲流进行冲刷,使得流中所有剩余字符被写入输出序列。其实作用说白了就是加<<endl后会有一个换行。下次再用cout输出字符时就会在下一行开始输出,如果不加,就会跟在当前行的最后输出。下面给出一个例子,这个例子是华为机试的例子,就是说判断一个long型的数据的所有分解因子,要求这些因子都是质数测试例子:输入180输出.

2020-11-13 13:06:32 110

转载 C++ getline函数用法详解

虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题。(cin可以理解为console in,cout可以理解为console out)当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。以下面的语句为例:cin >> namel;可以输入 "Mark" 或 "Twain",但不能输入 "Mark Twain",因为 cin 不

2020-11-13 11:47:28 77

转载 循环冗余校验(CRC)算法入门引导

前言CRC校验(Cyclic Redundancy Check,循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC 算法对各种数据进行校验。因此,掌握基本的CRC算法应是嵌入式程序员的基本技能。可是,我认识的嵌入式程序员中能真正掌握CRC算法的人却很少,平常在项目中见到的CRC的代码多数都是那种效率非常低下的实现方式。其实,在网上有一篇介绍CRC 算法的非常好的文章,作者是Ross Williams,题目叫:“A PAINLESS GUIDE TO CRC ERROR

2020-11-13 11:31:59 70

原创 压缩文件修复

如果你打开一个压缩包,却发现它发生了损坏。那可以启动 WinRAR ,定位到这个受损压缩文件夹下,在其中选中这个文件,再选择工具栏上的“修复”按钮(英文版的为 Repair ),确定后 WinRAR 就开始修复这个文件,并会弹出修复的窗口。只要选择修复的 ZIP 文件包或 RAR 压缩包即可。...

2020-11-13 11:02:33 33

转载 C++ 继承

面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。继承代表了is a关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。基类 & 派生类一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一..

2020-11-12 21:46:24 26

原创 非静态成员必须与特定对象相对

报错:非静态成员必须与特定对象相对。分析:类的成员有两种:静态成员和实例成员(包括实例和函数)。实例成员的存储空间属于具体的实例,不同实例(对象)的同名成员拥有不同的存储空间;静态成员的存储空间是固定的,与具体的实例(对象)无关,被该类的所有实例共享。访问静态成员可以用ClassName::MemberName,也可以用ClassName.MemberNme,但最好用前者,因为很容易就可以判定成员是静态成员。访问实例成员只能用ClassName.MemberName,不能用ClassNa..

2020-11-12 21:30:58 97

转载 关于 wcout 输出中文的问题

1. cout场景1: 在源文件中定义 const char* str = "中文" 在 VC++ 编译器上,由于Windows环境用 GBK编码,所以字符串 "中文" 被保存为 GBK内码,编译器也把 str 指向一个包含有 GBK编码的只读内存空间(因为是const)。用 cout 输出 str 时,由于中文Windows环境用GBK编码,所以把GBK编码的 str 内容输出到控制台,没问题。场景2: 在Linux 下编辑一个文件 const char* str = "中文", 由于Linux普遍使.

2020-11-12 21:14:38 28

转载 C++中L和_T()之区别

字符串前面加L表示该字符串是Unicode字符串。(L应该是Long的意思)_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,Visual C++里边定义字符串的时候,用_T来保证兼容性。VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。以下是别人的总结:一、在字符串前加一个L作用:如 L"我的字符串" 表示将ANSI字符串转换成unicode的.

2020-11-12 20:34:37 43

转载 机器人

机器人(Robot,自动执行工作的机器装置)是一种能够半自主或全自主工作的智能机器。历史上最早的机器人见于隋炀帝命工匠按照柳抃形象所营造的木偶机器人,施有机关,有坐、起、拜、伏等能力。机器人具有感知、决策、执行等基本特征,可以辅助甚至替代人类完成危险、繁重、复杂的工作,提高工作效率与质量,服务人类生活,扩大或延伸人的活动及能力范围。历史《隋书》里曾记载了一个机器人的故事:“……帝犹恨不能夜召,于是命匠刻木偶人,施机关,能坐起拜伏,以像于抃。帝每在月下对酒,辄令宫人置之于座,与相酬酢,而为欢.

2020-11-12 14:06:58 329

转载 详解开源免费且稳定实用的.NET PDF打印组件itextSharp

提到打印,恐怕对于很多人都不会陌生,无论是开发者,还是非计算机专业的人员都会接触到打印。对于项目开发中使用到打印的地方会非常多,在.NET项目中,选择打印的方式比较多,例如原始的IE网页打印、水晶报表、JS插件实现打印、导出文档打印,以及今天提到的使用itextSharp组件实现PDF打印等等。在.NET中实现PDF打印的组件比较多,例如PDFsharp、Report.NET、sharpPDF、itextSharp等等,今天主要简单的介绍itextSharp组件。零、什么是PDF?PDF(Po.

2020-11-12 11:32:51 117

转载 PDFsharp使用介绍

0、说明  项目组开发的应用系统已经使用了多年,我在其中负责使用C#的GDI+功能绘制特定的卡片格式并支持在线编辑。用户在使用过程中提出,他们希望将应用系统中使用GDI+绘制的卡片格式和内容变成pdf文档,然后在应用系统外使用。之前采用的是偷懒的方式,因为用户电脑上都装了pdf打印机,所以建议他们直接在应用系统中将卡片打印到pdf打印机上,这样就生成了pdf格式的文档。但是他们有批量输出卡片的需求,还想按一定的顺序把多个卡片的内容合并到一个pdf文档中,这时用pdf打印机生成pdf文档就满足不了需求了。

2020-11-12 10:52:27 148

转载 控制台console使用MFC库函数,Cout输出CString的方法

新建工程的时候选择:Win32 Console Application在向导的地方勾选MFC头文件支持,确认即可等待初始化文件完成后,VS2010会自动打开 项目名.cpp的文件其中int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])这个相当于main函数里面的内容全部可以删除,最后加上一句return 0;即可MFC常用类:CString类大家使用VS2010的话,可能会见到CStringT,实际上它是一个操作可变长度字符串的模板类.

2020-11-11 21:47:24 20

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除