我是想说从文件系统中拖动文件的图标到我们的应用程序中,主要是为了与在两个ListCtrl之间拖动Item相区别。
我发现具体实现方法可能很多,但大体可以分为两类:一类是用ListCtrl所属的对话框或窗口来处理,一类是由ListCtrl自己处理拖动。
通过所在窗口处理是这样实现的。首先ListCtrl所在窗口必须允许处理拖动文件,就是必须具有Accept File风格,同时ListCtrl控件不能具有该风格,然后做消息映射,可以用ON_MESSAGE()映射到自己定义的任何函数上,也可以用ON_WM_DROPFILES()宏,这时就必须重载OnDropFiles(HDROP hDropInfo) 并在其中做相应处理,比如增加图表Item之类。
另一种就是由ListCtrl控件自己处理,这种我还没完全搞清楚,在codeproject上看到过例子,使用了这一方法。我觉得,ListCtrl控件原本可以处理文件图标拖动的,只不过需要我们继承原始的CListCtrl,从而重载相应的函数(应该是OnDropFiles(HDROP hDropInfo) ),这样应该可以。但是codeproject上的例子似乎还不只是这样。应该继续研究。
但是已经掌握了一种方法之后,人们往往就会产生惰性,懒得去寻找新的方法了,我觉得如果只是为了处理文件图标拖动也没有必要去建一个新类,但如果还要具备别的功能,就很有必要了。