Win32程序接收双击和拖放文件

要实现如题的功能,其实很简单,首先我们简单地看一下WinMain函数的作用.


WinMain是一个函数,该函数的功能是被系统调用,作为一个32位应用程序入口点。WinMain函数应初始化应用程序,显示主窗口,进入一个消息接收一发送循环,这个循环是应用程序执行的其余部分的顶级控制结构。


其中WinMain中有一个参数为LPSTR lpCmdLine,一个以空结尾的字符串,其作用就是向应用程序传递指定的命令行,也就是在双击一个txt文件时,系统会通过lpCmdLine向默认打开程序传递你双击文件的全路径,这时记事本就可以显示指定路径下文件的内容.由此可见,只要你实现对自身设计的格式的读方法,通过lpCmdLine就可以实现单击接收了.很简单吧,这里就不再多说了.


实现拖放文件也不难,他有两种模式.一种是在程序已经在运行的情况下实现,另一种是在程序尚未运行时实现,而后一种的情况可以看成是通过鼠标拖动文件到应用程序的执行文件中,打开文件,其实现跟双击接收的情况是一样的,这里不多说了.这里主要说的是前一种.其实其实现也是非常简单的,原理是通过消息处理完成.我们可以通过处理消息WM_DROPFILES,然后通过调用DragQueryFile来实现拖放接收.那么我们先了解一下这个函数:


MSDN的解释如下:

Syntax

UINT DragQueryFile(
  __in   HDROP hDrop,
  __in   UINT iFile,
  __out  LPTSTR lpszFile,
  UINT cch
);

Parameters

hDrop [in]

Type: HDROP

Identifier of the structure that contains the file names of the dropped files.

iFile [in]

Type: UINT

Index of the file to query. If the value of this parameter is 0xFFFFFFFF, DragQueryFile returns a count of the files dropped. If the value of this parameter is between zero and the total number of files dropped,DragQueryFile copies the file name with the corresponding value to the buffer pointed to by thelpszFile parameter.

lpszFile [out]

Type: LPTSTR

The address of a buffer that receives the file name of a dropped file when the function returns. This file name is a null-terminated string. If this parameter isNULL,DragQueryFile returns the required size, in characters, of this buffer.

cch

Type: UINT

The size, in characters, of the lpszFile buffer.

也就是说,当第二个参数为0XFFFFFFFF时,可以忽略后面两个参数,设置为null和0就可以了,其返回值为被拖放到进程的文件数目

UINT nFileCnt = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);

当第二个参数为0到nFileCnt-1,即文件索引时,lpszFile返回的是文件全路径,cch可以设置为MAX_PATH.

下面是消息处理中接收拖放文件的片段

case WM_DROPFILES:

{

char szFileName[MAX_PATH];

UINT nFileCnt = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);

//当你想获取第nFile-1个(以0为起始索引)文件时.

if(DragQueryFile((HDROP)wParam, nFileCnt - 1, szFileName, MAX_PATH))

{

//处理文件方法..自己喜欢怎么干就怎么干吧

}

DragFinish((HDROP)wParam);

}

这样就完成了,没有难度的说......(不过哪里用错了,求大神指点).


你可能感兴趣的:(function,File,null,buffer,Path,structure)