很早之前,写测试的例子的时候,会把路径写死,现在感觉真傻。
现在我最起码能想到3中方法。
1.CEdit GetWindowText(手动拷贝路径)
2.SHBrowseForFolder(让用户浏览)
3.支持文件拖动(用户把文件拖到编辑框上,取得文件路径)
今天介绍第三种办法。
1.资源文件中把 Accept Files设为true。
2.扩展CEdit,响应 OnDropFiles
// XX.h
afx_msg void OnDropFiles( HDROP hDropInfo); //添加消息处理
// .cpp
BEGIN_MESSAGE_MAP(CDropFileEdit, CEdit)
ON_WM_DROPFILES()
END_MESSAGE_MAP()
void CDropFileEdit::OnDropFiles( HDROP hDropInfo)
{
// TODO: Add your message handler code here and/or call default
//取得被拖动文件的数目
int DropCount=DragQueryFile(hDropInfo,-1,NULL,0);
for ( int i=0;i<DropCount;i++)
{
int NameSize=DragQueryFile(hDropInfo,i,NULL,0);
HANDLE hHeap=GetProcessHeap();
char *pName=( LPSTR )HeapAlloc(hHeap,HEAP_ZERO_MEMORY,NameSize++);
if (pName==NULL)
{
MessageBox( "给文件名分配暂存空间时出错!" , "错误信息" ,MB_ICONERROR);
return ;
}
//取得第i个拖动文件名所占字节数
DragQueryFile(hDropInfo,i,pName,NameSize);
//把文件名拷贝到缓冲区
// m_Dialog_List.AddString(pName);
//文件名加入listbox中显示
this ->SetWindowText(pName);
HeapFree(hHeap,HEAP_ZERO_MEMORY,pName);
//释放缓冲区
}
CEdit::OnDropFiles(hDropInfo);
}
3.用扩展的CDropFileEdit 定义个变量,和资源中的Edit关联。
具体看资源里的代码 ulim.rar
4.支持拖动也是有缺陷的,用管理员权限运行,却不支持拖动,我晕倒。