欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    windows sdk编程系列文章24 ---- 列表视图控件.doc

    • 资源ID:70344643       资源大小:77KB        全文页数:30页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    windows sdk编程系列文章24 ---- 列表视图控件.doc

    windows sdk编程系列文章 -列表视图控件2008-04-29 12:14本课中我们将学习如何创建和使用列表视图控件。理论:列表视图控件和树型视图、丰富文本编辑控件一样是通用控件的一种。可能您都已经知道了列表视图控件,只不过是不知道它的确切名字而已。列表视图控件可以用来很好地显示项目。在这方面它和列表框相同,只不过它的性能更强。有两种方法创建一个列表视图控件。第一种也是最简单的方法是:用资源编辑器来创建它。用该种方法只是不要忘记在您的代码(的任何位置处)加入对InitCommonControls函数的调用(记得吗,调用该函数只是为了隐式地加载包含通用控件的DLL)。另一种方法是调用CreateWindowEx函数,这里您必须指定合适的类名,譬如:SysListView32,WC_LISTVIEW不是正确的类名在列表视图种有四种方法来显示数据:大图标,小图标,列表和报告方式。这些方法和在资源管理器种选择View->Large Icons,Small Icons , List 和 Details 相对应。各种不同的显示方式只是显示了不同的外观而已。譬如,您可能有许多的数据,只是并不想全部显示。报告方式提供的消息最完全,其它的方式则要少得多。在刚创建一个列表视图时您可以选择一种初始显示方法,随后您可以调用SetWinodwLong函数并设置GWL_STYLE标志位来改变显示方式既然我们已经知道了如何创建列表控件,接下来我们学习如何使用它们。我们将主要集中在报告方式的显示上,因为该种方式演示了最多的列表控制的特性。使用列表控制的步骤如下:1. 调用CreateWindowEx函数来创建一个列表控件,指定它的类名为SysListView32。您还可以在此处指定控件初次显示时的方式。 2. 创建和初始化用在列表控件中显示项目的图象列表(如果存在)。 3. 向列表控件中插入列,如果显示的方式是报告方式这一步是必须的。 4. 向控件中插入项目和自项目。 列:在报告方式中,有不止一个列。您可以把放入到列表控件中的数据看作是一张表单:这时数据是按行列排列的。在控件中至少有一列。在其它的显示方式中则无所谓,因为这些显示方式有仅有一列。加入列要通过向列表控件发送LVM_INSERTCOLUMN消息来实现。LVM_INSERTCOLUMNwParam = iCollParam =指向LV_COLUMN型结构体变量的指针iCol 列数,从0开始编号。LV_COLUMN 包含了将插入的列的信息。它的定义如下:typedef struct _LVCOLUMN UINT mask; int fmt; int cx; LPTSTR pszText; int cchTextMax; int iSubItem; #if (_WIN32_IE >= 0x0300) int iImage; int iOrder;#endif LVCOLUMN, *LPLVCOLUMN;Field nameMeaningsmask一组标志位,它指示了该结构体中的那些成员变量是有效的。该结构体中的成员变量并不是同时有效的。在某些时候,可能只有某些成员变量是有效的。结构体可以用来输入和输出。这样让WINDOWS知道那些成员变量是有效的是非常重要的。可能的标志有:LVCF_FMT = fmt有效LVCF_SUBITEM = iSubItem有效 LVCF_TEXT = pszText有效. LVCF_WIDTH = cx有效您可以一次使用几个标志。譬如,如果您向指定列的文本标签(列名),您必须在pszText成员变量中提供列名,然后指定标志LVCF_TEXT告诉WINDOWS成员变量pszText中的值是有效的,否则WINDOWS将忽略掉pszText中的值。fmt指定了项目/子项目的对齐方式。可能的值有:LVCFMT_CENTER = 文本居中 LVCFMT_LEFT = 文本左对齐 LVCFMT_RIGHT = 文本右对齐cxcx 是列的宽度(以像素点为单位)。以后您可以发送消息LVM_SETCOLUMNWIDTH来改变列的宽度。pszText如果用来设定列的属性时,该成员变量为指向列名的指针。如果是查询列名,该成员变量指向一个足够大的缓冲区,用来接收返回的列名,这是您必须在成员cchTextMax中指定缓冲区的大小。如果是设定列名时,可以忽略该变量,因为该指针指向的是一个ASCII码的字符串,而WINDOWS可以解析出ASCII串的长度。cchTextMaxcchTextMax 以字节计的上面一个成员变量指向的缓冲区的小。该成员变量只在您查询列的属性时使用。如果是设定列的属性,那该变量将被忽略。iSubItem指定和该列相连的子项目的索引号。该成员变量的值用来标识和列相连系的子项目。该列的使用最好地说明了如何把列号和子项目相连。要查询列的属性时可以发送LVM_GETCOLUMN消息,并在成员变量mask中指定LVCF_SUBITEM标志,列表控件将在iSubItem中返回插入时设定的iSubItem值。为了使用该办法,您需要在该成员变量中放入正确的值。iImage and iOrder为了和IE3.0以上版本兼容。目前我没有这方面的资料。在列表视图控件创建后,您必须至少向其中插入一列。当然如果不打算使用报告方式显示,那倒是没有必要插入列。为了插入列,您需要定义一个LV_COLUMN型的结构体变量,给其成员变量赋上正确的值,指定列号,然后向列表视图控件发送LVM_INSERTCOLUMN消息并把该结构体变量的值传过去。   LV_COLUMN lvc;   lvc.imask = LVCF_TEXT| LVCF_WIDTH ;   lvc.pszText = Heading1 ;   lvc.lx = 150 ;   SendMessage(hList, LVM_INSERTCOLUMN,0,&lvc);上面的代码段显示了该过程。当发送LVM_INSERTCOLUMN消息时,他指定了列的标题条文本和它的宽度。项目和子项目项目是列表视图中主要的内容。除报告方式显示的外,在列表视图您只能看到项目。子项目是项目的详细信息。一个项目可能有不止一个相关的子项目。举个例子,譬如项目是文件名,那其相关的子项目可能有文件属性、大小、创建日期等。在报告方式的视图中,最左边一列是项目,其它列是子项目。从数据库记录的角度看,项目类似主键,子项目类似记录。至少您的列表视图需要一些项目:子项目是可选的。如果您想要给用户提供更多的信息,可以把子项目和项目相连,然后放到列表视图中以报告的方式显示。您可以通过向列表视图发送LVM_INSERTITEM消息来向其中添加项目,这时还需要把一个指向LV_ITEM型的结构体的变量的指针放到lParam一同传给列表视图。LV_ITEM的定义如下:typedef struct _LVITEM       UINT mask;      int iItem;       int iSubItem;       UINT state;       UINT stateMask;       LPTSTR pszText;       int cchTextMax;       int iImage;      LPARAM lParam; #if (_WIN32_IE >= 0x0300)       int iIndent; #endif#if (_WIN32_IE >= 0x560)       int iGroupId;       UINT cColumns; / tile view columns PUINT puColumns; #endif LVITEM, *LPLVITEM;Field nameMeaningsmask一组标志位标明该结构体中那些成员变量中的值有效。它的意义和上面我们提到的LV_COLUMN型结构体中向对应的成员变量基本相同。更详细的信息,可以查询WIN32 API 手册。iItem该结构体代表的项目的索引号。索引号是从0开始编号的。该值和表单的“行”类似。iSubItem和上一个成员变量指定的项目相连的子项目的索引号。您可以把它当作表单的“列”。譬如您想要把一个项目插入到新创建的列表视图控件,iItem的值应为0(因为该项目是第一个项目),iSubItem的值也应当为0(我们想把该项目插到第一列)。如果你想指定一个子项目和该项目相连,iItem中应该是您想要相连的项目的索引号,iSubItem的值应当是大于0的值,具体的值取决于您想把该子项目插在那一列。如果你的列表视图控件一共有4列的化,第一列包含了项目,其余3列是留给子项目的。如果您想把子项目插在第四列,应当指定该值为3。state该成员变量包含的标志位反应了项目的状态。状态的改变可能是由用户的操作引起的或是程序改变的。这些状态包括:是否有焦点/高亮度显示/被选中(由于被剪切)/被选中等。另外还包括,以1为基数的索引用来代表是否处使用重叠/状态图标。stateMask由于上面的成员变量包含状态标志位、重叠的位图索引号、和状态位图的索引号,我们需要告诉WINDOWS我们到底需要设定或查询那一个值。该成员变量就是用来做这项工作的。pszText当我们想设定项目的属性时,它包含项目名称的ASCII码的字符串的地址。当查询项目的属性时,该成员变量将用来接收查询返回的项目的名称。cchTextMax仅当您用来查询项目的属性时才需要使用该值,这时它包含上一个成员变量的大小。iImage图标在列表视图中的图象链表中的索引号。lParam用户定义的值,当您给项目排序时使用。当您告诉列表视图对项目排序时,列表视图将成对地比较项目。 它将会把两个项目的lParam的值传给您,这样您就可以进行比较先列出那一个了。如果您现在还不太明白的话,没有系,我们稍后还要讲关于排序的问题。现在让我们来总结想列表控件中插入项目/子项目的步骤:1. 定义一个LV_ITEM型的结构体变量。 2. 给该变量赋给合适的值 3. 如果要插入一个项目,就向列表视图控件发送LVM_INSERTITEM值。 如果要插入一个子项目,发送LVM_SETITEM。如果您不明白项目和子项目之间的关系的话,可能会有一些疑惑。子项目仅是项目的属性而已,也就是说您可以插入一个项目但是不能插入一个子项目。所以添加一个子项目十只能发送LVM_SETITEM消息而不能发送LVM_INSERTITEM消息。 列表视图控件的消息/通知既然您知道了如何创建和往其中添加内容,下一步就是如何和它通讯。列表视图控件和它的父窗口之间的通讯是通过消息/通知来进行的。父窗口通过发送消息来控制列表视图控件,列表视图控件通过发送WM_NOTIFY消息来通知它的父窗口。这一点和其它的通用控件没有什么不同。排序项目/子项目您可以在调用CreateWindowEx函数时指定LVS_SORTASCENDING 或 LVS_SORTDESCENDING风格来指定缺省的排序方式。这两种风格仅仅排序项目的名称。如果想要排序项目的其它属性,您可以通过发送LVM_SORTITEMS消息来完成LVM_SORTITEMSwParam = lParamSortlParam = pCompareFunctionlParamSort 用户定义的值,该值将传递给用来比较的函数。pCompareFunction 用户定义的用来比较排序的函数的地址。该函数的原型如下:int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);lParam1 和 lParam2 是 LV_ITEM型的结构体中的成员变量lParam的值。lParamSort 是发送LVM_SORTITEMS消息时参数wParam中的值当列表视图控件接收到LVM_SORTITEMS消息时,当需要比较项目时它会调用在lParam中指定的比较函数。比较函数将决定那一个项目排在前面。方法很简单:如果函数返回一个负值,由(lParam代表的)第一个项目排在前,如果返回正值,第二个项目排在前。如果相等,必须返回0 。真正使得该方法能够运行的是LV_ITEM型结构体中的成员变量lParam值。当您需要排序时(譬如当您点击列的标题条时),您需要考虑好排序方案。在本例中,我们把项目的索引放到该成员变量中,这样我们可以通过发送LVM_GETITEM消息来得到项目的其它信息。注意:当项目重排序后,它们的索引也就变了。所以当重排序后,我需要在lParam参数中反应出新的索引。如果您想在用户点击列的标题条时重新排序,您需要在您的窗口过程函数中处理LVN_COLUMNCLICK通知消息。LVN_COLUMNCLICK消息是随同M_NOTIFY消息一起发送的。例子:见光盘FirstWindow29该例子创建了一个列表视图控件,并在其中显示了当前文件夹中的文件大小和文件名。缺省的视图是报告方式的,如果您点击列标题条,标题将按升/降序重新排列。您可以通过菜单选择不同的显示方式(大图标、小图标等)。当您双击一个项目时,项目的名称将显示在一个对话框中。#include "Windows.h"#include "tchar.h"#include "commctrl.h"#include "shlwapi.h"#pragma comment(lib,"comctl32.lib")#pragma comment(lib,"shlwapi.lib")#define IDM_MAINMENU 10000#define IDM_ICON      LVS_ICON#define IDM_SMALLICON LVS_SMALLICON#define IDM_LIST      LVS_LIST#define IDM_REPORT    LVS_REPORTTCHAR ClassName = _T("ListViewWinClass");TCHAR AppName = _T("Testing a ListView Control");TCHAR ListViewClassName = _T("SysListView32");TCHAR Heading1 = _T("Filename");TCHAR Heading2 = _T("Size");TCHAR FileNamePattern = _T("*.*");TCHAR mytemplate = _T("%lu");DWORD FileNameSortOrder;DWORD SizeSortOrder;HINSTANCE g_hInstance;HWND hList;HMENU   hMenu;void InsertColumn()    LV_COLUMN lvc;    lvc.mask = LVCF_TEXT | LVCF_WIDTH;    lvc.pszText = Heading1;    lvc.cx = 150;    SendMessage(hList,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);    lvc.mask |= LVCF_FMT;    lvc.fmt = LVCFMT_RIGHT;    lvc.pszText = Heading2;    lvc.cx = 100;    SendMessage(hList,LVM_INSERTCOLUMN,1,(LPARAM)&lvc);void ShowFileInfo(DWORD row,WIN32_FIND_DATA* lpFind)    LV_ITEM lvi;    CHAR buffer20;    lvi.mask = LVIF_TEXT | LVIF_PARAM;    lvi.iItem = row;    lvi.iSubItem = 0;    lvi.pszText = lpFind->cFileName;    lvi.lParam = row;    SendMessage(hList,LVM_INSERTITEM,0,(LPARAM)&lvi);    lvi.mask = LVIF_TEXT;    lvi.iSubItem +;    wsprintf(buffer,mytemplate,lpFind->nFileSizeLow);    lvi.pszText = buffer;    SendMessage(hList,LVM_SETITEM,0,(LPARAM)&lvi);void FillFileInfo()    WIN32_FIND_DATA finddata;    HANDLE fHandle;    int i;    BOOL bRet = TRUE;    fHandle = FindFirstFile(FileNamePattern,&finddata);    if(fHandle != INVALID_HANDLE_VALUE)            i = 0;        while(bRet)                    if(!(finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)                            ShowFileInfo(i,&finddata);                i+;                        bRet = FindNextFile(fHandle,&finddata);                FindClose(fHandle);    int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM SortType)    TCHAR buffer256;    TCHAR buffer1256;    LV_ITEM lvi;    INT iRet,iRet1,iRet2;    lvi.mask = LVIF_TEXT;    lvi.pszText = buffer;    lvi.cchTextMax = 256;    switch(SortType)        case 1:        lvi.iSubItem = 1;        SendMessage(hList,LVM_GETITEMTEXT,(WPARAM)lParam1,(LPARAM)&lvi);        StrToIntEx(buffer,STIF_SUPPORT_HEX,&iRet1);        SendMessage(hList,LVM_GETITEMTEXT,(WPARAM)lParam2,(LPARAM)&lvi);        StrToIntEx(buffer,STIF_SUPPORT_HEX,&iRet2);        iRet = iRet1 - iRet2;        break;    case 2:        lvi.iSubItem = 1;        SendMessage(hList,LVM_GETITEMTEXT,(WPARAM)lParam1,(LPARAM)&lvi);        StrToIntEx(buffer,STIF_SUPPORT_HEX,&iRet1);        SendMessage(hList,LVM_GETITEMTEXT,(WPARAM)lParam2,(LPARAM)&lvi);        StrToIntEx(buffer,STIF_SUPPORT_HEX,&iRet2);        iRet = iRet2 - iRet1;        break;    case 3:        lvi.iSubItem = 0;        SendMessage(hList,LVM_GETITEMTEXT,(WPARAM)lParam1,(LPARAM)&lvi);        lstrcpy(buffer1,buffer);        SendMessage(hList,LVM_GETITEMTEXT,(WPARAM)lParam2,(LPARAM)&lvi);        iRet = lstrcmpi(buffer1,buffer);        break;    default:        lvi.iSubItem = 0;        SendMessage(hList,LVM_GETITEMTEXT,(WPARAM)lParam1,(LPARAM)&lvi);        lstrcpy(buffer1,buffer);        SendMessage(hList,LVM_GETITEMTEXT,(WPARAM)lParam2,(LPARAM)&lvi);        iRet = lstrcmpi(buffer,buffer1);        break;        return iRet;void UpdatelParam()    LV_ITEM lvi;    int nCount = SendMessage(hList,LVM_GETITEMCOUNT,0,0);    lvi.mask = LVIF_PARAM;    lvi.iSubItem = 0;    lvi.iItem = 0;    while(nCount > 0)            lvi.lParam = lvi.iItem;        SendMessage(hList,LVM_SETITEM,0,(LPARAM)&lvi);        lvi.iItem+;        nCount -;    void ShowCurrentFocus()    LV_ITEM lvi;    TCHAR buffer256;    int nIndex = SendMessage(hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED);    lvi.iItem = nIndex;    lvi.iSubItem = 0;    lvi.mask = LVIF_TEXT;    lvi.pszText = buffer;    lvi.cchTextMax = 256;    SendMessage(hList,LVM_GETITEM,0,(LPARAM)&lvi);    MessageBox(NULL,buffer,AppName,MB_OK);LONG CALLBACK ProcWinMain(   HWND hWnd,                        UINT Msg,                        WPARAM wParam,                        LPARAM lParam )    switch(Msg)        case WM_CREATE:             hList = CreateWindowEx(NULL,ListViewClassName,NULL,LVS_REPORT | WS_CHILD |WS_VISIBLE,            0,0,0,0,hWnd,NULL,g_hInstance,NULL);        InsertColumn();        FillFileInfo();        SendMessage(hList,LVM_SETTEXTCOLOR,0,(LPARAM)RGB(255,255,255);        SendMessage(hList,LVM_SETBKCOLOR,0,(LPARAM)RGB(0,0,0);        SendMessage(hList,LVM_SETTEXTBKCOLOR,0,(LPARAM)RGB(0,0,0);        hMenu = GetMenu(hWnd);        CheckMenuRadioItem(hMenu,IDM_ICON,IDM_LIST,IDM_REPORT,MF_CHECKED);        break;       case WM_DESTROY:        PostQuitMessage(0);        break;    case WM_SIZE:        MoveWindow(hList,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);        break;    case WM_COMMAND:        if(lParam = 0)                    LONG nStyle = GetWindowLong(hList,GWL_STYLE) ;            nStyle &= LVS_TYPEMASK;            nStyle |= LOWORD(wParam);            SetWindowLong(hList,GWL_STYLE,nStyle);            CheckMenuRadioItem(hMenu,IDM_ICON,IDM_LIST,LOWORD(wParam),MF_CHECKED);                break;    case WM_NOTIFY:                    NMHDR *pNm = (NMHDR *)lParam;            if(pNm->hwndFrom = hList)                            if(pNm->code = LVN_COLUMNCLICK)                                     NM_LISTVIEW *pLV = (NM_LISTVIEW *)lParam;                    if(pLV->iSubItem = 1)                                            if(SizeSortOrder = 0 | SizeSortOrder = 2)                                                    SendMessage(hList,LVM_SORTITEMS,1,(LPARAM)CompareFunc);                            UpdatelParam();                            SizeSortOrder = 1;                                                else                                                      SendMessage(hList,LVM_SORTITEMS,2,(LPARAM)CompareFunc);                            UpdatelParam();                            SizeSortOrder = 2;                                                                else                                              if(FileNameSortOrder = 0 | FileNameSortOrder = 4)                                                    SendMessage(hList,LVM_SORTITEMS,3,(LPARAM)CompareFunc);                            UpdatelParam();                            FileNameSortOrder = 3;                                                else                                                    SendMessage(hList,LVM_SORTITEMS,4,(LPARAM)CompareFunc);                            UpdatelParam();                            FileNameSortOrder = 4;                                                                            else if(pNm->code = NM_DBLCLK)                    ShowCurrentFocus();                            break;    default:        return DefWindowProc(hWnd,Msg,wParam,lParam);        return 0;int WINAPI WinMain(     HINSTANCE hInstance,                        HINSTANCE hPrevInstance,                        LPSTR lpCmdLine,                        int nCmdShow)    WNDCLASSEX wc;    MSG msg;    HWND hWnd;    InitCommonControls();    g_hInstance = hInstance;    wc.cbSize = sizeof(WNDCLASSEX);    wc.style = NULL;    wc.lpfnWndProc = ProcWinMain;    wc.cbClsExtra = NULL;    wc.cbWndExtra = NULL;    wc.hInstance = hInstance;    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);    wc.lpszMenuName = MAKEINTRESOURCE(IDM_MAINMENU);    wc.lpszClassName = ClassName;    wc.hIcon = wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION);    wc.hCursor = LoadCursor(NULL,IDC_ARROW);    RegisterClassEx(&wc);    hWnd = CreateWindowEx(NULL,ClassName,AppName,WS_OVERLAPPEDWINDOW,        CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);    ShowWindow(hWnd,SW_SHOWNORMAL);    UpdateWindow(hWnd);    while(GetMessage(&msg,NULL,0,0)            TranslateMessage(&msg);        DispatchMessage(&msg);        return msg.wParam;    由于篇幅较长,见下文分析。windows sdk编程系列文章 - 列表视图控件(续)2008-04-29 16:18分析:当主窗口创建后要做的第一件事是创建一个列表视图控件应用程序。   case WM_CREATE:            hList = CreateWindowEx(NULL,ListViewClassName,NULL,LVS_REPORT | WS_CHILD |WS_VISIBLE,           0,0,0,0,hWnd,NULL,g_hInstance,NULL);我们调用CreateWindowEx来创建窗口,并把窗口类的名称“SysListView32”传给它。缺省的显示方式是报告方式,因为您指定了LVS_REPORT标志作为它的风格。    InsertColumn();创建列表视图控件后,我们向其中插入列。void InsertColumn()   LV_COLUMN lvc;   lvc.mask = LVCF_TEXT | LVCF_WIDTH;   lvc.pszText = Heading1;   lvc.cx = 150;   SendMessage(hList,LVM_INSERTCOLUMN,0,(LPARAM)&lvc);我们指定第一列的宽度和列的标题条,为了在该列中显示文件的名称,我们需要在LV_COLUMN 型结构体变量的成员

    注意事项

    本文(windows sdk编程系列文章24 ---- 列表视图控件.doc)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开