您的位置:首页 > 编程语言

可视化编程小作业之小小改进

2008-11-07 14:51 337 查看
上次那个只获取了驱动器名称而没有获取相关信息,这次针对这些做了小小调整。最终效果见下图:





先修改OnInitDialog函数,往列表视图添加3列:

//初始化列表视图

m_listMain.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE|LVS_EX_INFOTIP);

m_listMain.InsertColumn(0,"名称",LVCFMT_LEFT,80);

m_listMain.InsertColumn(1,"卷标",LVCFMT_LEFT,80);

m_listMain.InsertColumn(2,"文件系统",LVCFMT_LEFT,80);

m_listMain.InsertColumn(3,"总大小",LVCFMT_LEFT,80);

然后就是修改GetPen函数,获取相关信息:

CString str;

char Drivers[120];//用于保存所有驱动器名称

char* pDriver=NULL;//定义指针去读取单个驱动器名称

GetLogicalDriveStrings(120,Drivers);//获取所有驱动器名称

HICON bhIcon;//大图标

HICON shIcon;//小图标

//ExtractIconEx函数从指定DLL中提取图标

//第一个参数为要操作的DLL

//第二个参数为要获取图标的序号

//第三个参数为该图标要保存到那个图标上(大图标)

//第四个参数为该图标要保存到那个图标上(小图标)

// 8 硬盘驱动器图标

ExtractIconEx("SHELL32.DLL",8,&bhIcon,&shIcon,1);

image.Add(shIcon); //添加小图标到图像列表

bimage.Add(bhIcon); //添加大图标到图像列表

// 7 可移动的驱动器图标

ExtractIconEx("SHELL32.DLL",7,&bhIcon,&shIcon,1);

image.Add(shIcon);

bimage.Add(bhIcon);

// 9 网络驱动器图标

ExtractIconEx("SHELL32.DLL",11,&bhIcon,&shIcon,1);

image.Add(shIcon);

bimage.Add(bhIcon);

// 11 CD-ROM驱动器图标

ExtractIconEx("SHELL32.DLL",9,&bhIcon,&shIcon,1);

image.Add(shIcon);

bimage.Add(bhIcon);

pDriver=Drivers;//指向驱动器名称头

DWORD Type=0;//驱动器类型

int i=0;//列表视图序号

int index=0;//图像列表序号 0为硬盘驱动器

while (strcmp(pDriver,""))

{

Type=GetDriveType(pDriver);//获取驱动器类别

switch (Type)

{

case DRIVE_FIXED:

index=0;

break;

case DRIVE_REMOVABLE://移动驱动器

index=1;

break;

case DRIVE_CDROM://光盘

index=2;

break;

case DRIVE_REMOTE://网络驱动器

index=3;

break;

}

char volumeName[255];//卷标名

char volumeType[255];//文件系统格式

memset(volumeName,0,255);//每次都初始化一下清空上次保存的记录

memset(volumeType,0,255);//每次都初始化一下清空上次保存的记录

//获取驱动器信息

//第1个参数表示要获取的盘符

//第2个参数表示接收卷名的缓存

//第3个参数指定缓存大小

//第7个参数表示文件系统格式缓存

//第8个参数文件系统名称

GetVolumeInformation(pDriver,volumeName,255,NULL,NULL,NULL,volumeType,255);

str.Format(pDriver);//把char转换为CString

str.Remove('//');//移除中的后面的斜杠

m_listMain.InsertItem(i,str,index);//插入到列表视图 index为图标序号

str.Format(volumeName);

m_listMain.SetItemText(i,1,str);//插入驱动器卷标

str.Format(volumeType);

m_listMain.SetItemText(i,2,str);//插入驱动器格式

unsigned long total;

unsigned long size1;

unsigned long size2;

//该函数是获取指定磁盘的信息(包括剩余空间的信息)

//lpRootPathName,磁盘的根目录

//lpSectorsPerCluster, 每个簇的扇区数目

//lpBytesPerSector 指定每个扇区的字节数目

//lpNumberOfFreeClusters, 磁盘总的空闲簇数目

//lpTotalNumberOfClusters 磁盘总的簇数目

GetDiskFreeSpace(pDriver,&size1,&size2,NULL,&total);

double d=0.0;

d=(double)total*size1*size2/1024/1024/1024;//转换以G为单位

str.Format("%.1fG",d);

m_listMain.SetItemText(i,3,str);//插入驱动器大小

pDriver+=strlen(pDriver)+1; //下一个驱动器

i++;//下一项

}

好了,就写到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: