网上流传的“拖放文件”的方法,并不适用于基于对话框的程序。因为基于对话框的程序的Edit控件一般不是继承来的,而是在资源编辑环境中普通的添加上去的,那么当文件拖动到Edit控件中时,WM_DROPFILES是不能被响应的。
解决办法:
“去掉”Edit控件的AcceptFile属性,然后在CXXXDlg::OnInitDialog()中添加CWnd::DragAcceptFiles() ,这样你的主程序就可以响应文件拖放的消息了。注意,一定要去掉Edit控件的AcceptFile属性。
添加WM_DROPFILES消息:ON_WM_DROPFILES()
消息响应函数: afx_msg void OnDropFiles( HDROP hDropInfo)
void CXXXDlg::OnDropFiles( HDROP hDropInfo)
{
char DropFilePath[MAX_PATH] = {0};
//当第二个参数为-1时,DragQueryFile返回拖放文件的个数。拖放多个文件时需要
DragQueryFile(
hDropInfo,
0, // 拖放的第0号文件,即第一个文件。
DropFilePath,
MAX_PATH
);
//设置编辑框内容
CWnd* pWnd = GetDlgItem(IDC_EDIT1);
pWnd->SetWindowText(DropFilePath);
}
全部完。