描述:类似qq使用中的文件拖拽到聊天,实现传输文件
1、C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winuser.h 文件中要有
#define WM_DROPFILES 0x0233
2、窗口属性中Accept Files要为true。
3、消息映射和响应
ON_WM_DROPFILES()
afx_msg void OnDropFiles(HDROP hDropInfo);
void ChatWithPerson::OnDropFiles(HDROP hDropInfo)
{
//文件的个数
UINT nNumOfFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
if (0 == nNumOfFiles)
{
return;
}
TCHAR cFilePathName[_MAX_PATH] = {0};
int isFileNum(0);
for ( UINT nIndex=0 ; nIndex< nNumOfFiles; ++nIndex )
{
DragQueryFile(hDropInfo, nIndex, cFilePathName, _MAX_PATH); //得到文件名
if (FILE_ATTRIBUTE_DIRECTORY == GetFileAttributes(cFilePathName))
{// 如果是文件夹
if (nNumOfFiles - 1 == nIndex)
{
CPublicFuncManage obj;
obj.ShowMessageBox(_T("不能传送文件夹!\r\n"),BLMsgBox::ERROR_NULL,this);
return;
}
continue;
}
// 以独占方式打开, 如果被占用, 打开失败
HANDLE hFile = CreateFile(cFilePathName, GENERIC_READ,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if (INVALID_HANDLE_VALUE == hFile)
{
DisplayPromptMsg(_T("该文件正在使用中,不能传送!\r\n"));
continue;
}
CloseHandle(hFile);
// 以独占方式打开, 如果被占用, 打开失败, END
}
DragFinish(hDropInfo);
SetFocus();
}