最近在VS2010上开发一个有拖拽文件获取文件名功能的程序,碰到了问题。查了很多资料,按正常的步骤添加拖拽功能缺不能工作。
一.按正常的步骤添加拖拽功能:
- 在对话框上放置接收拖拽文件的控件(以ListBox为列)。
- ListBox设置属性Accept Files = true;
- ListBox添加类(列如取名为CListDome),在VS2010中基础类只能选择CDialogEx,没有CListBox能选。
- 添加变量,变量的类型是CListBox。
- 在添加的类中添加WM_DROPFILES处理程序。
二.下面是关键的地方:
1. 把类的基类从CDialogEx改成CListBox。
2. 把变量的类型CListBox改成类名CListDome,OK。
在研究这个问题时发现下面一些有趣的问题。
VS2010的控件属性面板中,属性Accept Files拼写错了,成立Acccept Files。
拖拽到EditBox或ListBox时WM_DROPFILES消息处理有所差别,EditBox父对话框不会再次截获WM_DROPFILES消息,而ListBox却会。
对话框上的Accept Files不需要设置成ture,不然Demo文件拖到哪里都显示+号,感觉好奇怪,现在好些软件都做成这样。
DEMO文件下载:https://download.csdn.net/download/u010304610/10713367