VC实现类似qq聊天粘贴发送文件

功能描述:类似qq聊天对话框中可以粘贴来发送文件

步骤1: 截取粘贴消息,包括ctrl+V和右键选择粘贴

ctrl+v:

BOOL BaseChatWnd::PreTranslateMessage(MSG* pMsg)
{
switch (pMsg->message)
{

case WM_KEYDOWN:
{

 if (pMsg->wParam == 'V' ||
pMsg->wParam == 'v')
{
if (GetFocus()->GetSafeHwnd() == writeContent.GetSafeHwnd())
{

if(IsClipboardFormatAvailable(CF_HDROP))  //  如果是文件就发送
{
SendPasteFiles();
}
else
{
writeContent.Paste();
SetCurFont();
}
return TRUE;
}
}

}

default:
break;
}
return BLBaseDlg::PreTranslateMessage(pMsg);
}

右键粘贴:

通过消息映射响应(这里就只写关键的)

case ID__Paste:
if(IsClipboardFormatAvailable(CF_HDROP))  // min  如果是文件就发送
{
SendPasteFiles();
}
else
{
writeContent.Paste();// h1000 添加
SetCurFont();
}

步骤2:发送粘贴文件

// 粘贴发送文件
void ChatWithPerson::SendPasteFiles()
{
ASSERT(pSendFileWnd);
if (!pSendFileWnd)
return;


if(!::OpenClipboard(m_hWnd))
{
return;
}


//文件的个数
HDROP hDrop=(HDROP)GetClipboardData(CF_HDROP);
//HANDLE hDrop = GetClipboardData(CF_HDROP); 
UINT nNumOfFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); 


if (0 == nNumOfFiles)
{
return;
}


TCHAR cFilePathName[_MAX_PATH] = {0};


int isFileNum(0);
for ( UINT nIndex=0 ; nIndex< nNumOfFiles; ++nIndex )
{
DragQueryFile(hDrop, 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

}
::CloseClipboard();


if (0 == isFileNum)
return;

//  SendFile   detail     add code   here  ........


SetFocus();
}

上面代码SendPasteFiles获得了粘贴文件的路径cFilePathName,通过这个路径便可以建立发送端,具体发送文件过程,这里就不做说明了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值