精华内容
下载资源
问答
  • 浏览器咬 一个文件资源管理器项目,它添加了默认Windows资源管理器中未包含其他功能
  • The Ribbon interface became a feature in the Microsoft Office suite as of version ... The Windows 8 Developer Preview introduced the Ribbon interface into Windows Explorer and it’s been improved in ...
    00_windows_8_explorer

    The Ribbon interface became a feature in the Microsoft Office suite as of version 2007. The Windows 8 Developer Preview introduced the Ribbon interface into Windows Explorer and it’s been improved in the Windows 8 Consumer Preview.

    功能区界面从2007版开始成​​为Microsoft Office套件的功能。Windows 8开发人员预览版将功能区界面引入Windows资源管理器,并且在Windows 8消费者预览版中进行了改进。

    By default, the Explorer ribbon is now hidden. Use the down arrow button next to the help button in the upper, right corner of the Explorer window to expand the ribbon.

    默认情况下,资源管理器功能区现在处于隐藏状态。 使用资源管理器窗口右上角帮助按钮旁边的向下箭头按钮来展开功能区。

    01_button_to_expand_ribbon

    There are three core tabs (Home, Share, and View) and the File menu. The Home tab contains common commands, such as Copy, Paste, New folder, Delete, and Rename.

    有三个核心选项卡(“主页”,“共享”和“视图”)和“文件”菜单。 “主页”选项卡包含常用命令,例如“复制”,“粘贴”,“新建文件夹”,“删除”和“重命名”。

    02_ribbon_interface_in_explorer

    The Share tab makes it easy to zip, email, print, and fax files, and share folders.

    使用“共享”选项卡可以轻松压缩,电子邮件,打印和传真文件以及共享文件夹。

    02a_share_tab

    Contextual tabs displays as you select specific files and folders. For example, if you select an image file, such as a .png file or a .jpg file, the Picture Tools context tab displays providing options only applicable to those types of files. Contextual tabs are color coded so they stand out.

    选择特定文件和文件夹时,将显示上下文选项卡。 例如,如果您选择一个图像文件,例如.png文件或.jpg文件,则“图片工具”上下文选项卡将显示仅提供适用于这些类型文件的选项。 上下文选项卡使用颜色编码,因此脱颖而出。

    03_contextual_tab

    Some of the core tabs may change when you select certain items. When you select Computer in the Navigation pane, the Home tab becomes the Computer tab and the Share tab is not available. The Computer tab provides easy access to the Control Panel and allows you to uninstall or change programs.

    选择某些项目时,某些核心选项卡可能会更改。 在“导航”窗格中选择“计算机”时,“主页”选项卡变为“计算机”选项卡,“共享”选项卡不可用。 通过“计算机”选项卡可以轻松访问“控制面板”,并允许您卸载或更改程序。

    04_computer_tab

    The Disk Tools contextual tab also becomes available, providing tools for working with hard drives and removable storage, such as Bitlocker, Optimize, Cleanup, and Format.

    “磁盘工具”上下文选项卡也将变为可用,提供用于处理硬盘驱动器和可移动存储的工具,例如Bitlocker,Optimize,Cleanup和Format。

    05_disk_tools_tab

    Windows 8 also has a built-in tool to mount disc images, such as .iso files and .vhd files, and a tool to burn an image to a disc. Selecting the appropriate type of file activates the Disc Image Tools contextual tab.

    Windows 8还具有一个内置工具来挂载光盘映像(例如.iso文件和.vhd文件),以及一个将映像刻录到光盘上的工具。 选择适当的文件类型将激活“光盘映像工具”上下文选项卡。

    05a_mount_disc_image

    Just as there is in Microsoft Office 2007 and 2010 programs, there are popup descriptions that display when you move your mouse over an option on the ribbon. If there is a keyboard shortcut for that option, if displays on the popup.

    就像Microsoft Office 2007和2010程序一样,当您将鼠标移到功能区上的某个选项上时,也会显示弹出说明。 如果该选项有键盘快捷键,则在弹出窗口中显示。

    06_tool_tips

    If you are more comfortable using the keyboard, the ribbon can be navigated using the keyboard. Press Alt to show keyboard shortcuts for accessing the tabs and the Quick Access Toolbar buttons. Then, press a key for a tab, such as “H” for the Home tab.

    如果您更喜欢使用键盘,则可以使用键盘浏览功能区。 按Alt键显示用于访问选项卡的键盘快捷键和“快速访问工具栏”按钮。 然后,按一个选项卡的键,例如“主页”选项卡的“ H”。

    06a_hotkeys_for_tabs

    Once you’ve pressed the key for a tab, hotkey hints display for the options on that tab. Press the hotkey for the desired option.

    按下选项卡的键后,将显示该选项卡上选项的热键提示。 按下所需选项的热键。

    07_ribbon_hotkeys

    The File menu allows you to open a new Explorer window and access the most recently accessed folders and drives in the jump list, called Frequent places, on the right. The jump list was called Favorite Places in the Developer Preview.

    通过“文件”菜单,您可以打开一个新的“资源管理器”窗口,并在右侧的“跳转位置”跳转列表中访问最近访问的文件夹和驱动器。 跳转列表在“开发人员预览”中称为“收藏夹”。

    08_file_menu

    The File menu in Windows Explorer now provides easy access to both the command prompt and the Windows PowerShell. You can open both as a normal user or as an administrator. A window opens to the folder currently open in Explorer.

    Windows资源管理器中的“文件”菜单现在可以轻松访问命令提示符和Windows PowerShell。 您可以以普通用户或管理员身份打开。 将打开一个窗口,打开资源管理器中当前打开的文件夹。

    09_selecting_submenu_on_file_menu

    The Open command window here option is still available by pressing Shift while right-clicking on a folder in Explorer. This also opens a command prompt window to the folder currently open in the Explorer window.

    在资源管理器中的文件夹上单击鼠标右键时,按Shift仍可使用“在此处打开命令窗口”选项。 这还会打开一个命令提示符窗口,指向资源管理器窗口中当前打开的文件夹。

    10_open_command_window_here

    The View menu allows you to customize the panes, show and hide File name extensions and hidden items, and also easily Change folder and search options using the Options button.

    使用“查看”菜单可以自定义窗格,显示和隐藏文件扩展名和隐藏项目,还可以使用“选项”按钮轻松更改文件夹和搜索选项。

    11_selecting_change_folder_and_search_options

    Selecting the Change folder and search options item from the Options drop-down menu opens the classic Folder Options dialog box, containing the standard options from previous versions of Windows.

    从“选项”下拉菜单中选择“更改文件夹和搜索选项”项,将打开经典的“文件夹选项”对话框,其中包含Windows早期版本中的标准选项。

    12_folder_options_dialog

    You can easily change the layout of the files and folders. The Layout section of the View tab allows you to choose to view the list of files and folders as different sized icons, as a list, as tiles, or in a detailed list.

    您可以轻松更改文件和文件夹的布局。 “视图”选项卡的“布局”部分允许您选择以不同大小的图标,列表,图块或详细列表的形式查看文件和文件夹的列表。

    13_layout_options_on_view_tab

    The lower, right corner of the Explorer window provides two buttons that allow you to quickly switch between the Large icons view and the Details view.

    Explorer窗口的右下角提供了两个按钮,可让您在大图标视图和详细信息视图之间快速切换。

    14_changing_the_view_quickly

    The Panes section of the View tab allows you to easily customize the Navigation pane and to show or hide the Preview and the Details pane.

    使用“视图”选项卡的“窗格”部分可以轻松自定义“导航”窗格,并显示或隐藏“预览”和“详细信息”窗格。

    15_customizing_navigation_pane

    The same Quick Access Toolbar from Microsoft Office has been added to Windows Explorer. You can add any of the options from the ribbon to the Quick Access Toolbar simply by right-clicking on the option and selecting Add to Quick Access Toolbar. By default, the Quick Access Toolbar displays above the ribbon. However, you can choose to move it below the ribbon using the same right-click menu.

    来自Microsoft Office的相同快速访问工具栏已添加到Windows资源管理器。 您可以通过右键单击选项并选择添加到快速访问工具栏,将功能区中的任何选项添加到快速访问工具栏。 默认情况下,快速访问工具栏显示在功能区上方。 但是,您可以选择使用同一右键单击菜单将其移动到功能区下方。

    16_adding_option_to_quick_access_toolbar

    By default, the Properties and New Folder buttons are available on the Quick Access Toolbar. We added a few buttons to the Quick Access Toolbar, as shown in the following image.

    默认情况下,“属性”和“新建文件夹”按钮在快速访问工具栏上可用。 我们在快速访问工具栏中添加了一些按钮,如下图所示。

    17_expanded_quick_access_toolbar

    A lot of people mourned the loss of the “Up” button in Windows 7 Explorer. It’s been brought back in Windows 8 and is available directly to the left of the address bar.

    很多人对Windows 7资源管理器中“向上”按钮的丢失感到遗憾。 它已在Windows 8中带回,可直接在地址栏的左侧使用。

    18_up_button_in_explorer

    The ribbon interface may take some time to get used to, but it exposes close to 200 file management commands some of which used to be buried in menus, dialog boxes, or right-click menus. Windows 8 Explorer makes file management easier and more convenient.

    功能区界面可能需要一些时间才能习惯,但它公开了将近200个文件管理命令,其中一些命令以前被埋在菜单,对话框或右键单击菜单中。 Windows 8资源管理器使文件管理更容易,更方便。

    翻译自: https://www.howtogeek.com/108483/using-the-new-windows-explorer-ribbon-in-windows-8/

    展开全文
  • 喜欢IE浏览器那种标签模式么?至少你鼠标移动起来方便多了。众所周知,Windows的资源管理和IE核心是类似,但是就算到了...它可以给你资源管理器增加一行标签,不仅如此它还包含了Windows7没有,常用操作...

    喜欢IE浏览器那种标签模式么?至少你的鼠标移动起来方便多了。众所周知,Windows的资源管理和IE的核心是类似的,但是就算到了Windows7,我们的资源管理仍然没有标签。不过通过第三方软件,我们可以手动给它装上Tab标签!先看下效果如何:

    Windows7

      为了实现标签功能,我们需要下载并使用QTTabBar程序。它可以给你资源管理器增加一行标签,不仅如此它还包含了Windows7中没有的,常用操作的图标功能,支持恢复最近关闭的窗口等,建议大家在安装之后详细阅读使用说明。

      第一次使用时,我们需要在打开资源管理器的菜单栏,按下alt键就能看到了,然后右击菜单栏,选择其中的QTTabBar即可。QTTabBar虽然功能强大,但为免费软件,不需要支付任何费用哦。

      除了安装QTTabBar这样的插件之外,我们也可以选择单独的程序来代替默认的资源管理器,这些程序的功能远不止标签,可谓是相当的丰富,Xplorer2 Lite是非常简单易用多窗口多标签的资源管理器代替程序。UltraExplorer, Total Commander & CubicExplorer 等功能繁多,请根据自己的使用需求来选择安装,Total Commander程序的完整版有90M大,包含了视频播放等功能。

    转载于:https://www.cnblogs.com/ghostxp/archive/2013/06/08/3127044.html

    展开全文
  • ,使您可以在Windows资源管理器的“预览面板”查看电子发票的预览。 ,可让您在Windows资源管理器以图标的形式查看FE的预览 FE,使您可以查看不同格式并进行打印 功能性 可以自由定义图标设计的“模板” 能够...
  • 可定制化程度较高,既可以实现对特定路径的监控,也可以实现对具体磁盘驱动器的监控,甚至是全盘监控。监控过程的日志均高亮显示在监控窗口,也支持将日志保存到特定路径; 11. 将重命名功能加以改进,实现了...
  • 资源管理器的功能有:1、命名多个文件;2、保持文件夹名称的大小写;3、为文件增加注释;4、使资源管理器成为你双击文件夹时的缺省操作;5、定制【发送到】命令。实用功能:命名多个文件重命名文件是Windows XP的一...

    资源管理器的功能有:1、命名多个文件;2、保持文件夹名称的大小写;3、为文件增加注释;4、使资源管理器成为你双击文件夹时的缺省操作;5、定制【发送到】命令。

    a767fdfe6f4d31d2247f87b79d655490.png

    实用功能:

    命名多个文件

    重命名文件是Windows XP的一个全新的灵巧功能。很多人曾经希望系统可以将大量文件重命名为一组文件,Windows XP可以让你一次重命名多个文件了,其用法相当简单:在“资源管理器”中选择几个文件,按住F2键,然后重命名这些文件中的一个。所有被选择的文件将会被重命名为新的文件名(在末尾处加上递增的数字)。面对手头上收藏的一大堆图片或者文本,想必再也不会头痛了。

    保持文件夹名称的大小写

    有时,你会发现当你创建一个以大写字母为名称的文件夹后,比如:C:\ALLINCAPS,但Windows会自作主张地将它显示为小写:C:\Allincaps,通过修改注册表,你可以将这个功能去掉。打开“注册表编辑器”,找到[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced],在右侧窗格中创建或修改名为DontPrettyPath的DWORD值,将其值设置为1即可。

    为文件增加注释(适用于NTFS下)

    在你的电脑中会有一大堆文件,通常都不容易记得有关它们的详细信息。你可以利用“资源管理器”提供的功能为这些文件加上各种注释,以便将来可以更容易地进行识别。打开一个想要持续跟踪的包含不同文件的文件夹;在“查看”菜单中确定将当前视图选择为“详细资料”方式;高亮并右击想要加入更多信息的文件,在弹出菜单中选“属性”,接着点击“摘要”选项卡(确保它选择的是简单项而不是高级项),你可以看到许多注释框,包括有标题、主题、作者、类别、关键字、说明等。

    切换到高级模式还有一些其它信息框可供选择。接下来你就可以在所有需要的项目中加上注释。完成后,点击文件之上、地址栏下面的工具栏,将会打开一个下拉菜单,在这里你可以选择想要显示的信息内容。你将可以看到一列新的项目以及你为之注释的任何内容。如果你想对这些文件进行排序,只需要在空白处右击鼠标,然后就可以选择你喜欢的项目信息进行排序。就像原来系统提供的名称、大小、类型、修改时间等项目所做的那样。

    使“资源管理器”成为你双击文件夹时的缺省操作

    有些情况下,借助Windows“资源管理器”浏览文件夹要比直接打开每个文件夹查看其中内容更加方便。你可以右击文件夹并选择“资源管理器”,然而,如果你有使用鼠标双击操作的习惯,那么或许能以更加快捷的方式打开文件夹。 单击“开始”→“我的电脑”,接着选择“工具”→“文件夹选项”→“文件类型”,在文件类型列表中,选择“文件夹”并单击“高级”按钮。在对话框中点击“新建”按钮,然后在弹出的对话框“操作”项下的文本框中输入:open,然后利用“浏览”按钮在系统目录中找到并选中explorer.exe,这样在“用于执行操作的应用程序”下的文本框中就会显示相应路径。

    点击“确定”按钮后,回到上一次窗口。选中刚创建的Open项,然后再点击“设为默认值”按钮。当你在任意文件夹上进行双击时,将自动打开“资源管理器”。

    删除Thumbs.db文件

    当在“资源管理器”中使用了缩略图查看后,Windows会自动在相应文件夹生成一个名为thumbs.db的文件,它用来缓存该文件夹中的图片,使下次浏览时速度更快,不过这样会占用一些磁盘空间,因此你可以单击“工具”→“文件夹选项”→“查看”,勾选“不要缓存缩略图”。接着再利用搜索功能把所有Thumbs.db文件找出来并删除。

    轻松定制“发送到”命令

    在“资源管理器”的右键菜单中有一个“发送到”命令,如果想对它的下级菜单中的命令进行修改,那么请打开“资源管理器”的“工具”→“文件夹选项”→“查看”,选中“显示所有文件和文件夹”项,然后打开C:\Documents and Settings\username\SendTo\(其中username指的是你实际的帐号名),在这里可以删除不需要的快捷方式,或直接用右键将应用程序执行文件或是文件夹拖放到这里,并选择“在当前位置创建快捷方式”。

    资源管理器的功能 资源管理器窗口上部有一个下拉式菜单,其中包括了“文件”、“编辑”“查看”等几个子菜单,各子菜单中所包含的选项种类和多少是可变的。刚打开“资源管理器”时选项较少,但当选定了一个文件夹或文件之后,其中的选项就增加了许多,以便能对所选定的对象进行各种操作。

    (1)文件菜单

    这个菜单包括“打开”、“新建”、“发送”、“打印”、“删除”、“重命名”、“文件属性”、“关闭”等各种选项,每个选项的功能看其名字即可得知。应该了解,在Windows98中进行任何目录和文件操作都要遵循“先选后用”的原则。

    (2)编辑菜单

    编辑菜单执行文件的复制、移动等操作。第三个菜单是查看菜单,用于改变文件的各种显示方式。第四个菜单是用于在网络上查找的。 资源管理器的帮助菜单是Windows98中的标准形式的帮助信息,可以利用它来学习使用方法。

    展开全文
  • windows资源管理器的实现实例

    千次阅读 2016-10-25 11:13:25
    Windows的资源管理器想必大家都用过,该程序的窗口一分为二,左边的窗口显示本机当前...为了说明这个问题,本实例打造了一个简易的资源管理器,它实现了Windows资源管理器的主要功能,在显示文件的属性(如文件的文件名

    Windows的资源管理器想必大家都用过,该程序的窗口一分为二,左边的窗口显示本机当前所有驱动器以及驱动器中的所有文件夹,当用户单击文件夹后,如果该文件夹下面还有子文件夹,则上层文件夹展开显示下级的文件夹;否则,右边的窗口显示选择文件夹下的文件。那么这个程序是如何实现的呢?为了说明这个问题,本实例打造了一个简易的资源管理器,它实现了Windows资源管理器的主要功能,在显示文件的属性(如文件的文件名、文件的大小、文件的创建时间)的同时,还可以改变文件显示的方式,如大小图标方式、列表方式等。

      一、 实现方法

      在程序中使用了拆分窗口,在拆分的过程中,左边窗口为CTreeView 类的子类CLeftView,右边的窗口为CListView类的子类CdriveExplorerView。窗口的拆分和CTreeView、CListView类不是本实例讲述的重点,相关的知识在本书的实例中都有介绍,读者朋友可以参阅上述内容及实例的原代码,这里主要介绍程序中一些具体的细节知识。

      资源管理器中一个重要的问题是如何得到本机中的驱动器信息,微软提供的有关驱动器的API函数有GetLogicalDrives(),GetDriveType()。

      对于喜欢操作位和字节的汇编语言使用者来说,GetLogicalDrives()是个很好用的API函数。它以位掩码的形式返回逻辑驱动器。即在一个DWORD类型的返回值中,位0(最小的一位)表示驱动器A,位1表示驱动器B,以此类推。每一个位的状态如果是on,则表示对应的逻辑驱动器存在;否则状态为off,表示对应的逻辑驱动器不存在。大家知道DWORD是一个32位的值,足以包括所有的英文字母,也就是说最多可有26个盘符。

      为了确定某个逻辑驱动器的类型,必须调用GetDriveType()函数。它以路径名作为参数(如C:\),返回DRIVE_FIXED,DRIVE_REMOVABLE,或DRIVE_UNKNOWN。下面列出了所有可能返回的值:这些值在winbase.h定义:

    #define DRIVE_UNKNOWN 0 // 无效路径名 
    #define DRIVE_NO_ROOT_DIR 1 // 无效路经,如无法找到的卷标 
    #define DRIVE_REMOVABLE 2 // 可移动驱动器(如磁盘驱动器,光驱等) 
    #define DRIVE_FIXED 3 // 固定的驱动器 (如 通常的硬盘) 
    #define DRIVE_REMOTE 4 // 网络驱动器 
    #define DRIVE_CDROM 5 // CD-ROM 
    #define DRIVE_RAMDISK 6 // 随机存取(RAM) 磁盘

      有了驱动器的信息,就可以使用FindFirstFile()、FindNextFile()等函数来获取驱动器下面的文件或文件夹信息(这部分),然后分别添加到树型视图和列表视图中。

      最后要说明的一点是需要根据不同的状态和文件类型在视图中显示不同的图表,这些可以通过设置列表视图的窗口风格、树状视图的项目条的图标来实现,具体参见代码部分。

      二、编程步骤

      1、 启动VS,生成一个单文档视图的应用程序,视图类的基类选择CListView,项目命名为”DriveExplorer”,同时在项目中添加图标资源、菜单和菜单响应函数(详细内容参见原代码);

      2、 使用Class Wizard为项目添加新类CLeftView类,其基类选择CtreeView;

      3、 添加代码,编译运行程序。

      三、程序代码

    //////////////////////// LeftView.h : interface of the CLeftView class
    #if !defined(AFX_LEFTVIEW_H__29F66875_4E46_11D6_9693_B383368EF622__INCLUDED_)
    #define AFX_LEFTVIEW_H__29F66875_4E46_11D6_9693_B383368EF622__INCLUDED_
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000 
    class CDriveExplorerDoc;
    
    class CLeftView : public CTreeView
    {
     protected: // create from serialization only
      CLeftView();
      DECLARE_DYNCREATE(CLeftView)
      // Attributes
     public:
      CDriveExplorerDoc* GetDocument();
      CImageList* m_pImageList;
      CString m_LocalPath;
      // Operations
     public:
      BOOL HasSubdirectory(CString &strPathName);
      BOOL IsDriveNode(HTREEITEM hItem);
      void SetButtonState(HTREEITEM hItem, CString &strPathName);
      UINT AddDirectoryNodes(HTREEITEM hItem, CString &strPathName);
      BOOL IsMediaValid(CString &strPathName);
      HTREEITEM GetDriveNode(HTREEITEM hItem);
      UINT DeleteChildren(HTREEITEM hItem);
      BOOL IsPathValid(CString &strPathName);
      CString GetPathFromItem(HTREEITEM hItem);
      void AddDummyNode(HTREEITEM hItem);
      void InitTreeView(HTREEITEM hParent);
      BOOL AddDrives(CString strDrive, HTREEITEM hParent);
      // Overrides
      // ClassWizard generated virtual function overrides
      //{{AFX_VIRTUAL(CLeftView)
     public:
      virtual void OnDraw(CDC* pDC); // overridden to draw this view
      virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
     protected:
      virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
      virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
      virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
      virtual void OnInitialUpdate(); // called first time after construct
     //}}AFX_VIRTUAL
     // Implementation
    public:
     virtual ~CLeftView();
     #ifdef _DEBUG
      virtual void AssertValid() const;
      virtual void Dump(CDumpContext& dc) const;
     #endif
    protected:
     // Generated message map functions
    protected:
     //{{AFX_MSG(CLeftView)
     // NOTE - the ClassWizard will add and remove member functions here.
     // DO NOT EDIT what you see in these blocks of generated code !
     afx_msg void OnDestroy();
     afx_msg void OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult);
     afx_msg void OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult);
     //}}AFX_MSG
     DECLARE_MESSAGE_MAP()
    };
    #ifndef _DEBUG // debug version in LeftView.cpp
    inline CDriveExplorerDoc* CLeftView::GetDocument()
    { return (CDriveExplorerDoc*)m_pDocument; }
    #endif
    #endif
    
    ////////////////////////////////////////////////////////// CLeftView
    #include "stdafx.h"
    #include "DriveExplorer.h"
    #include "DriveExplorerDoc.h"
    #include "LeftView.h"
    #include "DriveExplorerView.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    #define ILI_CDDRV 0
    #define ILI_CLSDFLD 1
    #define ILI_DRIVE 2 
    #define ILI_FLOPPYDRV 3 
    #define ILI_MYCOMP 4
    #define ILI_OPENFLD 5 
    #define ILI_TEXTFILE 6 
    #define MYCOMPUTER "My Computer"
    IMPLEMENT_DYNCREATE(CLeftView, CTreeView)
    BEGIN_MESSAGE_MAP(CLeftView, CTreeView)
    //{{AFX_MSG_MAP(CLeftView)
    // NOTE - the ClassWizard will add and remove mapping macros here.
    // DO NOT EDIT what you see in these blocks of generated code!
    ON_WM_DESTROY()
    ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemexpanding)
    ON_NOTIFY_REFLECT(TVN_SELCHANGING, OnSelchanging)
    //}}AFX_MSG_MAP
    // Standard printing commands
    ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint)
    ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview)
    END_MESSAGE_MAP()
    
    ///////////////////////////////////// CLeftView construction/destruction
    CLeftView::CLeftView()
    {
     // TODO: add construction code here
    }
    
    CLeftView::~CLeftView()
    {
    }
    
    BOOL CLeftView::PreCreateWindow(CREATESTRUCT& cs)
    {
     // TODO: Modify the Window class or styles here by modifying the CREATESTRUCT cs
     cs.style |= TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES;
     return CTreeView::PreCreateWindow(cs);
    }
    void CLeftView::OnDraw(CDC* pDC)
    {
     CDriveExplorerDoc* pDoc = GetDocument();
     ASSERT_VALID(pDoc);
     // TODO: add draw code for native data here
    }
    
    BOOL CLeftView::OnPreparePrinting(CPrintInfo* pInfo)
    {
     // default preparation
     return DoPreparePrinting(pInfo);
    }
    
    void CLeftView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
     // TODO: add extra initialization before printing
    }
    
    void CLeftView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
    {
     // TODO: add cleanup after printing
    }
    
    void CLeftView::OnInitialUpdate()
    {
     CTreeView::OnInitialUpdate();
     m_pImageList = new CImageList();
     CWinApp* pApp = AfxGetApp();
     // ASSERT(m_pImageList != NULL); // serious allocation failure checking
     m_pImageList->Create(16, 16, ILC_COLOR8 | ILC_MASK, 9, 9);
     m_pImageList->Add(pApp->LoadIcon(ICO_CDDRV));
     m_pImageList->Add(pApp->LoadIcon(ICO_CLSDFLD));
     m_pImageList->Add(pApp->LoadIcon(ICO_DRIVE));
     m_pImageList->Add(pApp->LoadIcon(ICO_FLOPPYDRV));
     m_pImageList->Add(pApp->LoadIcon(ICO_MYCOMP));
     m_pImageList->Add(pApp->LoadIcon(ICO_OPENFLD));
     m_pImageList->Add(pApp->LoadIcon(ICO_TEXTFILE));
     GetTreeCtrl().SetImageList(m_pImageList , TVSIL_NORMAL);
     HTREEITEM hParent = GetTreeCtrl().InsertItem(MYCOMPUTER,ILI_MYCOMP, ILI_MYCOMP);
     InitTreeView(hParent);
     GetTreeCtrl().Expand(hParent, TVE_EXPAND); 
    }
    
    #ifdef _DEBUG
    void CLeftView::AssertValid() const
    {
     CTreeView::AssertValid();
    }
    
    void CLeftView::Dump(CDumpContext& dc) const
    {
     CTreeView::Dump(dc);
    }
    
    CDriveExplorerDoc* CLeftView::GetDocument() // non-debug version is inline
    {
     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDriveExplorerDoc)));
     return (CDriveExplorerDoc*)m_pDocument;
    }
    #endif //_DEBUG
    
    void CLeftView::InitTreeView(HTREEITEM hParent)
    {
     int nPos = 0;
     UINT nCount = 0;
     CString strDrive = "?:\\";
     DWORD dwDriveList = ::GetLogicalDrives ();
     CString cTmp;
     while (dwDriveList) {
      if (dwDriveList & 1) {
       cTmp = strDrive;
       strDrive.SetAt (0, 0x41 + nPos);
       if (AddDrives(strDrive , hParent))
        nCount++;
      }
      dwDriveList >>= 1;
      nPos++;
     }
     return;
    }
    
    BOOL CLeftView::AddDrives(CString strDrive, HTREEITEM hParent)
    {
     HTREEITEM hItem;
     UINT nType = ::GetDriveType ((LPCTSTR) strDrive);
     UINT nDrive = (UINT) strDrive[0] - 0x41;
     switch (nType) {
      case DRIVE_REMOVABLE:
       hItem = GetTreeCtrl().InsertItem(strDrive, ILI_FLOPPYDRV, ILI_FLOPPYDRV, hParent);
       AddDummyNode(hItem);
       break;
      case DRIVE_FIXED:
       hItem = GetTreeCtrl().InsertItem(strDrive, ILI_DRIVE, ILI_DRIVE, hParent);
       AddDummyNode(hItem);
       break;
      case DRIVE_REMOTE:
       hItem = GetTreeCtrl().InsertItem(strDrive, ILI_DRIVE, ILI_DRIVE, hParent);
       AddDummyNode(hItem);
       break;
      case DRIVE_CDROM:
       hItem = GetTreeCtrl().InsertItem(strDrive, ILI_CDDRV, ILI_CDDRV, hParent);
       AddDummyNode(hItem);
       break;
      case DRIVE_RAMDISK:
       hItem = GetTreeCtrl().InsertItem(strDrive, ILI_CDDRV, ILI_CDDRV, hParent);
       AddDummyNode(hItem);
       break;
      default:
       return FALSE;
     }
     return true;
    }
    
    void CLeftView::OnDestroy() 
    {
     CTreeView::OnDestroy();
     // TODO: Add your message handler code here
     if(m_pImageList != NULL)
      m_pImageList = NULL;
      delete m_pImageList;
    }
    
    void CLeftView::AddDummyNode(HTREEITEM hItem)
    {
     GetTreeCtrl().InsertItem ("", 0, 0, hItem);
    }
    
    CString CLeftView::GetPathFromItem(HTREEITEM hItem)
    {
     CString strPathName;
     while (hItem != NULL) 
     {
      CString string = GetTreeCtrl().GetItemText (hItem);
      if ((string.Right (1) != "\\") && !strPathName.IsEmpty ())
       string += "\\";
       strPathName = string + strPathName;
       hItem = GetTreeCtrl().GetParentItem (hItem);
     }
     if(strPathName.Left(11) == MYCOMPUTER && strPathName.GetLength() > 11)
      strPathName = strPathName.Mid(12);
     return strPathName;
    }
    
    BOOL CLeftView::IsPathValid(CString &strPathName)
    {
     if (strPathName.GetLength () == 3)
      return TRUE;
     HANDLE hFind;
     WIN32_FIND_DATA fd;
     BOOL bResult = FALSE;
     if ((hFind = ::FindFirstFile ((LPCTSTR) strPathName, &fd)) !=
      INVALID_HANDLE_VALUE) {
       if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        bResult = TRUE;
       ::CloseHandle (hFind);
      }
      return bResult;
    }
    
    BOOL CLeftView::IsMediaValid(CString &strPathName)
    {
     // Return TRUE if the drive doesn’t support removable media.
     UINT nDriveType = GetDriveType ((LPCTSTR) strPathName);
     if ((nDriveType != DRIVE_REMOVABLE) && (nDriveType != DRIVE_CDROM))
      return TRUE;
    }
    
    HTREEITEM CLeftView::GetDriveNode(HTREEITEM hItem)
    {
     HTREEITEM hParent;
     do {
      hParent = GetTreeCtrl().GetParentItem (hItem);
      if (hParent != NULL)
       hItem = hParent;
     } while (hParent != NULL);
     return hItem;
    }
    
    UINT CLeftView::DeleteChildren(HTREEITEM hItem)
    {
     UINT nCount = 0;
     HTREEITEM hChild = GetTreeCtrl().GetChildItem (hItem);
     while (hChild != NULL) {
      HTREEITEM hNextItem = GetTreeCtrl().GetNextSiblingItem (hChild);
      GetTreeCtrl().DeleteItem (hChild);
      hChild = hNextItem;
      nCount++;
     }
     return nCount;
    }
    
    UINT CLeftView::AddDirectoryNodes(HTREEITEM hItem, CString &strPathName)
    {
     HANDLE hFind;
     WIN32_FIND_DATA fd;
     UINT nCount = 0;
     CString strFileSpec = strPathName;
     if (strFileSpec.Right (1) != "\\")
      strFileSpec += "\\";
      strFileSpec += "*.*";
     if ((hFind = ::FindFirstFile ((LPCTSTR) strFileSpec, &fd)) ==INVALID_HANDLE_VALUE) 
     {
      if (IsDriveNode (hItem))
       AddDummyNode (hItem);
      return 0;
     }
     CWaitCursor wait;
     CDriveExplorerDoc* pDoc = GetDocument();
     pDoc->m_ExplorerView->DeleteAllItems();
     do {
      if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
      {
       CString strFileName = (LPCTSTR) &fd.cFileName;
       if ((strFileName != ".") && (strFileName != "..") && (fd.dwFileAttributes != 22))
       {
        HTREEITEM hChild =GetTreeCtrl().InsertItem ((LPCTSTR) &fd.cFileName,
          ILI_CLSDFLD , ILI_OPENFLD , hItem , TVI_SORT);
        CString strNewPathName = strPathName;
        if (strNewPathName.Right (1) != "\\")
         strNewPathName += "\\";
         strNewPathName += (LPCTSTR) &fd.cFileName;
         SetButtonState (hChild, strNewPathName);
        nCount++;
       }
      }
      else
      {
       pDoc->m_ExplorerView->AddToListView(&fd); 
      } 
     } while (::FindNextFile (hFind, &fd));
     ::FindClose (hFind);
     return nCount;
    }
    
    void CLeftView::SetButtonState(HTREEITEM hItem, CString &strPathName)
    {
     if (HasSubdirectory (strPathName))
      AddDummyNode (hItem);
    }
    
    BOOL CLeftView::HasSubdirectory(CString &strPathName)
    {
     HANDLE hFind;
     WIN32_FIND_DATA fd;
     BOOL bResult = FALSE;
     CString strFileSpec = strPathName;
     if (strFileSpec.Right (1) != "\\")
      strFileSpec += "\\";
      strFileSpec += "*.*";
     if ((hFind = ::FindFirstFile ((LPCTSTR) strFileSpec, &fd)) !=INVALID_HANDLE_VALUE)
     {
      do {
       if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
       {
        CString strFileName = (LPCTSTR) &fd.cFileName;
        if ((strFileName != ".") && (strFileName != ".."))
         bResult = TRUE;
       }
      } while (::FindNextFile (hFind, &fd) && !bResult);
      ::FindClose (hFind);
     }
     return bResult;
    }
    
    BOOL CLeftView::IsDriveNode(HTREEITEM hItem)
    {
     return (GetTreeCtrl().GetParentItem (hItem) == NULL) ? TRUE : FALSE;
    }
    
    void CLeftView::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult) 
    {
     NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
     HTREEITEM hItem = pNMTreeView->itemNew.hItem;
     CString strPathName = GetPathFromItem (hItem);
     if (!IsMediaValid (strPathName)) 
     {
      HTREEITEM hRoot = GetDriveNode (hItem);
      GetTreeCtrl().Expand (hRoot, TVE_COLLAPSE);
      DeleteChildren (hRoot);
      AddDummyNode (hRoot);
      *pResult = TRUE;
      return;
     }
     // Delete the item if strPathName no longer specifies a valid path.
     if (!IsPathValid (strPathName)) 
     {
      if(strPathName != MYCOMPUTER && strPathName != "")
      {
       GetTreeCtrl().DeleteItem (hItem);
       *pResult = TRUE;
       return;
      }
     }
     CWaitCursor wait;
     if (pNMTreeView->action == TVE_EXPAND) 
     {
      if(strPathName != MYCOMPUTER)
      {
       DeleteChildren (hItem);
       if (!AddDirectoryNodes (hItem, strPathName))
        *pResult = TRUE;
      }
     }
     else {
      if(strPathName != MYCOMPUTER)
      {
       DeleteChildren (hItem);
       if (IsDriveNode (hItem))
        AddDummyNode (hItem);
       else
        SetButtonState (hItem, strPathName);
      }
     }
     m_LocalPath = strPathName;
     *pResult = 0;
    }
    
    void CLeftView::OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult) 
    {
     NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
     // TODO: Add your control notification handler code here
     HTREEITEM hItem = pNMTreeView->itemNew.hItem;
     CString strPathName = GetPathFromItem (hItem);
     *pResult = FALSE;
     if(strPathName == MYCOMPUTER)
      return;
     CWaitCursor wait;
     if (!AddDirectoryNodes (hItem, strPathName))
      *pResult = TRUE;
     m_LocalPath = strPathName;
     *pResult = 0;
    }
    
    ////////////////// DriveExplorerView.h : interface of the CDriveExplorerView class
    #if !defined(AFX_DRIVEEXPLORERVIEW_H__29F66873_4E46_11D6_9693_B383368EF622__INCLUDED_)
    #define AFX_DRIVEEXPLORERVIEW_H__29F66873_4E46_11D6_9693_B383368EF622__INCLUDED_
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    class CDriveExplorerView : public CListView
    {
     protected: // create from serialization only
      CDriveExplorerView();
      DECLARE_DYNCREATE(CDriveExplorerView)
      // Attributes
     public:
      CDriveExplorerDoc* GetDocument();
      CImageList* m_pImageList;
      CImageList* m_pImageListL;
      // Operations
     public:
      // Overrides
      // ClassWizard generated virtual function overrides
      //{{AFX_VIRTUAL(CDriveExplorerView)
     public:
      virtual void OnDraw(CDC* pDC); // overridden to draw this view
      virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
     protected:
      virtual void OnInitialUpdate(); // called first time after construct
      virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
      virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
      virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
      //}}AFX_VIRTUAL
      // Implementation
     public:
      void SetupImages(CImageList* mImageList, int iSize);
      UINT GetListViewIcon(CString s);
      CString GetFileType(CString s);
      LPTSTR GetNTS(CString cString);
      void AddToListView(WIN32_FIND_DATA* fd);
      void DeleteAllItems();
      virtual ~CDriveExplorerView();
      #ifdef _DEBUG
      virtual void AssertValid() const;
      virtual void Dump(CDumpContext& dc) const;
      #endif
     protected:
      // Generated message map functions
     protected:
      //{{AFX_MSG(CDriveExplorerView)
      afx_msg void OnDestroy();
      afx_msg void OnSize(UINT nType, int cx, int cy);
      //}}AFX_MSG
      afx_msg void OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct);
      DECLARE_MESSAGE_MAP()
    };
    #ifndef _DEBUG // debug version in DriveExplorerView.cpp
    inline CDriveExplorerDoc* CDriveExplorerView::GetDocument()
    { return (CDriveExplorerDoc*)m_pDocument; }
    #endif
    #endif
    
    ///////////////////// DriveExplorerView.cpp : implementation of the CDriveExplorerView class
    #include "stdafx.h"
    #include "DriveExplorer.h"
    #include "DriveExplorerDoc.h"
    #include "DriveExplorerView.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    #define ICI_ACCESSFILE 0
    #define ICI_C_SOURCE 1
    #define ICI_CDDRV 2
    #define ICI_CLSDFLD 3
    #define ICI_CURSORFILE 4
    #define ICI_DRIVE 5
    #define ICI_DRIVERSFILE 6
    #define ICI_ERROR 7
    #define ICI_EXCELFILE 8
    #define ICI_EXCLAMATION 9
    #define ICI_EXEFILE 10
    #define ICI_FLOPPYDRV 11
    #define ICI_FONTFILE 12
    #define ICI_FOXPROFILE 13
    #define ICI_GENERALFILE 14
    #define ICI_HEADERFILE 15
    #define ICI_HELPFILE 16
    #define ICI_HTMLDOC 17
    #define ICI_HTMLHELP 18
    #define ICI_IMAGEFILE 19
    #define ICI_INFO 20
    #define ICI_JAVABEAN 21
    #define ICI_JAVACLASSES 22
    #define ICI_JAVASOURCE 23
    #define ICI_MYCOMPUTER 24
    #define ICI_OPENFLD 25
    #define ICI_PDFFILE 26
    #define ICI_QUESTION 27
    #define ICI_REGISTRYFILE 28
    #define ICI_SETUPFILE 29
    #define ICI_SOUNDFILE 30
    #define ICI_TEXTFILE 31
    #define ICI_TRASHFILE 32
    #define ICI_UNINSTALLFILE 33
    #define ICI_VIDEOFILE 34
    #define ICI_WINDOWSFILE 35
    #define ICI_WORDDOC 36
    #define ICI_ZIPFILE 37
    #define ICI_CDUP 38
    
    ///////////////////////////////////////////////////////////// CDriveExplorerView
    IMPLEMENT_DYNCREATE(CDriveExplorerView, CListView)
    BEGIN_MESSAGE_MAP(CDriveExplorerView, CListView)
    //{{AFX_MSG_MAP(CDriveExplorerView)
    ON_WM_DESTROY()
    ON_WM_SIZE()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    CDriveExplorerView::CDriveExplorerView()
    {
     // TODO: add construction code here
    }
    
    CDriveExplorerView::~CDriveExplorerView()
    {
    }
    
    BOOL CDriveExplorerView::PreCreateWindow(CREATESTRUCT& cs)
    {
     // TODO: Modify the Window class or styles here by modifying
     // the CREATESTRUCT cs
     cs.style |= LVS_REPORT;
     return CListView::PreCreateWindow(cs);
    }
    
    void CDriveExplorerView::OnDraw(CDC* pDC)
    {
     CDriveExplorerDoc* pDoc = GetDocument();
     ASSERT_VALID(pDoc);
     CListCtrl& refCtrl = GetListCtrl();
     refCtrl.InsertItem(0, "Item!");
     // TODO: add draw code for native data here
    }
    
    void CDriveExplorerView::OnInitialUpdate()
    {
     CListView::OnInitialUpdate();
     CDriveExplorerDoc* pDoc = GetDocument();
     pDoc->m_ExplorerView = this;
     CRect rect;
     GetClientRect(&rect);
     GetListCtrl().InsertColumn(0, "File Name", LVCFMT_LEFT , rect.right / 2 , -1);
     GetListCtrl().InsertColumn(1, "Size", LVCFMT_LEFT , rect.right / 4 , -1);
     GetListCtrl().InsertColumn(2, "Date", LVCFMT_LEFT , rect.right / 4 , -1);
     m_pImageList = new CImageList();
     m_pImageListL = new CImageList();
     SetupImages(m_pImageList, 16);
     SetupImages(m_pImageListL, 32);
     GetListCtrl().SetImageList(m_pImageList, LVSIL_SMALL);
     GetListCtrl().SetImageList(m_pImageListL, LVSIL_NORMAL);
    }
    
    #ifdef _DEBUG
    void CDriveExplorerView::AssertValid() const
    {
     CListView::AssertValid();
    }
    
    void CDriveExplorerView::Dump(CDumpContext& dc) const
    {
     CListView::Dump(dc);
    }
    
    CDriveExplorerDoc* CDriveExplorerView::GetDocument() // non-debug version is inline
    {
     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDriveExplorerDoc)));
     return (CDriveExplorerDoc*)m_pDocument;
    }
    #endif //_DEBUG
    
    void CDriveExplorerView::OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct)
    {
     //TODO: add code to react to the user changing the view style of your window
    }
    
    void CDriveExplorerView::DeleteAllItems()
    { 
     GetListCtrl().DeleteAllItems();
    }
    
    void CDriveExplorerView::AddToListView(WIN32_FIND_DATA *fd)
    {
     LV_ITEM lvitem;
     char sNumBuff[100];
     int iActualItem;
     CString sText;
     lvitem.mask = LVIF_TEXT | LVIF_IMAGE;
     lvitem.iItem = 0;
     lvitem.iSubItem = 0;
     lvitem.pszText = GetNTS(fd->cFileName); // fd.cFileName;
     lvitem.iImage = GetListViewIcon(fd->cFileName); //SetFileIcon(fd->GetFileName());
     iActualItem = GetListCtrl().InsertItem(&lvitem);
     // Add Attribute column
     lvitem.mask = LVIF_TEXT;
     lvitem.iItem = iActualItem;
     lvitem.iSubItem = 1;
     lvitem.pszText = GetNTS(GetFileType(fd->cFileName));
     GetListCtrl().SetItem(&lvitem);
     // Add Size column
     if(fd->nFileSizeLow != 0)
      ltoa((long)fd->nFileSizeLow,sNumBuff,10);
     else
      strcpy(sNumBuff,"");
      lvitem.mask = LVIF_TEXT;
      lvitem.iItem = iActualItem;
      lvitem.iSubItem = 2;
      lvitem.pszText = sNumBuff;
      GetListCtrl().SetItem(&lvitem); 
      // Add Time column
      CTime refTime;
      refTime = fd->ftCreationTime;
      sText = refTime.Format( "%b-%d-%Y" );
      lvitem.mask = LVIF_TEXT;
      lvitem.iItem = iActualItem;
      lvitem.iSubItem = 3;
      lvitem.pszText = sText.GetBuffer(sText.GetLength());
      GetListCtrl().SetItem(&lvitem);
    }
    
    LPTSTR CDriveExplorerView::GetNTS(CString cString)
    {
     LPTSTR lpsz = new TCHAR[cString.GetLength()+1];
     _tcscpy(lpsz, cString);
     return lpsz;
    }
    
    CString CDriveExplorerView::GetFileType(CString s)
    {
     CString cResult;
     int nFoundAt = s.Find("." , 0);
     s.MakeUpper();
     if(nFoundAt == 0)
      return s + " File";
      CString ext = s.Mid(nFoundAt); 
      if(ext == ".PDF") return "PDF File";
      if(ext == ".CPP") return "VC Source";
      if(ext == ".H") return "Header File";
      if(ext == ".C") return "C Source";
      else if(s == "SETUP.EXE") return "SETUP File";
      else if(s == "ISUNINST.EXE") return "UNINSTALL File";
      else if(ext == ".TXT" || ext == ".LOG") return "TEXT File";
      else if(ext == ".ZIP" || ext == ".ARJ" || ext == ".TGZ" || ext == ".RAR" || ext == ".TAR" || ext == ".LZH" || ext == ".LZA" || ext == ".CAB")
       return "ZIP File";
      else if(ext == ".EXE" || ext == ".COM" || ext == ".BAT")
       return "Application";
      else if(ext == ".AU" || ext == ".WAV" || ext == ".MP3")
       return "SOUND File";
      else if(ext == ".HTM" || ext == ".HTML") return "HTML Document";
      else if(ext == ".DOC") return "WORD Document";
      else if(ext == ".MPG" || ext == ".MPEG" || ext == ".AVI")
       return ICI_VIDEOFILE;
      else if(ext == ".HLP") return "HELP File";
      else if(ext == ".BMP") return "Bitmap File";
      else if(ext == ".ICO") return "Icon File";
      else if(ext == ".DBF" || ext == ".DBT" || ext == ".MEM")
       return "FOXPRO File";
      else if(ext == ".DLL" || ext == ".SYS" || ext == ".OCX" ||
        ext == ".VXD" || ext == ".INI" ||
        ext == ".DRV")
       return "DRIVERS File";
      else if(ext == ".JPG" || ext == ".GIF" || ext == ".JPEG" || 
        ext == ".AIS" || ext == ".EMF" || ext == ".IFF" ||
        ext == ".KDC" || ext == ".PCD" || ext == ".PCX" ||
        ext == ".PIC" || ext == ".PIX" || ext == ".PNG" ||
        ext == ".PSD" || ext == ".SGI" || ext == ".TIF" ||
        ext == ".TIFF" || ext == ".WMF")
       return "Picture File";
      else if(ext == ".TSK" || ext == ".CPX" || ext == ".ROM" ||
        ext == ".CFG" || ext == ".STF" || ext == ".LST" ||ext == ".INF")
       return "WINDOWS File";
      else if(ext == ".CUR" || ext == ".ANI") return "CURSOR File";
      else if(ext == ".FON") return "FONT File";
      else if(ext == ".BAK") return "Backup File";
      else if(ext == ".JAVA") return "JAVA Source";
      else if(ext == ".CLASS") return "JAVA Class";
      else if(ext == ".BEAN") return "JAVA Bean";
      else if(ext == ".REG") return "REGISTRY File";
      else if(ext == ".MDB") return "ACCESS Database";
      else if(ext == ".XLS") return "EXCEL File";
      else if(ext == ".CHM") return "HTML Help";
      else
      {
       ext = ext.Mid( (ext.Find(’.’,0) != -1 ? 1 : 0));
       return ext + " File";
      }
      return cResult;
    }
    
    UINT CDriveExplorerView::GetListViewIcon(CString s)
    {
     int nFoundAt = s.Find("." , 1);
     s.MakeUpper();
     if(nFoundAt == 0)
      return ICI_GENERALFILE;
     CString ext = s.Mid(nFoundAt);
     // Set some standard icon types
     if(ext == ".PDF") return ICI_PDFFILE;
     else if(s == "SETUP.EXE") return ICI_SETUPFILE;
     else if(s == "ISUNINST.EXE") return ICI_UNINSTALLFILE;
     else if(ext == ".TXT" || ext == ".LOG") return ICI_TEXTFILE;
     else if(ext == ".ZIP" || ext == ".ARJ" || ext == ".TGZ" || 
       ext == ".RAR" || ext == ".TAR" || ext == ".LZH" ||
       ext == ".LZA" || ext == ".CAB")
      return ICI_ZIPFILE;
     else if(ext == ".EXE" || ext == ".COM" || ext == ".BAT")
      return ICI_EXEFILE;
     else if(ext == ".AU" || ext == ".WAV" || ext == ".MP3")
      return ICI_SOUNDFILE;
     else if(ext == ".HTM" || ext == ".HTML") return ICI_HTMLDOC;
     else if(ext == ".DOC") return ICI_WORDDOC;
     else if(ext == ".MPG" || ext == ".MPEG" || ext == ".AVI")
      return ICI_VIDEOFILE;
     else if(ext == ".HLP") return ICI_HELPFILE;
     else if(ext == ".BMP") return ICI_IMAGEFILE;
     else if(ext == ".ICO") return ICI_IMAGEFILE;
     else if(ext == ".DBF" || ext == ".DBT" || ext == ".MEM")
      return ICI_FOXPROFILE;
     else if(ext == ".DLL" || ext == ".SYS" || ext == ".OCX" ||
       ext == ".VXD" || ext == ".INI" || ext == ".DRV")
      return ICI_DRIVERSFILE;
     else if(ext == ".JPG" || ext == ".GIF" || ext == ".JPEG" || 
      ext == ".AIS" || ext == ".EMF" || ext == ".IFF" ||
      ext == ".KDC" || ext == ".PCD" || ext == ".PCX" ||
      ext == ".PIC" || ext == ".PIX" || ext == ".PNG" ||
      ext == ".PSD" || ext == ".SGI" || ext == ".TIF" ||
      ext == ".TIFF" || ext == ".WMF")
      return ICI_IMAGEFILE;
     else if(ext == ".TSK" || ext == ".CPX" || ext == ".ROM" ||
      ext == ".CFG" || ext == ".STF" || ext == ".LST" ||ext == ".INF")
      return ICI_WINDOWSFILE;
     else if(ext == ".CUR" || ext == ".ANI") return ICI_CURSORFILE;
     else if(ext == ".FON") return ICI_FONTFILE;
     else if(ext == ".BAK") return ICI_TRASHFILE;
     else if(ext == ".JAVA") return ICI_JAVASOURCE;
     else if(ext == ".CLASS") return ICI_JAVACLASSES;
     else if(ext == ".BEAN") return ICI_JAVABEAN;
     else if(ext == ".REG") return ICI_REGISTRYFILE;
     else if(ext == ".MDB") return ICI_ACCESSFILE;
     else if(ext == ".XLS") return ICI_EXCELFILE;
     else if(ext == ".CHM") return ICI_HTMLHELP;
     else
      return ICI_GENERALFILE;
    }
    
    void CDriveExplorerView::SetupImages(CImageList* mImageList, int iSize)
    {
     CWinApp* pApp = AfxGetApp();
     // ASSERT(m_pImageList != NULL); // serious allocation failure checking
     mImageList->Create(iSize, iSize, ILC_COLOR8 | ILC_MASK, 9, 9);
     mImageList->Add(pApp->LoadIcon(ICO_ACCESSFILE));
     mImageList->Add(pApp->LoadIcon(ICO_C_SOURCE));
     mImageList->Add(pApp->LoadIcon(ICO_CDDRV)); 
     mImageList->Add(pApp->LoadIcon(ICO_CLSDFLD)); 
     mImageList->Add(pApp->LoadIcon(ICO_CURSORFILE));
     mImageList->Add(pApp->LoadIcon(ICO_DRIVE)); 
     mImageList->Add(pApp->LoadIcon(ICO_DRIVERSFILE));
     mImageList->Add(pApp->LoadIcon(ICO_ERROR));
     mImageList->Add(pApp->LoadIcon(ICO_EXCELFILE));
     mImageList->Add(pApp->LoadIcon(ICO_EXCLAMATION));
     mImageList->Add(pApp->LoadIcon(ICO_EXEFILE));
     mImageList->Add(pApp->LoadIcon(ICO_FLOPPYDRV)); 
     mImageList->Add(pApp->LoadIcon(ICO_FONTFILE));
     mImageList->Add(pApp->LoadIcon(ICO_FOXPROFILE));
     mImageList->Add(pApp->LoadIcon(ICO_GENERALFILE));
     mImageList->Add(pApp->LoadIcon(ICO_HEADERFILE));
     mImageList->Add(pApp->LoadIcon(ICO_HELPFILE));
     mImageList->Add(pApp->LoadIcon(ICO_HTMLDOC));
     mImageList->Add(pApp->LoadIcon(ICO_HTMLHELP));
     mImageList->Add(pApp->LoadIcon(ICO_IMAGEFILE));
     mImageList->Add(pApp->LoadIcon(ICO_INFO));
     mImageList->Add(pApp->LoadIcon(ICO_JAVABEAN));
     mImageList->Add(pApp->LoadIcon(ICO_JAVACLASSES));
     mImageList->Add(pApp->LoadIcon(ICO_JAVASOURCE));
     mImageList->Add(pApp->LoadIcon(ICO_MYCOMP));
     mImageList->Add(pApp->LoadIcon(ICO_OPENFLD)); 
     mImageList->Add(pApp->LoadIcon(ICO_PDFFILE));
     mImageList->Add(pApp->LoadIcon(ICO_QUESTION));
     mImageList->Add(pApp->LoadIcon(ICO_REGISTRYFILE));
     mImageList->Add(pApp->LoadIcon(ICO_SETUPFILE));
     mImageList->Add(pApp->LoadIcon(ICO_SOUNDFILE));
     mImageList->Add(pApp->LoadIcon(ICO_TEXTFILE)); 
     mImageList->Add(pApp->LoadIcon(ICO_TRASHFILE));
     mImageList->Add(pApp->LoadIcon(ICO_UNINSTALLFILE));
     mImageList->Add(pApp->LoadIcon(ICO_VIDEOFILE));
     mImageList->Add(pApp->LoadIcon(ICO_WINDOWSFILE));
     mImageList->Add(pApp->LoadIcon(ICO_WORDDOC));
     mImageList->Add(pApp->LoadIcon(ICO_ZIPFILE));
     mImageList->Add(pApp->LoadIcon(ICO_CDUP));
     return ;
    }
    
    void CDriveExplorerView::OnDestroy() 
    {
     CListView::OnDestroy(); 
     // TODO: Add your message handler code here
     if(m_pImageList != NULL)
      m_pImageList = NULL;
     if(m_pImageListL != NULL)
      m_pImageListL = NULL;
     delete m_pImageList;
     delete m_pImageListL; 
    }
    
    void CDriveExplorerView::OnSize(UINT nType, int cx, int cy) 
    {
     CListView::OnSize(nType, cx, cy);
    
     // TODO: Add your message handler code here
     if(GetListCtrl().GetSafeHwnd())
     {
      GetListCtrl().SetColumnWidth(0, cx / 2);
      GetListCtrl().SetColumnWidth(1, cx / 4);
      GetListCtrl().SetColumnWidth(2, cx / 4);
     }
    }
    
    ///////////////////////////////////////////////////////////////////////////////////
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
    {
     // create splitter window
     if (!m_wndSplitter.CreateStatic(this, 1, 2))
      return FALSE;
     if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView),
      CSize(100, 100), pContext) ||!m_wndSplitter.CreateView(0, 1, 
      RUNTIME_CLASS(CDriveExplorerView), CSize(100, 100), pContext))
      {
       m_wndSplitter.DestroyWindow();
       return FALSE;
      }
      m_wndSplitter.SetColumnInfo(0, 200, 100);
      return TRUE;
    }
    
    CDriveExplorerView* CMainFrame::GetRightPane()
    {
     CDriveExplorerView* pView=(CDriveExplorerView*)m_wndSplitter.GetPane(0, 1);
     return pView;
    }
    
    void CMainFrame::OnUpdateViewStyles(CCmdUI* pCmdUI)
    {
     CDriveExplorerView* pView = GetRightPane(); 
     if (pView == NULL)
      pCmdUI->Enable(FALSE);
     else
     {
      DWORD dwStyle = pView->GetStyle() & LVS_TYPEMASK;
      if (pCmdUI->m_nID == ID_VIEW_LINEUP)
      {
       if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON)
        pCmdUI->Enable();
       else
        pCmdUI->Enable(FALSE);
      }
      else
      {
       // otherwise, use dots to reflect the style of the view
       pCmdUI->Enable();
       BOOL bChecked = FALSE;
       switch (pCmdUI->m_nID)
       {
        case ID_VIEW_AS_DETAILS:
          bChecked = (dwStyle == LVS_REPORT);
          break;
        case ID_VIEW_AS_SMALLICONS:
          bChecked = (dwStyle == LVS_SMALLICON);
          break;
        case ID_VIEW_AS_LARGEICONS:
          bChecked = (dwStyle == LVS_ICON);
          break;
        case ID_VIEW_AS_LIST:
          bChecked = (dwStyle == LVS_LIST);
          break;
        default:
          bChecked = FALSE;
          break;
       }
       pCmdUI->SetRadio(bChecked ? 1 : 0);
      }
     }
    }
    
    void CMainFrame::OnViewStyle(UINT nCommandID)
    {
     CDriveExplorerView* pView = GetRightPane();
     if (pView != NULL)
     {
      DWORD dwStyle = -1;
      switch (nCommandID)
      {
       case ID_VIEW_LINEUP:
       {
        // ask the list control to snap to grid
        CListCtrl& refListCtrl = pView->GetListCtrl();
        refListCtrl.Arrange(LVA_SNAPTOGRID);
       }
        break; 
        // other commands change the style on the list control
       case ID_VIEW_AS_DETAILS:
        dwStyle = LVS_REPORT;
        break;
       case ID_VIEW_AS_SMALLICONS:
        dwStyle = LVS_SMALLICON;
        break;
       case ID_VIEW_AS_LARGEICONS:
        dwStyle = LVS_ICON;
        break;
       case ID_VIEW_AS_LIST:
        dwStyle = LVS_LIST;
        break;
      }
      // change the style; window will repaint automatically
      if (dwStyle != -1)
       pView->ModifyStyle(LVS_TYPEMASK, dwStyle);
     }
    }

      四、小结

      上述代码实现的仅仅是资源管理器的主要功能,只要能够对CListView、CtreeView等类灵活运用,在此基础上添加些代码还可以在左右两个视之间实现文件或文件夹的拖动功能,这时两个视都应该有它们自己的实现函数来进行拖放操作。只要不设置”SetCapture()、ReleaseCapture()”,被拖放的条目就能从原来的视拖放到目的视。如果被拖的条目(鼠标下的)离开了原来的视,那么目的视的WM_MOUSEMOVE消息就获得了该条目的控制条件。具体实现时要注意保证不同的视(原来的视以及目的视)能访问相同的成员变量,解决的办法是在app类里面定义一些共用的成员变量。

    展开全文
  • 一直以来人们对Windows资源管理器(Windows Explorer)的功能和易用性都有所抱怨,于是就出现了很多第三方插件(它们通常会出现在Windows资源管理器的上下文菜单)。在本文中将为大家介绍Windows资源管理器插件...
  • 在Extjs对文件或数据清单列表显示,最常见...以下是文件的现实界面,通过扩充功能,完全能达类似资源管理器的效果。 实际使用插件发现,不能自动换行,只好自己定义CSS了 CSS代码: .icon-g
  • C++模拟windows资源管理器

    千次阅读 2020-05-12 16:02:49
    用户根据提示,选择预期实现的功能,并按要求操作,模拟windows资源管理器中所能实现的基本功能。 程序执行的命令包括: (1)、程序运行,提示用户选择预期实现的功能; (2)、用户按要求操作; (3)、结束。 二...
  • 长期以来,微软通常会在 Windows 资源管理器中包含“桌面、文档、下载、音乐、图片和视频”默认存储位置。但是在 2017 年 10 月“秋季创意者更新”之后,它又增加了“3D 对象”。其旨在为 Windows 10 新增 3D ...
  • Win7的资源管理器看似功能多样,貌似强大不少,但很多都是类似于花边的功能。这个Explorer++是一个免费的在Windows下运行的多标签文件管理器,增强了些许文件浏览便利性,但相比WinXP及以前的自带资源管理器还要稍差...
  • 刚从xp换成win7用户,可能不太习惯win7的资源管理器中没有xp摄像头身影了,其实个人感觉要着也没啥用,不过如果你需要话,可以下载下面工具。以下为转载: 大家在使用xp系统时候,打开我电脑就能看到...
  • javascript写的windows资源管理器 解压运行scripting.html,在IE6.0打开(不能单独打开view.html这是一个子页面,必须由父页面调用)即可。 本javascript程序是我自己利用业余时间做,主要是编写javascript进一步对...
  • QTTabBar[1] 是一款可以让你在 Windows 资源管理器中使用 Tab 多标签功能的工具,就像使用浏览器一样。QTTabBar 还提供了一些功能插件,如:文件操作工具、树型目录、显示状态栏等等,可以帮助我们.
  • 由于之后没有关过电脑,并且也没有在资源管理器中使用ClearCase。周一来以后使用过程发现平时右键菜单选项中的ClearCase菜单项不见了,只能使用ClearCase Exporer打开View,在其中进行右键菜单相关操作。 现象:...
  • 所有来自 Windows 资源管理器的 shell 程序 – 没有任何麻烦!加上所有功能,你会从一个功能强大的标签式双窗格文件管理器,包括 Omni-Finder,一个查找文件模块,只是超出所有已知的搜索工具。不要拿我们的话来说,...
  • 在刚刚发布 Windows 10 20H1 版本,Skip Average 提供了一个新功能,允许内部人员使用 Windows 资源管理访问 Windows Linux 子系统(WS...
  • ps是linux系统的进程管理工具,相当于windows中资源管理器的一部分功能。 一般来说,ps aux命令执行结果的几个列的信息分别是: USER 进程所属用户 PID 进程ID %CPU 进程占用CPU百分比 %
  • Icaros 中文版的功能很简单,就是让 Windows 资源管理器能支持更多视频格式的预览缩略图显示。你只需安装好 Icaros 并对希望显示缩略图的格式“打勾”即可,使用上非常的简单。软件支持 XP ~ Windows 8。从界面上...
  • 一个功能极其强大PHP树类 (目录树能做windows资源管理器中一模一样) by Qeto.com(企图互联--互联网应用先驱) php tree class. class TreeList {var $tree=array();/*****************************************...
  • 它提供的功能类似于Windows资源管理器。 使用ossbrowser,您可以轻松查看,上传,下载和管理项目。 平台 Windows 7以上版本,Linux和Mac。 我们不建议使用WindowsXP和WindowServer 程序 下载并安装ossbrowser。 ...
  • QTTabBar是一款可以让你在Windows资源管理器中使用Tab多标签功能的小工具。会使Windows资源管理器更加好用。 下载: 进入官网,官网地址:http://qttabbar.wikidot.com/,可以看到更新到1042了,点击它便开始了下载...
  • 用vc实现资源管理器功能

    热门讨论 2010-09-25 12:40:08
    利用VC的Treeview和Listview,做一个自己的资源管理器,左侧的树状目录可以关闭,当点击一个...尽量模仿windows资源管理器的功能,比如左侧文件夹图标的变化和右侧listview可以显示“列表”,“详细资料”。
  • 在文件传输模块开发过程,要实现这样一个功能:在资源管理器中对选中文件或者文件夹CTRL+C,在聊天窗口按下CTRL+V,获取用户选择文件或文件夹发送给对端用户。这其中存在一个问题:如何从剪切板数据获取...
  • 在实际应用,可能会有这样需求,在软件中的文件树可以通过右键菜单打开windows系统的资源管理器,并在窗口选中指定文件,原有做法是直接通过QDesktopServices::openUrl来打开资源管理器,但是并不能实现...
  • Windows 8资源管理器添加了类似Office 2007的功能区菜单,但是并不是每一个用户都喜欢它,那么是否能够在资源管理器打开时自动最小化功能区菜单?或者根据自己的喜好设置资源管理器打开时功能区菜单的状态呢? ...
  • 有时,我们需要在Windows资源管理器的右键菜单添加一些项,以方便使用某些功能或程序。 比如我的电脑上有一个免安装版的Notepad++,我想在所有文件的右键菜单添加一项用Notepad++打开, 这样就可以方便地用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,489
精华内容 995
关键字:

windows中资源管理器的功能