SmartPhone PocketPC文件夹管理源码

一:ListViewHelper.cs

using System;

namespace RDP
{
 /// <summary>
 /// Summary description for Helper.
 /// </summary>
 public class ListViewHelper
 {
    private const uint LVM_GETEXTENDEDLISTVIEWSTYLE = 0x1000 + 55;
    private const uint LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1000 + 54;
    private const uint LVM_GETTOPINDEX = 0x1000 + 39;
    private const int LVS_EX_GRIDLINES = 0x1;
    private const int LVS_EX_GRADIENT = 0x20000000;

    public ListViewHelper()
 {
 }

    public static void SetGradient(System.Windows.Forms.ListView listView)
    {
      listView.Capture = true;
      IntPtr hList = GetCapture();
      SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRADIENT);
      listView.Capture = false;
      listView.Refresh();
    }

    public static int GetTopIndex(System.Windows.Forms.ListView listView)
    {
      listView.Capture = true;
      IntPtr hWnd = GetCapture();
      int topIndex = SendMessage(hWnd, LVM_GETTOPINDEX, 0, 0);
      listView.Capture = false;
      listView.Refresh();
      return topIndex;
    }

    public static void SetGridLines(System.Windows.Forms.ListView listView)
    {
      listView.Capture = true;
      IntPtr hWnd = GetCapture();
      int extendedStyle = SendMessage(hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
      extendedStyle |= LVS_EX_GRIDLINES;
      SendMessage(hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, extendedStyle);
      listView.Capture = false;
      listView.Refresh();
    }

    #region APIs
    [System.Runtime.InteropServices.DllImport("coredll.dll")]
    private static extern IntPtr GetCapture();

    [System.Runtime.InteropServices.DllImport("coredll.dll")]
    private static extern int SendMessage(IntPtr hWnd, uint wMsg, int wParam, int lParam);
    #endregion
  }
}
 二:SimpleComparer.cs

using System;
using System.Collections;

namespace RDP
{
 /// <summary>
 /// This is a simple comparer class.
 /// </summary>
  public class SimpleComparer : IComparer
  {
    int IComparer.Compare(object x, object y) 
    {
      return (new CaseInsensitiveComparer()).Compare(x, y);
    }
  }

}

三:Folder.cs 

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.IO;

namespace UI
{
 public delegate void SetNameDelegate(string name);
 public delegate void SetAttributesDelegate(FileAttributes fileAttributes);

 /// <summary>
 /// Folder 的摘要说明。
 /// </summary>
 public class Folder : System.Windows.Forms.Form
 {
  private System.Windows.Forms.MainMenu mainMenu1;
  private System.Windows.Forms.MenuItem mi_Main;
  private System.Windows.Forms.MenuItem menuItem2;
  private System.Windows.Forms.MenuItem mi_Play;
  private System.Windows.Forms.MenuItem mi_Del;
  private System.Windows.Forms.ImageList imageList1;
  private System.Windows.Forms.MenuItem mi_Exit;
  private System.Windows.Forms.ListView listView1;
  private System.Windows.Forms.ColumnHeader itemsColumnHeader;

  private const string UPDIR = "..";
  private string path;
  
  public Folder()
  {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();

   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
  }

  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   base.Dispose( disposing );
  }

