鼠标拖入文件

 


  本文要讨论的功能,是在某一程序运行之后,如何直接将其可以操作的文件拖进程序中打开。

 

第一步:添加消息声明,消息映射以及消息响应函数

        afx_msg void OnDropFiles(HDROP hDropInfo) ;

       ON_MESSAGE(WM_DROPFILES,OnDropFiles)

     void CBitmapDlg::OnDropFiles(HDROP hDropInfo)

    {

   }

   如此,则可以对由鼠标拖入的文件进行响应,当然要想作出响应,还得自己完成响应函数

第二步:完成响应函数

      只需调用一个函数:UINT  DragQueryFile(HDROP hDrop ,UINT  iFile ,LPSTR  lpszFile ,UINT  cch);

   参数说明:

       hDrop:存放所拖放文件名称的数据结构的句柄,也就是文件名缓冲区的句柄

      iFile:文件索引编号(用于指明所要查询文件的序号, 如果拖进多个文件,则索引编号从零开始);

                   如果iFile值为 0xFFFFFFFF 时,返回的是拖曳到窗体上的文件的个数;

                    如果iFile值在0和拖拽文件总数之间时,DragQueryFile拷贝与文件名存储缓冲区大小适应的文件名称到缓冲区中。

      lpszFile: 函数返回时,用于存储拖拽文件名称的缓冲区指针;

                      文件名称是一个以空终止“\0”结尾的字符串;

                       如果此参数是NULL,DragQueryFile函数返回拖拽的文件数目;

                      函数DragQueryFile得到的文件名,是带完整路径的文件名。

     cch:存储拖拽文件名称缓冲区的大小,即lpszFile指针所指缓冲区的字符数。

void CBitmapDlg::OnDropFiles(HDROP hDropInfo)
{	
	char filePath[MAX_PATH];
	int iNum = DragQueryFile(hDropInfo, 0xFFFFFFFF, filePath, MAX_PATH);   //获取拖动文件的个数
	if(iNum >1)
	{
//		MessageBox("拖入文件数多余一个,只分析第一个文件!", "Tips");
	}
	DragQueryFile(hDropInfo,0,filePath,MAX_PATH);    //获取第一个拖动文件的路径
	m_strBmpPath = filePath;
	UpdateData(FALSE);
	DragFinish(hDropInfo);   //结束拖放,释放内存
	CDialog::OnDropFiles(hDropInfo);
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值