为何我在ClassWizard中找不到对话框的WM_DROPFILES消息呢?
我试着自己来添加代码,不过在.cpp文件中添加消息映射部分的代码时不知该怎么写.
还请大家指教.谢谢.

解决方案 »

  1.   

    ON_MESSAGE(WM_DROPFILES,OnFunction)
      

  2.   

    http://dev.csdn.net/develop/article/29/29185.shtm
      

  3.   

    三、文件管理器拖放原理及实例这种方式的实质就是产生一个消息WM_DROPFILES。技术上没有什么难点,主要用到下面几个API函数:DragQueryFile、DragQueryPoint、DragFinish。它们的原型和注解分别如下:UINT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch)本函数用来取得拖放的文件名。其中,hDrop是一个指向含有被拖放的文件名的结构体的句柄;iFiles是要查询的文件序号,因为一次可能同时拖动很多个文件;lpszFiles是出口缓冲区指针,保存iFiles指定序号的文件的路径名,cch指定该缓冲区的大小。有两点值得注意,第一,如果我们在调用该函数的时候,指定iFile为0xFFFFFFFF,则DragQueryFile将忽略lpszFile和cch参数,返回本次拖放操作的文件数目;第二,如果指定lpszFile为NULL,则函数将返回实际所需的缓冲区长度。BOOL DragQueryPoint(HDROP hDrop, LPPOINT lppt);本函数用来获取,当拖放操作正在进行时,鼠标指针的位置。第二个参数lppt是一个指向POINT结构体的指针,用来保存文件放下时,鼠标指针的位置。窗口可以调用该函数以查询文件是否落在自己的窗口矩形中。void DragFinish(HDROP hDrop);当拖放操作处理完毕后需调用该函数释放系统分配来传输文件名的内存。首先,建立一个对话框工程,确保选中对话框的Accept Files属性。如果不选,也可以在窗口创建的时候(譬如OnCreate函数中)调用DragAcceptFiles(TRUE),效果是一样的。然后映射WM_DROPFILES消息。该消息处理函数原型如下:void OnDropFiles(HDROP hDrop),注意入口参数为HDROP型,它是一个结构体指针,所指向的结构体中包含了被拖放的文件的名称。接下来我们主要要完成两个动作:第一,通过调用DragQueryFile并指定其iFile参数为0xFFFFFFFF,得到本次拖放操作的文件数目;第二步,用一个循环依次取出各个文件名。示例如下:void CListCtrlEx::OnDropFiles(HDROP hDrop){        char   szFilePathName[_MAX_PATH+1] = {0};UINT  nNumOfFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); //得到文件个数        for (UINT nIndex=0 ; nIndex< nFileCount; ++nIndex)        {            DragQueryFile(hDrop, nIndex, szFilePathName, _MAX_PATH);  //得到文件名        }        DragFinish(hDrop);}