给MFC程序添加文件拖放处理

转载 2012年03月27日 09:52:04
程序支持文件拖放会使程序使用起来更加方便。

  

  当我们从shell(window的文件浏览器)中拖入一个文件到应用程序窗口时,windows会发生一个消息WM_DROPFILES给程序,支持文件拖放操作的本质就是程序要适当地处理这个消息。并不是所有程序都可以接受文件拖放消息,只有具有WS_EX_ACCEPTFILES窗口属性的窗口,才能收到这条消息。当使用WIN32 API进行编程时,就要在创建这个窗口时加上这个扩展属性。

  如果是MFC程序,则可以在创建程序时,在向导中选择窗口的Accept Files属性,也可以在窗口创建的时候(比如OnCreate函数)调用窗口的成员函数DragAcceptFiles(TRUE),效果是一样的。

在BEGIN_MESSAGE_MAP中加入 ON_WM_DROPFILES()

  支持文件拖放时,主要会涉及到以下三个API函数:DragQueryFile、DragQueryPoint、DragFinish

  它们的原型和注解分别如下:   

 

       UINT DragQueryFile(HDROP hDrop,UINT iFile,LPTSTR lpszFile,UINT cch)  

  这个函数用来取得拖放的文件名。其中,hDrop是一个指向含有被拖放的文件名的结构体的句柄(WIN32 API编程时,这个句柄就是WM_DROPFILES消息的wParam参数,而MFC编程时,则可以从消息处理函数的参数直接得到);iFiles是要查询的文件序号,因为一次可能同时拖动很多个文件;lpszFiles是出口缓冲区指针,保存iFiles指定序号的文件的路径名,cch指定该缓冲区的大小。注意,第一,如果我们在调用该函数的时候,指定iFile为0xFFFFFFFF,则DragQueryFile将忽略lpszFile和cch参数,返回本次拖放操作的文件数目;第二,如果指定lpszFile为NULL,则函数将返回实际所需的缓冲区长度。

        BOOL DragQueryPoint(HDROP hDrop, LPPOINT lppt);        

  这个函数用来获取,当拖放操作正在进行时,鼠标指针的位置。第二个参数lppt是一个指向POINT结构体的指针,用来保存文件放下时,鼠标指针的位置。窗口可以调用该函数以查询文件是否落在自己的窗口矩形中。   

        void DragFinish(HDROP hDrop);     

  当拖放操作处理完毕后需调用该函数释放系统分配来传输文件名的内存。   

  要处理WM_DROPFILES消息时,可以使用向导给对应的窗口添加消息处理函数,该消息处理函数原型是:void OnDropFiles(HDROP hDrop):

  以下是该函数处理的示例代码:

Cpp代码
  1. void CDialogDropFileDlg::OnDropFiles(HDROP hDropInfo)   
  2. {   
  3.     // TODO: 在此添加消息处理程序代码和/或调用默认值  
  4.     char szFilePathName[_MAX_PATH+1]    =    {0};      
  5.   
  6.         //得到文件个数     
  7.     UINT nNumOfFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);   
  8.   
  9.     for (UINT nIndex=0 ; nIndex< nNumOfFiles; ++nIndex) {   
  10.         // 得到文件名  
  11.          DragQueryFile(hDropInfo, nIndex, (LPTSTR)szFilePathName, _MAX_PATH);   
  12.         // 有了文件名就可以想干嘛干嘛了 :P  
  13.          AfxMessageBox((LPCTSTR)szFilePathName);   
  14.      }      
  15.   
  16.      DragFinish(hDropInfo);     
  17.   
  18.      CDialog::OnDropFiles(hDropInfo);   
  19. }  

相关文章推荐

MFC程序对文件的处理方法

对文件的处理是MFC程序设计中非常常见的应用。本文就以实例形式做一简单叙述。具体方法如下: 1.CFileDialog的应用www.111ce.com 格式如下: CFi...

MFC程序打包为安装文件方法

用visual studio 2010进行打包,2005、2008都差不多是一样的操作。详图如下。 1.打开visual studio 2010,新建一个安装项目,名称为InstallTest,...

【转】在MFC程序中调用或打开其他文件方式

原文出处:http://blog.csdn.net/b_h_l/article/details/7717744

MFC程序的与window程序的区别及需要的库和头文件

MFC程序也是Windows 程序,         所以应该有一个WinMain,但在程序进入点之前,还有一个全局对象theApp, 这是所谓的应用程序对象。 当操作系统将程序加载并激活的时候,这...

MFC程序的消息处理顺序

MFC应用程序中处理消息的顺序       1.AfxWndProc()      该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc       2....

MFC文件拖放Demo

  • 2013-09-16 14:43
  • 11KB
  • 下载

caffe框架在添加自己的MFC程序(上)

自从深度学习火起来以后,搞计算机视觉的不了解一点深度学习的知识都不还意思。以前的人脸识别还是LBP+svm的时代,突然出现了一个深度学习,大家都努力的奋斗。为了响应号召,我们利用cnn训练自己的网络然...

给MFC程序添加背景图片

1、添加背景图片到“Bitmap”资源里。方法为“插入——资源”,如果还没有Bitmap,则新建一个Bitmap,否则选择资源        类型为“Bitmap”后“引入”想要插入的背景图片,我加...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)