您问的是什么问题,我怎么没看明白呢?
您如果安装了Photoshop,那么静止的图片文件自然可以在Photoshop中编辑呀,还有什么疑问呢?
这个问题我没有思路,关注中!
我想可能会在你的程序里发送消息给操作系统,这种消息和资源浏览器的应该是一样的,只后PS才能处理。
drag源项目,首先lisview设置如下属性
AllowDrop = true;
然后添加事件:ItemDrag,实现代码类似下面:
private void listView1_ItemDrag(object sender, ItemDragEventArgs e) {
if (this.listView1.SelectedItems.Count <= 0) return;
//获取图片的路径。
string item = this.listView1.SelectedItems[0].SubItems[1].Text;
//DoDragDrop需要传递一个IDataObject内类型的对象。
IDataObject obj2 = new DataObject();
obj2.SetData(DataFormats.FileDrop, new string[] { item });
this.listView1.DoDragDrop(obj2, DragDropEffects.Copy);
}
OK了。
之所以我会在DoDragDrop方法中传递一个上述类型的对象,以及设置DragDropEffects为Copy.
是查看了Paint.net的代码,Paint.net相当于一个drop对象。他有如下的代码。会去判断传递的数据类型,并且在类型符合的情况下,获取类型后,会设置Effect为copy.
我们在DoDragDrop方法中设置的DragDropEffects值在该出为drgevent的AllowedEffect属性值。AllowedEffect必须与Effect相同,这样才能正常的拖拽,否者鼠标会是一个禁止图标。
正是因为这样,我们要在DoDragDrop方法中设置DragDropEffects为Copy。
protected override void OnDragEnter(DragEventArgs drgevent)
{
if (Enabled && drgevent.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])drgevent.Data.GetData(DataFormats.FileDrop);
foreach (string file in files)
{
try
{
FileAttributes fa = File.GetAttributes(file);
if ((fa & FileAttributes.Directory) == 0)
{
drgevent.Effect = DragDropEffects.Copy;
}
}
catch
{
}
}
}
base.OnDragEnter(drgevent);
}
差不多就这样了。之后有时间看来可以写个这方面的日志。呵呵。
下面文章有详细的讲解和完整的示例代码
http://www.cnblogs.com/eaglet/archive/2009/01/06/1370149.html