MSDN 2005 -> Win32 和 COM 开发 -> User Interface -> Windows User Experience -> Windows Shell -> Windows Shell -> Shell Programmer's Guide -> Shell Basics ->
2. 传输源如何创建数据对象
用户发起Shell数据传输时,传输源需要创建数据对象并载入数据,过程如下:
-
调用RegisterClipboardFormat为包含在数据对象中的每种格式获取有效的剪贴板格式值。CF_HDROP已经是有效的剪贴板格式,不需要再注册了。
-
对于每种将传输的格式,把相关数据放到全局存储对象中,或者创建可以通过其IStream或者IStorage接口访问数据的对象。IStream和IStorage接口通过标准COM技术创建。对于如何处理全局存储对象,见本文的How to Add a Global Memory Object to a Data Object节。
-
为每种格式创建FORMATETC和STGMEDIUM结构体。
-
实例化一个数据对象。
-
为每种支持的格式调用IDataObject::SetData方法,传入格式的FORMATETC和STGMEDIUM结构体,把数据载入到数据对象中。
-
对于剪贴板数据传输,调用OleSetClipboard把数据对象的IDataObject接口指针放置到剪贴板中;对于拖动传输,调用DoDragDrop发起拖动循环。放开数据,结束拖动循环时,IDataObject接口指针会被传递给放置目标。
经过这几步之后,数据对象就可以被传递给目标了。对于剪贴板数据传输,直到目标通过OleGetClipboard