Windows编程-磁盘查看器

磁盘查看器
可查看盘符、标题、文件系统、总空间、可用空间、概述内容。
1.新建windows项目,并设置工程属性
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
2.在源文件夹下新建.cpp文件
在这里插入图片描述
3.在资源文件夹下添加资源 Dialog
在这里插入图片描述

在这里插入图片描述
4.添加List Control工具,并将属性->试图设置为Report
在这里插入图片描述
在这里插入图片描述
5.代码部分

#include<windows.h>
#include<tchar.h>
#include<stdio.h>
#include<CommCtrl.h>
#include<windowsx.h>
#include"resource.h"

//创建模态对话框
INT_PTR CALLBACK DlgBoxProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, TCHAR* szCmdLine, int nCmdShow)
{
	//创建模态对话框
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgBoxProc);
	return 0;
}

INT_PTR CALLBACK DlgBoxProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
	case WM_INITDIALOG://对话框的初始化消息,是WM_INITDIALOG,而不是WM_CREATE
	{
		HWND hList = GetDlgItem(hWnd, IDC_LIST1);
		TCHAR buf[6][20] =
		{
			_T("盘符"),
			_T("标题"),
			_T("文件系统"),
			_T("总空间"),
			_T("可用空间"),
			_T("描述"),
		};
		LVCOLUMN lv = {};
		lv.mask = LVCF_WIDTH | LVCF_TEXT;
		lv.cx = 120;//宽度
		//添加列表
		lv.pszText = buf[0];//列名
		lv.cchTextMax = 3;
		ListView_InsertColumn(
			hList,//句柄
			0,
			&lv
		);
		lv.pszText = buf[1];//列名
		ListView_InsertColumn(
			hList,//句柄
			1,
			&lv
		);
		lv.pszText = buf[2];//列名
		ListView_InsertColumn(
			hList,//句柄
			2,
			&lv
		);
		lv.pszText = buf[3];//列名
		ListView_InsertColumn(
			hList,//句柄
			3,
			&lv
		);
		lv.pszText = buf[4];//列名
		ListView_InsertColumn(
			hList,//句柄
			4,
			&lv
		);

		lv.pszText = buf[5];//列名
		ListView_InsertColumn(
			hList,//句柄
			5,
			&lv
		);

		ListView_SetExtendedListViewStyle(hList, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
		TCHAR szName[0x300] = { 0 };
		GetLogicalDriveStrings(0x300, szName);

		TCHAR* pName = szName;
		int i = 0;
		while (_tcsclen(pName) != 0)
		{
			LVITEM li = {};
			li.mask = LVIF_TEXT;
			//第i行
			li.pszText = (TCHAR*)TEXT("");
			li.iItem = i;
			//对每行进行数据写入之前得先插入这一行
			ListView_InsertItem(hList, &li);
			//打印盘符
			//对行进行数据写入,i(从0开始)代表第几行,0代表第几列
			ListView_SetItemText(hList, i, 0, pName);

			TCHAR szTitle[20] = { 0 };
			TCHAR szFileSystem[10] = { 0 };
			//获取标题和文件系统
			GetVolumeInformation(pName, szTitle, 20, NULL, NULL, NULL,szFileSystem, 10);
			//打印标题
			ListView_SetItemText(hList, i, 1, szTitle);
			//打印文件系统
			ListView_SetItemText(hList, i, 2, szFileSystem);

			//获取磁盘的空间信息
			DWORD 每簇的扇区数量 = 0;
			DWORD 扇区容量 = 0;
			DWORD 空闲簇 = 0;
			DWORD 全部簇 = 0;
			GetDiskFreeSpace(pName,&每簇的扇区数量, &扇区容量, &空闲簇, &全部簇);
			double 总容量 = (全部簇 / 1024.0) * 每簇的扇区数量 * 扇区容量 / 1024 / 1024;
			double 空闲容量 = (空闲簇 / 1024.0) * 每簇的扇区数量 * 扇区容量 / 1024 / 1024;
			TCHAR szBuf[100] = { 0 };
			_stprintf_s(szBuf, 100, _T("%lf"), 总容量);
			ListView_SetItemText(hList, i, 3, szBuf);
			_stprintf_s(szBuf, 100, _T("%lf"), 空闲容量);
			ListView_SetItemText(hList, i, 4, szBuf);

			ListView_SetItemText(hList, i, 5, pName);
			//打印磁盘类型
			DWORD dwType = GetDriveType(pName);
			switch (dwType)
			{
			case DRIVE_UNKNOWN://未知类型
			case DRIVE_NO_ROOT_DIR://路径错误
			case DRIVE_REMOVABLE://可移动的磁盘
				ListView_SetItemText(hList, i, 5, (LPWSTR)L"可移动介质类驱动器");
				break;
			case DRIVE_FIXED://硬盘
				ListView_SetItemText(hList, i, 5, (LPWSTR)L"不可移除的驱动器");
				break;
			case DRIVE_REMOTE://远程硬盘
			case DRIVE_CDROM://光驱
			case DRIVE_RAMDISK://内存硬盘
			default:
				break;
			}

			pName += _tcsclen(pName) + 1;
			i++;
		}
	}
		break;
	case WM_CLOSE:
		EndDialog(hWnd, 0);
		break;
	default:
		break;
	}
	return 0;
}

6.效果图
在这里插入图片描述
:可自定义菜单栏,资源文件中添加Menu,并在Dialog中添加即可
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值