收藏 分享(赏)

Visual C++ 6.0 MFC 入门教程-闻怡洋.pdf

上传人:HR专家 文档编号:4851994 上传时间:2019-01-16 格式:PDF 页数:76 大小:463.34KB
下载 相关 举报
Visual C++ 6.0 MFC 入门教程-闻怡洋.pdf_第1页
第1页 / 共76页
Visual C++ 6.0 MFC 入门教程-闻怡洋.pdf_第2页
第2页 / 共76页
Visual C++ 6.0 MFC 入门教程-闻怡洋.pdf_第3页
第3页 / 共76页
Visual C++ 6.0 MFC 入门教程-闻怡洋.pdf_第4页
第4页 / 共76页
Visual C++ 6.0 MFC 入门教程-闻怡洋.pdf_第5页
第5页 / 共76页
点击查看更多>>
资源描述

1、*V i s ual C + + / MF C 入门教程闻怡洋V i s ual C + + / MF C 入门教程闻怡洋. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1O N _WM_CR E A T E ( ) . . . . . . . . . . . . .

2、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6E N D _ME S S A G E _MA P ( ) . . . . . . . . . . . . . . . . . . . . . . . . . .

3、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6C P e n* pPe nOl d=( C P e n*)pDC S e l e c t O bj e c t ( & pen1) / / 选择对象进D C . . . . . . . . . . . . . . . . . . . . . .

4、 . . . . . . . . . . . . . . . . . . 92.2 在窗口中输出文字. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3 使用点、刷子、笔进行绘图

5、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142. 4 在窗口中绘制设备相关位图、图标、设备无关位图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6、 . . . . . . . . . . . . . . . . . . . . . . 15C D C m e m D C / / 定义一个兼容D C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162. 5 使用各种映射方式. . . . . .

7、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172. 6 多边形和剪贴区域. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183. 1 文档视图框架窗口间的关系和消息传送规律. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9、 . . . . . . . . . . . . . 193. 2 接收用户输入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20D r a w R

10、e c t ( ) / / 恢复上次所画的矩形. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21D r a w R e c t ( ) / / 恢复上次所画的矩形. . . . . . . . . . . . . . . . . . . . . . . . .

11、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213. 4 文档、视、框架之间相互作用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12、. . . . . . . . . . . . . . . . . . . . . . . . . . 25/ / 修改链表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13、. . . . . . . . . . . . . . . . . . 27C V i e w 类是最基本的视类只支持最基本的操作。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284. 1 B ut t on. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294. 2 S t a t i c B ox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304. 3 E di t B ox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314. 4 S c r ol l B a r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324. 5 L i s t B ox/C hec k L i s t B ox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334. 6 C ombo B ox/C ombo B ox E x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344. 7 T r e e C t r l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

20、. . . . . . . . . . . . . . . . . . . . . . . . 364. 8 L i s t C t r l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21、 . . . . . . . . . . . . . . . . . . . . 394. 9 T a b C t r l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22、. . . . . . . . . . . . . . . . 42D i a l og B a r 支持O N _UP D A T E _CO MMA N D _UI 的相关操作,如S e t T e xt,E nabl e。. . . . . . . . . . . 45I D _SE P A R A T O R , / / s t a t us l i ne i ndic a t or. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46O N _WM_CR E A T E ( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

24、. . . . . . . . . . . . . . . . . . 46/ / 修改O nCr e a t e 函数,重新设置状态条第二部分I D 值. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475. 1 使用资源编辑器编辑对话框 515. 2 创建有模式对话框 525. 3 创建无模式对话框 54E N D _ME S S A G E _MA P ( ) 565. 4 在对话框中进行消息映射

25、575. 5 在对话框中进行数据交换和数据检查 605. 6 使用属性对话框 635. 7 使用通用对话框 65C S t r i ng C F i l e D i a l og: G e t F i l e N a m e ( ) 得到完整的文件名,包括扩展名如:t e s t 1. t xt 66C S t r i ng C F i l e D i a l og: G e t E xt N a m e ( ) 得到完整的文件扩展名,如:t xt 66C S t r i ng C F i l e D i a l og: G e t F i l e T i t l e ( ) 得到完整的文件名

26、,不包括目录名和扩展名如:t e s t 1 66C S t r i ng C F ontD i a l og: G e t F a c e N a m e ( ) 得到所选字体名字。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67C O L O R R E F C F ontD i a l og: G e t C ol or ( ) 得到所选字体的颜色。. . . . . . . . . . . . . . . . . . .

27、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67B O O L C F ontD i a l og: I s S t r i keO ut ( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28、 . . 67B O O L C F ontD i a l og: I s U nder l i ne( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675. 8 建立以对话框为基础的应用. . . . . . . . . . . . . . . .

29、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675. 9 使用对话框作为子窗口. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68/ / 由于C F or m V i e w 的成员受保护,所以必须对指针进行强制转换. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696. 1 Wi nSock 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . .

31、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696. 2 利用Wi nSock 进行无连接的通信. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73C D i a l og: O nI ni t D i a l og() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73C D i a l og: O nI ni t D i a l og() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34、. . . . . . . . . . . . . . . . . . . 74C D i a l og: O nI ni t D i a l og() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35、 . . 75ht t p: / / w w w . c c w . c om. c n/ ht m / pr odu/s pec i a l / vc/ l i s t 1. a s p第一章V C 入门1 . 1 如何学好V C1. 2 理解Wi ndows 消息机制1. 3 利用V i s ual C + + / MF C 开发Wi ndows 程序的优势1. 4 利用MF C 进行开发的通用方法介绍1. 5 MF C 中常用类、宏、函数介绍第二章图形输出2. 1 和 G U I 有关的各种对象2. 2 在窗口中输出文字2. 3 使用点、刷子、笔进行绘图2. 4 在窗口中绘制设备相关位图

36、、图标、设备无关位图2. 5 使用各种映射方式2. 6 多边形和剪贴区域第三章文档视结构3. 1 文档视图框架窗口间的关系和消息传送规律3. 2 接收用户输入3. 3 使用菜单3. 4 文档、视、框架之间相互作用3. 5 利用序列化进行文件读写3. 6 MF C 中所提供的各种视类介绍第四章窗口控件4. 1 B ut t on4. 2 S t a t i c B ox4. 3 E di t B ox4. 4 S c r ol l B a r4. 5 L i s t B ox/C hec k L i s t B ox4. 6 C ombo B ox/C ombo B ox E x4. 7 T r

37、 e e C t r l4. 8 L i s t C t r l4. 9 T a b C t r l4. A T ool B a r4. B S t a t us B a r4. C D i a l og B a r4. D 利用A ppWi z a r d 创建并使用T oolB a r S t a t usB a r D i a l og B a r4. E G e ner a l Wi ndow4. F 关于WM_NO T I F Y 的使用方法第五章对话框5. 1 使用资源编辑器编辑对话框5. 2 创建有模式对话框5. 3 创建无模式对话框5. 4 在对话框中进行消息映射5. 5 在对

38、话框中进行数据交换和数据检查5. 6 使用属性对话框5. 7 使用通用对话框5. 8 建立以对话框为基础的应用5. 9 使用对话框作为子窗口第六章网络通信开发6. 1 Wi nSock 介绍6. 2 利用Wi nSock 进行无连接的通信6. 3 利用Wi nSock 建立有连接的通信第一章 V C 入门1 .1 如何学好V C这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学习就会起到更好的效果。万事开头难,为了帮助朋友们更快的掌握V C 开发,下面我将自己的一点体会讲一下:1、需要有好的C / C + +基础。正所谓“磨刀不误砍柴工”,最开始接触V C 时不要

39、急于开始Wi ndows 程序开发,而是应该进行一些字符界面程序的编写。这样做的目的主要是增加对语言的熟悉程度,同时也训练自己的思维和熟悉一些在编程中常犯的错误。更重要的是理解并能运用C + + 的各种特性,这些在以后的开发中都会有很大的帮助,特别是利用MF C 进行开发的朋友对C + + 一定要能熟练运用。2、理解Wi ndows 的消息机制,窗口句柄和其他G U I 句柄的含义和用途。了解和MF C 各个类功能相近的A P I 函数。3、一定要理解MF C 中消息映射的作用。4、训练自己在编写代码时不使用参考书而是使用H e l p O nl i ne。5、记住一些常用的消息名称和参数的意

40、义。6、学会看别人的代码。7、多看书,少买书,买书前一定要慎重。8、闲下来的时候就看参考书。9、多来我的主页。 O 后面几条是我个人的一点意见,你可以根据需要和自身的情况选用适用于自己的方法。此外我将一些我在选择参考书时的原则:对于初学者:应该选择一些内容比较全面的书籍,并且书籍中的内容应该以合理的方式安排,在使用该书时可以达到循序渐进的效果,书中的代码要有详细的讲解。尽量买翻译的书,因为这些书一般都比较易懂,而且语言比较轻松。买书前一定要慎重如果买到不好用的书可能会对自己的学习积极性产生打击。对于已经掌握了V C 的朋友:这种程度的开发者应该加深自己对系统原理,技术要点的认识。需要选择一些对

41、原理讲解的比较透彻的书籍,这样一来才会对新技术有更多的了解,最好书中对技术的应用有一定的阐述。尽量选择示范代码必较精简的书,可以节约银子。此外最好涉猎一些辅助性的书籍1.2 理解Windows 消息机制Wi ndows 系统是一个消息驱动的O S,什么是消息呢?我很难说得清楚,也很难下一个定义(谁在嘘我),我下面从不同的几个方面讲解一下,希望大家看了后有一点了解。1、消息的组成:一个消息由一个消息名称(UI NT),和两个参数(WPARAM,LPARAM)。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单选中之后会有WM_CO MMA N D 消息发送,WP A

42、 R A M 的高字中(H I WO R D ( w P a r a m ) )是命令的I D 号,对菜单来讲就是菜单I D。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。2、谁将收到消息:一个消息必须由一个窗口接收。在窗口的过程(WN D P R O C)中可以对消息进行分析,对自己感兴趣的消息进行处理。例如你希望对菜单选择进行处理那么你可以定义对 WM_CO MMA N D 进行处理的代码,如果希望在窗口中进行图形输出就必须对WM_PA I N T 进行处理。3、未处理的消息到那里去了:M$为窗口编写了默认的窗口过程,这个窗口过程将负责处理那些你不处理消息。正

43、因为有了这个默认窗口过程我们才可以利用Wi ndows 的窗口进行开发而不必过多关注窗口各种消息的处理。例如窗口在被拖动时会有很多消息发送,而我们都可以不予理睬让系统自己去处理。4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会被正确的处理。例如有两个窗口共用一个窗口过程代码,你在窗口一上按下鼠标时消息就会通过窗口一的句柄被发送到窗口一而不是窗口二。5、示例:下面有一段伪代码演示如何在窗口过程中处理消息L O N G y o u r W n d

44、P r o c ( H W N D h W n d , U I N T u M e s s a g e T y p e , W P A R A M w P , L P A R A M )s w i t c h ( u M e s s a g e T y p e ) / / 使用S W I T C H 语句将各种消息分开c a s e ( W M _ P A I N T ) :d o Y o u r W i n d o w ( . . . ) / / 在窗口需要重新绘制时进行输出b r e a k c a s e ( W M _ L B U T T O N D O W N ) :d o Y o

45、u r W o r k ( . . . ) / / 在鼠标左键被按下时进行处理b r e a k d e f a u l t :c a l l D e f a u l t W n d P r o c ( . . . ) / / 对于其它情况就让系统自己处理b r e a k 接下来谈谈什么是消息机制:系统将会维护一个或多个消息队列,所有产生的消息都回被放入或是插入队列中。系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权

46、交给系统所以Wi ndows 可以同时进行多个任务。下面的伪代码演示了消息循环的用法:w h i l e ( 1 )i d = g e t M e s s a g e ( . . . ) i f ( i d = = q u i t )b r e a k t r a n s l a t e M e s s a g e ( . . . ) 当该程序没有消息通知时get Me s s a ge 就不会返回,也就不会占用系统的C P U 时间。图示消息投递模式在 16 位的系统中系统中只有一个消息队列,所以系统必须等待当前任务处理消息后才可以发送下一消息到相应程序,如果一个程序陷如死循环或是耗时操作时

47、系统就会得不到控制权。这种多任务系统也就称为协同式的多任务系统。Wi ndows 3. X 就是这种系统。而 32 位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转换而不必等待当前程序完成消息处理就可以得到控制权。这种多任务系统就称为抢先式的多任务系统。Wi ndows 95/N T 就是这种系统1. 3 利用V i s ual C + + / MF C 开发Wi ndows 程序的优势MF C 借助C + + 的优势为Wi ndows 开发开辟了一片新天地,同时也借助A ppli c a t i onWi z z a r d使开发者摆脱离了那些每次都必写基本代码,借

48、助C l a s s Wi z a r d 和消息映射使开发者摆脱了定义消息处理时那种混乱和冗长的代码段。更令人兴奋的是利用C + +的封装功能使开发者摆脱 Wi ndows 中各种句柄的困扰,只需要面对C + +中的对象,这样一来使开发更接近开发语言而远离系统。(但我个人认为了解系统原理对开发很有帮助)正因为MF C 是建立在C + +的基础上,所以我强调C / C + +语言基础对开发的重要性。利用C + +的封装性开发者可以更容易理解和操作各种窗口对象;利用C + +的派生性开发者可以减少开发自定义窗口的时间和创造出可重用的代码;利用虚拟性可以在必要时更好的控制窗口的活动。而且C + +

49、本身所具备的超越C 语言的特性都可以使开发者编写出更易用,更灵活的代码。在 MF C 中对消息的处理利用了消息映射的方法,该方法的基础是宏定义实现,通过宏定义将消息分派到不同的成员函数进行处理。下面简单讲述一下这种方法的实现方法。代码如下B E G I N _ME S S A G E _MA P ( C Ma i nFr a m e , C F r a m e Wnd)/ / A F X _MS G _MA P ( C Ma i nFr a m e )O N _WM_CR E A T E ( )/ / A F X _MS G _MA PO N _CO MMA N D ( I D _FO N T _DR O P D O WN , D oNot hi ng)E N D _ME S S A G E _MA P ( )经过编译后,代码被替换为如下形式(这只是作讲解,实际情况比这复杂得多):/ *这份代码经源码格式软件格式化过yang_hxneusof t . c om */ / B E G I N _ME S S A G E _MA P ( C Ma i nFr a m e , C F r a m e Wnd)C Ma i nFr a

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 简明教程

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报