window响应拖拽文件操作
window响应拖拽文件操作
1.首先调用DragAcceptFiles,让控件或者窗体支持文件拖动操作
函数功能:用来为拖放文件作初始化。
函数原型:
void DragAcceptFiles( HWND hWnd, //指明目标窗体的句柄 BOOL fAccept //为True时 则hWnd所指向的窗体可以接受拖放的文件. );
2.消息事件中响应拖拽操作(WM_DROPFILES), 调用函数DragQueryFile和DragFinish
[1].DragQueryFile
函数功能:用来查下拖放文件的文件名。
函数原型:
UINT DragQueryFile(
HOROD hDrop,
UINT iFile,
LPTSTR lpszFile,
UINT cch,
);
参数说明:函数其本身的返回值是一个无符号整数;
hDrop是一个文件名缓冲区句柄(存放所拖放文件名称的数据结构),需要从windows消息WM_DROPFILES中获得;
iFile指明查询文件序号,取值0xFFFFFFFF时,函数返回值为所拖放文件数目,其他取值(0~文件拖放总数),对应文件名存放lpszFile缓冲区;
lpszFile取值为NULL时,函数返回对应文件名的长度;
cch决定缓冲区的长度;
[2].DragFinish
void DragFinish(HDROP hDrop)
使用DragFinish函数告诉windows拖放操作结束,使其释放文件名缓冲区,参数hDrop与DragQueryFiles函数中一样,也由windows消息WM_DROPFILES中获得;
3.例子:
LRESULT CALLBACK CWinEventsWin32::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { //......; //代码省略 switch (uMsg) { case WM_CREATE: //......; //代码省略 DragAcceptFiles(hWnd, TRUE);//接受拖放事件设置 break; case WM_DROPFILES: { HDROP hdrop = (HDROP)wParam; char sDropFilePath[MAX_PATH+1]; int iDropFileNums = 0; iDropFileNums = DragQueryFile(hdrop, 0xFFFFFFFF, NULL, 0);//获取拖放文件个数 for (int i=0; i<iDropFileNums; i++)//分别获取拖放文件名(针对多个文件操作) { DragQueryFile(hdrop, i, sDropFilePath, sizeof(sDropFilePath)); } //DragQueryFile(hdrop, 0, sDropFilePath, MAX_PATH);//分别获取拖放文件名(针对单个文件操作) DragFinish(hdrop);//释放文件名缓冲区 } break; default: break; } //......; //代码省略 }
ps:本博文只用于日常备注及学习交流,请勿用于任何商业用途,涉及网摘等资料如有侵犯原作者权利,请联系确保及时更正!