  #region Windows 窗体设计器生成的代码
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
   System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Folder));
   this.mainMenu1 = new System.Windows.Forms.MainMenu();
   this.mi_Main = new System.Windows.Forms.MenuItem();
   this.menuItem2 = new System.Windows.Forms.MenuItem();
   this.mi_Play = new System.Windows.Forms.MenuItem();
   this.mi_Del = new System.Windows.Forms.MenuItem();
   this.mi_Exit = new System.Windows.Forms.MenuItem();
   this.imageList1 = new System.Windows.Forms.ImageList();
   this.listView1 = new System.Windows.Forms.ListView();
   this.itemsColumnHeader = new System.Windows.Forms.ColumnHeader();
   //
   // mainMenu1
   //
   this.mainMenu1.MenuItems.Add(this.mi_Main);
   this.mainMenu1.MenuItems.Add(this.menuItem2);
   //
   // mi_Main
   //
   this.mi_Main.Text = "主界面";
   this.mi_Main.Click += new System.EventHandler(this.mi_Main_Click);
   //
   // menuItem2
   //
   this.menuItem2.MenuItems.Add(this.mi_Play);
   this.menuItem2.MenuItems.Add(this.mi_Del);
   this.menuItem2.MenuItems.Add(this.mi_Exit);
   this.menuItem2.Text = "选项";
   //
   // mi_Play
   //
   this.mi_Play.Enabled = false;
   this.mi_Play.Text = "播放";
   this.mi_Play.Click += new System.EventHandler(this.mi_Play_Click);
   //
   // mi_Del
   //
   this.mi_Del.Text = "删除";
   this.mi_Del.Click += new System.EventHandler(this.mi_Del_Click);
   //
   // mi_Exit
   //
   this.mi_Exit.Text = "退出";
   this.mi_Exit.Click += new System.EventHandler(this.mi_Exit_Click);
   //
   // imageList1
   //
   this.imageList1.Images.Add(((System.Drawing.Image)(resources.GetObject("resource"))));
   this.imageList1.Images.Add(((System.Drawing.Image)(resources.GetObject("resource1"))));
   this.imageList1.Images.Add(((System.Drawing.Image)(resources.GetObject("resource2"))));
   this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
   //
   // listView1
   //
   this.listView1.Columns.Add(this.itemsColumnHeader);
   this.listView1.FullRowSelect = true;
   this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
   this.listView1.SmallImageList = this.imageList1;
   this.listView1.View = System.Windows.Forms.View.Details;
   this.listView1.ItemActivate += new System.EventHandler(this.listView1_ItemActivate);
   this.listView1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.listView1_KeyUp);
   //
   // itemsColumnHeader
   //
   this.itemsColumnHeader.Text = "Items";
   this.itemsColumnHeader.Width = 170;
   //
   // Folder
   //
   this.ClientSize = new System.Drawing.Size(170, 172);
   this.Controls.Add(this.listView1);
   this.Menu = this.mainMenu1;
   this.Text = "文件夹";
   this.Load += new System.EventHandler(this.Folder_Load);

  }
  #endregion

  #region  SetAttributes

  public void SetAttributes(FileAttributes fileAttributes)
  {
   ListViewItem lvi = this.listView1.Items[this.listView1.SelectedIndices[0]];
   //bool isFolder = lvi.ImageIndex == 1;
   if(lvi.ImageIndex==0 || lvi.ImageIndex==1)
   {
    DirectoryInfo di = new DirectoryInfo(path + lvi.Text);
    di.Attributes = fileAttributes;
   }
   else
   {
    FileInfo fi = new FileInfo(path + lvi.Text);
    fi.Attributes = fileAttributes;
   }
  }
  #endregion

