一.基本概念
二.两种拖放方式 【程序编程相关:const修饰指针和引用释疑】
拖放,是指用鼠标拖动的方法,在不同程序的窗口之间.同一个程序的不同窗口之间或同一程序同一窗口的不同控件之间,进行移动.复制与粘贴等操作的技术.拖放操作是在操作系统的帮助下完成的.被拖动的对象首先向操作系统注册它使用的数据格式,并按指定的数据格式提供数据,拖放操作结束时,接收拖放的窗口按指定的数据格式提取有关数据,并根据提取的数据生成相应的对象. 【推荐阅读:快速初始化内存(1)】三.文件管理器拖放原理及实例 【扩展信息:C++中的mutable和const】
拖放有两种类型:ole拖放与文件管理器拖放.这两种方式是完全不同的机制.文件管理器拖放只能处理文件名,通过映射目的窗口的wm_dropfiles消息,窗口就可以收到拖放进来的文件名.ole拖放则更加通用一些,它允许你拖放可同时被保存在剪贴板上的任何数据.本文首先介绍文件管理器拖放,然后再介绍ole拖放,最后给出一个用ole实现的,支持文件拖放操作的增强列表控件clistctrlex. 这种方式的实质就是产生一个消息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); 当拖放操作处理完毕后需调用该函数释放系统分配来传输文件名的内存.... 下一页