原文地址:http://blog.163.com/huangbingliang@yeah/blog/static/94161399201041092339499/
在目标dialog关联的类的.h里添加
//注意控件和对话框属性都不要选Accept Files
afx_msg void OnDropFiles(HDROP hDropInfo);
void PreSubclassWindow() ;
相应的.cpp里添加
BEGIN_MESSAGE_MAP(Unrar, CDialog) ON_WM_DROPFILES()//这句话很重要 END_MESSAGE_MAP() void Unrar::PreSubclassWindow() { DragAcceptFiles( TRUE ); CWnd::PreSubclassWindow(); } void Unrar::OnDropFiles(HDROP hDropInfo){ this->UpdateData(TRUE); CRect rEdit; m_edit1.GetWindowRect(rEdit);//获得控件的坐标 POINT pos; ::GetCursorPos(&pos); //获得光标当前的屏幕坐标 //如果光标在edit控件中,则显示拖动的文件名,进行响应操作;否则就什么都不作 TCHAR cFileName[256]; UINT uFileCount, u; uFileCount = ::DragQueryFile(hDropInfo, -1, cFileName, sizeof(cFileName)); //拖拉的文件个数 if((pos.x > rEdit.left) && (pos.x < rEdit.right) && (pos.y < rEdit.bottom) && (pos.y > rEdit.top)) { for(u = 0; u < uFileCount; u++){ ::DragQueryFile(hDropInfo, u, cFileName, sizeof(cFileName)); //取得每个文件的文件名 m_edit1.SetWindowText(cFileName); //如果指针在edit1里的话那么就把路径在edit1里显示 } ::DragFinish(hDropInfo); } else{ for(u = 0; u < uFileCount; u++) { ::DragQueryFile(hDropInfo, u, cFileName, sizeof(cFileName)); //取得每个文件的文件名 m_edit2.SetWindowText(cFileName); 如果指针不在edit1里的话那么就把路径在edit2里显示 } ::DragFinish(hDropInfo); } }