65.9K
CodeProject 正在变化。 阅读更多。
Home

驱动器选择列表控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (12投票s)

1999年11月30日

3分钟阅读

viewsIcon

138605

downloadIcon

1524

一个像 Explorer 一样显示驱动器名称和图标的控件。

  • 下载演示项目 - 17 Kb
  • 下载源文件 - 5 Kb
  • Sample Image

    引言

    我最近看到了 Wilfried Roemer 的文章 "驱动器的下拉列表框",很喜欢它的外观。它使用了 shell 函数 SHGetFileInfo 来显示卷标,以及与资源管理器相同的图标。在我看来,像这样的小细节,应用程序呈现的数据与 Windows 本身一样,表明程序员的用心和对操作系统功能的良好理解。因此,受这篇文章的启发,我开发了一个类似的驱动器选择器,但这次使用的是列表视图控件。上面显示了控件可以执行的操作示例。

    我的驱动器选择器具有以下功能:

    • 显示与资源管理器中相同的名称和图标。(请注意,上面的控件显示了我为 C: 和 D: 驱动器设置的自定义图标。)
    • 可配置为显示硬盘驱动器、可移动驱动器、CD、网络驱动器、RAM 驱动器或任何组合。
    • 显示小图标或大图标
    • 使用列表控件的复选框样式,允许选择多个驱动器。

    CDrivePickerListCtrl 是在 Win 98 上的 MSVC 6.0 SP2 中编写的。 我还在 NT 4 上的 Unicode 中对其进行了测试。

    在对话框中使用驱动器选择器

    在对话框中使用该控件时,您按照正常步骤,使用 ClassWizard 将对话框类的成员变量与列表控件关联。然后在您的头文件中,将 CListCtrl 更改为 CDrivePickerListCtrl。 在第一次调用 DoDataExchange() 之后(通常在 CDialog::OnInitDialog() 中完成),您可以通过该成员变量控制驱动器选择器列表。 您调用的初始化函数会自动设置列表视图样式,因此您不必自己在对话框编辑器中设置它们。

    设置列表

    只有一个函数用于初始化列表

    void InitList ( int nIconSize, DWORD dwFlags )

    此函数填充列表控件。 nIconSize 可以是 16 或 32,这将使列表分别显示小图标或大图标。 dwFlags 控制列表中显示的驱动器类型。 这些标志是

    DDS_DLIL_HARDDRIVES : 硬盘驱动器
    DDS_DLIL_CDROMS : CD-ROM 驱动器
    DDS_DLIL_REMOVABLES : 其他可移动驱动器(软盘、Zip 等)
    DDS_DLIL_NETDRIVES : 映射和连接的网络驱动器
    DDS_DLIL_RAMDRIVES : RAM 驱动器
    DDS_DLIL_ALL_REMOVABLE : CD-ROM 和其他可移动驱动器
    DDS_DLIL_ALL_LOCAL_DRIVES : 除了网络驱动器之外的所有驱动器
    DDS_DLIL_ALL_DRIVES : 系统上的所有驱动器。

    您还可以使用 SetSelection() 函数设置选中哪些驱动器

    void SetSelection ( const DWORD dwDrives )
    void SetSelection ( LPCTSTR szDrives )

    第一个版本将 dwDrives 视为标志:位 0 确定驱动器 A: 的选中状态(0 表示未选中,1 表示选中),位 1 确定驱动器 B: 的状态,依此类推。 第二个函数接受驱动器字母列表(例如,“ACDX”)。 列出的驱动器被选中,而所有其他驱动器都未选中。

    检索选定的驱动器

    CDrivePickerListCtrl 提供了三个用于获取所选驱动器的函数。 第一个返回选定的驱动器数。

    BYTE GetNumSelectedDrives() const

    其他函数类似于 SetSelection(); 它们以 DWORD 或字符串形式返回所选的驱动器。

    void GetSelectedDrives ( DWORD* pdwSelectedDrives ) const
    void GetSelectedDrives ( LPTSTR szSelectedDrives ) const

    第一个版本返回打包到 DWORD 中的所选驱动器。 第二个版本返回一个字符串,其中包含所选驱动器的字母(始终为大写)。

    注释

    您可能会注意到,您可以在列表中显示的五种类型的驱动器与 GetDriveType() 的返回值相对应,该值在枚举驱动器时由控件在内部使用。 在我在 Win 98 上进行的测试中,GetDriveType() 返回DRIVE_FIXED对于 RAM 驱动器,而不是预期的DRIVE_RAMDISK。 我不知道这是 API 错误、98 错误还是文档错误; 我无法在 Microsoft 的知识库中找到有关它的提及。 目前,我还没有采取措施来解决这种差异,直到我在其他版本的 Windows 上尝试该代码。

    演示项目

    我上面包含了一个示例项目,说明了如何使用 CDrivePickerListCtrl。 与往常一样,欢迎提出建议和错误报告。

    © . All rights reserved.