//  static void Main()
//  {
//   Application.Run(new Folder());
//  }

  private void Folder_Load(object sender, System.EventArgs e)
  {
   RDP.ListViewHelper.SetGradient(this.listView1);

   // 设置当前路径
   string bs = Path.DirectorySeparatorChar.ToString();
   //this.path = bs + "Storage" + bs + "My Documents" + bs;
   path = bs;

   this.BindListView();
  }

  #region BindListView

  private void BindListView()
  {
   Cursor.Current = Cursors.WaitCursor;
   ListViewItem lvi;
   this.listView1.BeginUpdate();
   this.listView1.Items.Clear();

   // 如果不是根结点
   if(path.Length > 1)
   {
    // 添加返回上级路径
    lvi = new ListViewItem(UPDIR);
    lvi.ImageIndex = 0;
    this.listView1.Items.Add(lvi);
   }

   // Add directories
   string[] dirs = Directory.GetDirectories(path);
   ArrayList list = new ArrayList(dirs.Length);
   for(int i = 0; i < dirs.Length; i++)
    list.Add(dirs[i]);
   list.Sort(new RDP.SimpleComparer());
   foreach(string dir in list)
   {
    lvi = new ListViewItem(Path.GetFileName(dir));
    lvi.ImageIndex = 1;
    this.listView1.Items.Add(lvi);
   }

   // Add files
   string[] files = Directory.GetFiles(path);

   list = new ArrayList(files.Length);
   for(int i = 0; i < files.Length; i++)
    list.Add(files[i]);
   list.Sort(new RDP.SimpleComparer());
   foreach(string file in list)
   {
    if(Path.GetFileName(file).ToString().ToLower().EndsWith(".mp3"))
    {
     lvi = new ListViewItem(Path.GetFileName(file));
     lvi.ImageIndex = 2;
     this.listView1.Items.Add(lvi);
    }
   }
   this.listView1.EndUpdate();

   if(this.listView1.Items.Count > 0)
   {
    this.listView1.Items[0].Selected = true;
    this.listView1.Items[0].Focused = true;
   }
   
   Cursor.Current = Cursors.Default;
  }
  #endregion

  #region listView1_ItemActivate

  private void listView1_ItemActivate(object sender, System.EventArgs e)
  {
   Cursor.Current = Cursors.WaitCursor;
   ListViewItem lvi = this.listView1.Items[this.listView1.SelectedIndices[0]];
   bool isFolder = lvi.ImageIndex == 1;
   if(lvi.Text == UPDIR)
   {
    path = path.Substring(0, path.Substring(0, path.Length - 1).LastIndexOf(Path.DirectorySeparatorChar) + 1);
    this.BindListView();
   }
   else if(isFolder)
   {
    path += lvi.Text + Path.DirectorySeparatorChar;
    this.BindListView();
   }
   else
   {
    RDP.ShellExecute.Start(path + lvi.Text);
   }
   Cursor.Current = Cursors.Default;

  
  }

  private void listView1_KeyUp(object sender, KeyEventArgs e)
  {
   int i = 0;
   int lineNo = 0;

   if((e.KeyCode == Keys.Left) || (e.KeyCode == Keys.Right))
   {
    e.Handled = true;
    i = RDP.ListViewHelper.GetTopIndex(this.listView1);
    lineNo = this.listView1.SelectedIndices[0] - i;
   }
   switch(e.KeyCode)
   {
    case Keys.Right:
     i += 19;
     if(i > this.listView1.Items.Count)
      i = this.listView1.Items.Count - 1;
     break;

    case Keys.Left:
     i -= 10;
     if(i < 0)
      i = 0;
     break;
   }
   if(e.Handled)
   {
    this.listView1.EnsureVisible(i);
    i = RDP.ListViewHelper.GetTopIndex(this.listView1) + lineNo;
    Cursor.Current = Cursors.WaitCursor;
    this.listView1.BeginUpdate();
    this.listView1.Items[i].Selected = true;
    this.listView1.Items[i].Focused = true;
    this.listView1.EndUpdate();
    Cursor.Current = Cursors.Default;
   }


  }
  #endregion

  #region 菜单事件

  private void mi_Main_Click(object sender, System.EventArgs e)
  {
   UI.Main main=new Main();
   main.Show();
  }

  private void mi_Play_Click(object sender, System.EventArgs e)
  {
  
  }

  private void mi_Del_Click(object sender, System.EventArgs e)
  {
   ListViewItem lvi = this.listView1.Items[this.listView1.SelectedIndices[0]];
   bool isFile = lvi.ImageIndex == 2;
   if(isFile)
   {
    DialogResult result=MessageBox.Show("是否确定删除?","删除提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1);

    if(result == DialogResult.Yes)
    {
     RDP.Xml.Del_PlayListContent(path + lvi.Text);
     RDP.Xml.Del_Content(path + lvi.Text);
     File.Delete(path + lvi.Text);
     this.BindListView();
    }
   }
 
  }

  private void mi_Exit_Click(object sender, System.EventArgs e)
  {
   DialogResult result=MessageBox.Show("是否确定退出?","退出提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1);

   if(result == DialogResult.Yes)
   {
    Application.Exit();
   }
  }

  #endregion

  
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值