一: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
}
}