using System;
using System.Windows.Forms;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
namespace jy_controls
{
/// <summary>
/// jyListview 的摘要说明。
/// </summary>
public class jyListview : System.Windows.Forms.ListView
{
public jyListview()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public delegate void hDragDrop(object Items);
public event hDragDrop DragDropItem;
protected override void OnDragEnter(System.Windows.Forms.DragEventArgs drgevent)
{
base.OnDragEnter(drgevent);
if(this.AllowDrop)
{
drgevent.Effect = DragDropEffects.Move;
}
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
base.WndProc (ref m);
switch(m.Msg)
{
case 0x83:
// Console.Write(m.Msg.ToString()+"/n");
// IntPtr hDC = jy_controls.DrawA.GetWindowDC(m.HWnd);
// System.Drawing.Graphics gs = System.Drawing.Graphics.FromHdc(hDC);
// System.Drawing.Image image = new System.Drawing.Bitmap("jylogo.ico");
// gs.DrawImage(image,new System.Drawing.Point(0,0));
break;
}
}
protected override void OnItemDrag(ItemDragEventArgs e)
{
base.OnItemDrag (e);
DoDragDrop(e.Item, DragDropEffects.Move);
}
ListViewItem curDropItem = null;
Color curColor;
protected override void OnDragOver(DragEventArgs drgevent)
{
base.OnDragOver (drgevent);
if(this.AllowDrop)
{
ListViewItem DropItem = this.GetItemAt(drgevent.X,drgevent.Y);
if(drgevent.Data.GetDataPresent(typeof(ListViewItem)))
{
ListViewItem myItem = (ListViewItem)(drgevent.Data.GetData(typeof(ListViewItem)));
if (DropItem != null && DropItem != myItem)
{
curColor = DropItem.BackColor;
DropItem.BackColor = Color.Red;
}
}
else
{
if (DropItem != null)
{
curColor = DropItem.BackColor;
DropItem.BackColor = Color.Red;
}
}
curDropItem = DropItem;
if(curDropItem != null)
{
curDropItem.BackColor = curColor;
}
}
}
protected override void OnDragDrop(System.Windows.Forms.DragEventArgs drgevent)
{
base.OnDragDrop (drgevent);
if(this.AllowDrop)
{
ListViewItem DropItem = this.curDropItem;
try
{
if (drgevent.Data.GetDataPresent(typeof(ListViewItem)))
{
ListViewItem myItem = (ListViewItem)(drgevent.Data.GetData(typeof(ListViewItem)));
if (DropItem != null && DropItem != myItem)
{
if(DragDropItem != null)
{
this.DragDropItem(myItem);
}
else
{
ListViewItem DragItem = myItem;
myItem.Remove();
this.Items.Add(DragItem);
}
}
}
else if(drgevent.Data.GetDataPresent(typeof(TreeNode)))
{
TreeNode item = (TreeNode)drgevent.Data.GetData(typeof(TreeNode));
if(DragDropItem != null)
{
this.DragDropItem(item);
}
else
{
ListViewItem litem = new ListViewItem();
litem.Text = item.Text;
litem.Tag = item.Tag;
this.Items.Add(litem);
}
}
else if(drgevent.Data.GetDataPresent(typeof(object)))
{
if(DragDropItem != null)
{
this.DragDropItem(drgevent.Data.GetData(typeof(object)));
}
else
{
ListViewItem litem1 = new ListViewItem();
litem1.Text = drgevent.Data.GetData(typeof(object)).ToString();
litem1.Tag = drgevent.Data.GetData(typeof(object));
this.Items.Add(litem1);
}
}
else
{
if(DragDropItem != null)
{
this.DragDropItem(drgevent);
}
}
}
catch{}
}
}
}
}