<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Free2000fly&#039;s Official Blog &#187; OLE Drag and Drop Tutorials</title>
	<atom:link href="http://blog.tinybrowser.net/archives/category/ole-dragdrop/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.tinybrowser.net</link>
	<description>Free2000fly 个人博客</description>
	<lastBuildDate>Fri, 06 Jan 2012 21:12:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>OLE Drag and Drop (6) 实现 Drop 目标对象</title>
		<link>http://blog.tinybrowser.net/archives/699</link>
		<comments>http://blog.tinybrowser.net/archives/699#comments</comments>
		<pubDate>Thu, 04 Feb 2010 09:23:09 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[OLE Drag and Drop Tutorials]]></category>
		<category><![CDATA[OLE Drag and Drop]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=699</guid>
		<description><![CDATA[Many thanks to Davide Chiodi from Italy who has very kindly converted the drop-target code into a Pure C implementation &#8211; download now! Catch22OLEpart6 欢迎你到OLE拖放操作的第六章！这里将着重于一个实现了drop-target的小程序，这就意味着我们的程序能够接收拖到它上面的对象（文件、图片、文本）了。 我们实现一个IDropTarget的COM接口允许OLE程序拖动数据到我们的程序上；这里仅仅是一个简单的EDIT控件，所以他将CF_TEXT数据作为目标。 成为一个“Drop Target” 为了时窗口可以接收拖放操作的数据，窗口必须注册为drop目标；有一个OLE的API调用RegisterDragDrop来完成这个事情，函数的原型是： 第一个参数是窗口的HANDLE，这个窗口是拖动的目标窗口；第二个参数是一个指向IDropTarget COM对象的指针，COM/OLE运行时将在拖放操作的过程中调用这个方法。 同样有一个OLE API调用来将window从拖放操作中删除： 我们所要做的就是在窗口创建的时候调用RegisterDragDrop，在窗口销毁的时候调用RevokeDragDrop。在我们调用RegisterDragDrop之前，我们需要构造一个COM对象来支持IDropTarget接口。 IDropTarget 接口 IDropTarget接口相对比较简单，有四个函数需要实现，当然，也要实现IUnknown接口，不过我们前面已经介绍了。 IDropTarget 方法 描述 DragEnter 判断是否可以接受一个拖操作，以及接受之后的效果 DragOver 提供通过 DoDragDrop 函数执行的目标反馈 DragLeave 导致一个 drop 目标挂起它的反馈行为. Drop 数据放进目标窗口 这些函数都由 COM/OLE 运行时在一个对象被拖到我们注册窗口的时候来调用。就象上表显示的一样，每个函数都有不同的任务，我们需要做的就是实现这些函数。 [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/699/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OLE Drag and Drop (5) Drop 源</title>
		<link>http://blog.tinybrowser.net/archives/697</link>
		<comments>http://blog.tinybrowser.net/archives/697#comments</comments>
		<pubDate>Thu, 04 Feb 2010 09:22:16 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[OLE Drag and Drop Tutorials]]></category>
		<category><![CDATA[OLE Drag and Drop]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=697</guid>
		<description><![CDATA[Many thanks to Davide Chiodi from Italy who has very kindly converted the drop-source code into a Pure C implementation. 欢迎来到OLE拖放旅程系列的第五部分，我们机会到了OLE拖放实现的最后阶段，现在需要做的事情就是实现IDropSource和IDropTarget接口；一般我们完成这些，我们就可以在任何程序中添加拖放操作了。 本部分的目的在于实现一个用作拖放源的简单程序，它不能接收任何拖放的数据，但这不要紧，因为我们能使用任何平常支持拖放操作的windows程序（例如：WordPad）来测试，程序就是一个windows的Edit控件，它是子类化的，且支持拖操作。 这个子类的细节在这里不讨论，但源码可以很清晰的说明这个任务。 成为一个拖放的源对象 初始化一个拖放操作很简单，只要调用DoDragDrop这个API就足够了。 一旦你调用这个AIP，OLE运行时就代表你的程序来接管并处理所有必要的鼠标和键盘windows消息，因此你基本上将控制权在调用这个函数的时候交给了OLE。 前两个参数是COM接口，一个是IDataObject-我们前面已经介绍了这个接口。 第三个参数是一个DWORD值，它表示源允许的拖动效果，其以位掩码的方式给出。这些效果是DROPEFFECT_XXX值，通常是DROPEFFECT_MOVE和DROPEFFECT_COPY的联合。如果你想仅仅允许从我们的源复制数据，那么我们应该就指定DROPEFFECT_COPY。 最后一个参数是指向DWORD的指针。该值在DoDragDrop返回的时候可以访问，包含OLE期望源对象执行的效果和动作，例如：用户选择移动还是复制数据？ 执行拖放操作的代码实际上分成三步：首先我们需要写一个小的功能函数叫做StringToHandle，它转换一个char*字符为HGLOBAL，从而我们可以在OLE中使用： StringToHandle完全不执行错误检查，因此这是你的责任；下一步是准备拖放操作使用的数据： 紧接着就是创建两个拖放操作的COM接口：IDropSource和IDataObject。我们在前面的旅程中实现了CreateDataObject，马上会实现CreateDropSource： 在创建好IDataObject和IDropSource之后就可以调用DoDragDrop了： 最后一件事情就是清除所有我们使用过的资源，首先删除我们使用的两个COM接口，然后删除包含我们文本的HGLOBAL内存缓冲区。 什么时候调用 DoDragDrop 方法 知道了怎么样初始化拖放操作非常好，但真正重要的是理解将上面的代码放到你程序的什么位置？ 因为拖放操作是基于鼠标的，它通常在处理windows鼠标消息的时候被初始化，如果你在支持拖放操作的程序中测试（例如WordPad），你会观察到RichEdit控件有下面的行为： 当鼠标移动过选中的文本，它的光标形状变成箭头 当按下左键的时候，被选择的不会被删除，且设置内部状态来指示可能要开始拖放操作 当鼠标被第一次移动（并且内部状态指示左键一直按在被选中的文本区域中），拖动操作开始。 在这个时候，OLE接管并处理所有鼠标消息，直到操作完成 然而，如果左键被释放了，或者鼠标根本没有移动，RichEdit选择部分被清除。 这些行为在C或C++中实现非常简单，对于我们的子类化的控件，可能是这样： IDropSource 接口 IDropSource 是拖放操作中最简单的接口，除了 IUnknown 函数外，它仅仅包含两个需要实现的函数： IDropSource 方法 描述 QueryContinueDrag [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/697/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OLE Drag and Drop (4) 枚举 FORMATETC</title>
		<link>http://blog.tinybrowser.net/archives/695</link>
		<comments>http://blog.tinybrowser.net/archives/695#comments</comments>
		<pubDate>Thu, 04 Feb 2010 09:21:18 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[OLE Drag and Drop Tutorials]]></category>
		<category><![CDATA[OLE Drag and Drop]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=695</guid>
		<description><![CDATA[本章注重于实现一个暴露 IEnumFORMATETC 接口的 COM 对象，这里有两部分代码可以下载。第一包含一个完整的通用的 IEnumFORMATETC 实现，你可以将它用到你的程序中。另一部分代码是一个叫做 IDataObject Viewer 的所有代码。这是 PlatformSDK 同名程序的替代品，它是一个怎么样使用 IEnumFORMATETC 接口的基本介绍，而不是写这个接口。更重要的是，它在调式 OLE 拖放代码是非常有用，你可以拖动任何格式的 IDataObject 到它上面，它会显示显示数据包含的可用格式。 IEnumFORMATETC 接口在开始拖放时经常不会注意到，在许多情况下它是不必要的，但为了你的 IDataObject 可以在所有条件下保证 100% 工作，提供该接口的完整实现是必要的。 IEnumFORMATETC 方法 描述 Next 返回枚举中的下一个 FORMATETC 结构体. Skip 跳过指定数量的FORMATETC structures (例如，不返回他们). Reset 返回枚举的开始状态. Clone 返回与当前结构相同的 IEnumFORMATETC 接口, 并且有相同的低层状态. 下图应该可以能够帮助你描述IEnumFORMATETC接口： 枚举包含3项，枚举索引初始化在第一项（索引是0）。 Next方法在索引0时返回第一个FORMATETC结构，并且枚举指针指向索引1 Skip方法以参数2来调用，跳过两个位置，到达枚举的尾部（索引3）。 Reset方法返回到索引的开始（索引0）。 IEnumFORMATETC 实际上非常简单，仅仅需要实现四个方法： 构造一个 IEnumFORMATETC 对象 IEnumFORMATETC 最复杂的事情是创建对象，在这时候实现 COM [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/695/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OLE Drag and Drop (3) 实现 IDataObject</title>
		<link>http://blog.tinybrowser.net/archives/693</link>
		<comments>http://blog.tinybrowser.net/archives/693#comments</comments>
		<pubDate>Thu, 04 Feb 2010 09:20:18 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[OLE Drag and Drop Tutorials]]></category>
		<category><![CDATA[OLE Drag and Drop]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=693</guid>
		<description><![CDATA[上一章我们着重介绍了怎么样使用 OLE 和 IDataObject 来访问 windows 粘贴板。本章主要实现一个 IDataObject 接口，然后使用我们完成的数据对象来存储文本“Hello World”到粘贴板中。 创建一个COM接口-IDataObject 为了创建一个COM对象，我们需要定义一个实现所有这些函数的C++类，并且让COM的虚函数表为我们自动包含，我们使用C++类继承： 上面列出了所有IDataObject成员，包括IUnknown接口成员，这是因为我们现在需要实现整个COM对象，因此每个成员必须正确的包含。 由于IUnknown函数我们在前面已经介绍了，我们继续介绍IDataObject函数。有些好的消息，同时也有些坏的消息；好的消息是，不是所有饿函数都需要实现，在IDataObject的9个函数中，我们仅仅需要实现3个来支持OLE的拖放操作，因此显著节省了我们的工作量。 坏的消息是：一般我们已经实现了IDataObject方法，我们需要实现完全独立的COM接口-IEnumFORMATETC接口。然而到这步还有很大的距离，因此让我们以一个简单分配新IDataObject的实例作为一个开始。 构造IDataObject IDataObject的主要任务是允许一个消费者查询数据，这些查询从QueryData或EnumFormatEtc调用来发起的，因此，IDataObject需要知道存储什么样的数据格式，并且在消费者需要数据的时候，它能够提供。 我们因此需要找到一些办法来以FORMATETC结构的形式用真正的数据片来组装IDataObject且说明数据是什么。 IDataObject在C++类构造函数的时候组装，为了更弹性，可能需要添加内部帮助程序来执行这个任务，但对于我们简单实现仅在构造函数中使用。 构造函数执行两个重要的任务，首先是初始化COM对象引用记数为1。我看到过许多不正确的COM代码，他们初始化记数为0，COM规约明确地声明，一个COM对象必须以“1”作为生命周期的开始，如果你记得，一个记数为0的COM对象应该被删除，因此它应该从不应该被初始化为这个值。 第二个任务是在类构造函数中做一个私有的FORMATETC和STGMEDIUM的副本。数据对象不是每个STGMEDIUM结构体内部的所有者，它纯粹是引用并且在请求调用GetData的时候复制数据。 创建IDataObject对象 现在我们有一个定义良好的IDataObject构造函数，我可以写一个包装函数来隐藏类的细节： 现在创建一个IDataObject变的非常简单： 许多IDataObject的实现包含许多接口内部执行内存分配的程序指定编码；在这个实现后面的思想是可以提供一个用于各种程序的通用IDataObject。好了，在创建数据对象之前有点工作需要做就是创建FORMATETC和STGMEDIUM结构，但这很容易被隔离，并且不会污染接口编码。 IDataObject::QueryGetData 该成员函数在某程序想检查IDataObject看是否包含指定类型的数据时候调用。一个指向FORMATETC结构的指针作为一个参数，且IDataObject::QueryGetData来检查这个结构且返回一个值来指示请求的数据是否可用。 这个例子中的QueryGetData函数非常简单，我们放弃私有协助函数-LookupFormatEtc的所有工作： 上面的函数尽量在我们数据对象的可用结构中查找一个与指定FORMATETC结构匹配的对象，如果找到一个匹配的，就简单的返回相应m_pFormatEtc数组的索引，如果找不到，返回-1表示一个错误。 注意，在if从句中的位与操作符： AND操作符用在这里是因为FORMATETC::tymed成员实际上是一个位标志，它能够包含不止一个值；例如：QueryGetData的调用者可以完全指定一个FORMATETC::tymed值（TYMED_HGLOBAL&#124;TYMED_ISTREAM）就意味着你支持HGLOBAL或IStream吗？ IDataObject::GetData GetData函数和QueryGetData有许多相似之处，除了如果支持请求的数据格式，它必须返回指定的存储类型。 同样要调用内部协助函数LookupFormatEtc来检查是否支持请求的数据格式，如果支持，相应的STGMEDIUM数据被复制到调用者提供的结构。 注意，现在调用DupGlobalMem程序，这是一个协助函数，它返回指定HGLOBAL内存的HANDLE的副本，并且必须返回部分，因为每个GetData调用都要求一个新的数据副本。 我们需要同样的程序来支持TYMED_xxx存储类型，但现在我们设想实现的支持格式是IStream。 IDataObject::EnumFormatEtc 这是最后需要自己动手的成员，不幸的是这个成员函数实现如此简单，但也要求我们写IEnumFORMATETC对象。 看到上面的代码，你会提到SHCreateStdEnumFmtEtc这个API调用，它能够代表我们创建IEnumFORMATETC接口，不幸的是，这个API仅仅在WIN2K上可用，因此，我们需要提供其他创建IEnumFORMATETC对象。 因此下面的旅程中，我们将提供一个CreateEnumFormatEtc的完整实现，来代替Shell API调用。 不支持的 IDataObject 函数 仍然有一些IDataObject函数需要实现，而同时每个函数必须是一个有效的程序，有个简单的办法可以指定给OLE，我们不支持这些拖放操作以外的函数。 IDataObject::DAdvise、IDataObject::EnumDAdvise和IDataObject::DUnadivise函数简单的返回OLE_E_ADVISENOTSUPPORTED。 GetDataHere只需要实现IStream和IStorage接口来支持数据对象，在我们的例子中，我们只支持HGLOBAL数据，因此返回DATA_E_FORMATETC是一个明智的选择。 SetData和GetCanonicalFormatEtc也只要简单的实现，本例中可以返回E_NOTIMPL值，即使我们返回错误的值，一个GetCanonicalFormatEtc记名票据，输出的FORMATETC结构ptd成员应该是0。 添加数据到粘贴板 好了，这里有一个简单那的程序用来通过OLE和数据对象来添加“Hello World”到Windows的粘贴板。 不幸的是这个程序不能工作，因为我们还没有实现IEnumFORMATETC和CreateEnumFormatEtc函数。 Catch22OLEPart3 dataobj Coming [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/693/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OLE Drag and Drop (2) OLE 数据传输</title>
		<link>http://blog.tinybrowser.net/archives/691</link>
		<comments>http://blog.tinybrowser.net/archives/691#comments</comments>
		<pubDate>Thu, 04 Feb 2010 09:19:07 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[OLE Drag and Drop Tutorials]]></category>
		<category><![CDATA[OLE Drag and Drop]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=691</guid>
		<description><![CDATA[欢迎来到OLE拖放指南第二部分；本部分的目的在于解释在OLE环境中，程序之间怎么样表示和传输数据。 OLE数据传输的核心是IDataObject COM接口，一个IDataObject提供从一个程序到另一个程序传输和访问数据的方法。最通用的OLE数据传输是窗口粘贴板，当然也有拖放。IDataObject是一到多个数据的有效的COM包装。 在我们调查IDataObject任何细节之前，两个重要的数据结构你必须熟悉：FORMATETC和STGMEDIUM接口，他们用来描述和存储OLE数据。 描述 OLE 数据 FORMATETC接口（发音“format et cetera”）用来表示IDataObject提供（或接收）的数据类型，是标准window粘贴板格式（CF_TEXT等）的扩展，因此除了基本的粘贴板格式之外，还包含了数据怎么样rendered和存储。 FORMATETC 结构的成员如下描述： cfFormat：粘贴板格式，用来表示FORMATETC结构。可以是内建的格式（例如：CF_TEXT或CF_BITMAP）或者用RegisterClipboardFormat注册的自定义格式。 Ptd:指向DVTARGETDEVICE结构，提供已经rendered数据的设备信息。正常的粘贴板操作和拖放操作都是NULL。 dwAspect：描述用户怎么样render数据的大量细节。通常这个是DVASPECT_CONTECT，表示全内容，但也可以描述较少的信息，例如：图标。 Lindex：仅仅在当数据通过页面边界被分割的时候使用，它不用于简单的OLE传输，因此该值几乎总是-1。 Typemed：这是一个有趣的成员；因为其描述了用于存储数据的存储媒体类型。该成员名字自词组“Type of Medium”；该值在window.h中定义的TYMED_XXX等值。 因此有了这个数据结构，OLE 已经提供了一个描述消费者什么样的数据已经怎么样 render 这个数据。 存储 OLE 数据 结构体 STGMEDIUM(STORAGE MEDIUM 的缩写) 提供一个用来存储数据的容器，因此叫存储媒体： 这个结构定义看起来比较复杂，但是有用的仅仅三个成员，因为未命名联合合并了所有内容作为一个实体共享同样的存储空间。 tymed：这个成员必须和FORMATETC结构相同，这个成员指定已经存储的媒体类型，例如，全局数据（TYMED_HGLOBAL），IStream（TYPED_ISTREAM）等等。相应的联合中的元素是数据的句柄。 hBitmap/hGlobal等：实际的数据，仅仅他们中的一个是有效的，这依赖于tymed的值。 pUnkForRelease：一个可选的指针，指向IUnknown接口，数据的接收方应该调用其Release方法。当这个字段是NULL时，接收方有责任释放内存句柄。ReleaseStgMedium API调用在这里非常有用，它负责释放STGMEDIUMS的数据内容，因此实际上我们不需要做什么。 STGMEDIUM 结构是传统的 windows HGLOBAL 内存句柄的扩展，同时支持 HGLOBAL（且一直是最常用的），同时支持许多其他的类型，最有用的是 IStream 和 IStorage 通用 COM 接口。 总之，结构体 FORMATETC 和 STGMEDIUM 一起用来描述和存储 OLE 数据实体的。 [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/691/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OLE Drag and Drop (1) 介绍</title>
		<link>http://blog.tinybrowser.net/archives/674</link>
		<comments>http://blog.tinybrowser.net/archives/674#comments</comments>
		<pubDate>Thu, 04 Feb 2010 08:47:58 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[OLE Drag and Drop Tutorials]]></category>
		<category><![CDATA[OLE Drag and Drop]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=674</guid>
		<description><![CDATA[http://www.cppblog.com/windcsn/category/995.html 该指南的目的在于读者能够在他们自己的程序实现完整的拖拽功能。自Window95以来，Drag和Drop已经成为Window程序的一个标准功能，随着COM和OLE成为主流技术，程序能和Window Shell甚至其他Window程序无缝交互。这个弹性是以高昂的代价为基础的，说的婉转点，写一个COM或OLE支持的程序完全是一个噩梦。 本指南目的在于帮助你轻松克服写一个OLE接口支持的拖拽程序的困难。通常，我们使用纯WIN32 API基础。然而，我会使用C++而不是C，因为C++是写COM接口程序的首选语言；我也会解释怎么样以简单的方式转换成C语言。 我有意以几个部分来写这个指南，主要的原因是太多的信息。另外，Drag-and-drop组件也使他们有各自不同的主题，因此我采用了这种方法。指南的第一部分（实际上就是该部分）简单介绍OLE 拖拽，后面的指南着重于拖拽；第2和3部分介绍OLE数据传输IDataObject接口。第4部分看一下IEnumFORMATETC接口，第5和6部分介绍drag源和drop目标。 推荐阅读 我强烈推荐你研究一下下面的信息，因为我是从那里学习COM、OLE拖拽的。 1. msdn.microsoft.com 每个win32相关的起始之处。 2. Inside OLE 2nd edition 该书中有许多有用的信息，被作为OLD的圣经。它有点老了，但包含每个你需要知道的东西。MSDN中包含了该书的一个软COPY，也许一直再那里；因特耐特上也有许多PDF和CHM的版本。 3. ftp://ftp.microsoft.com/softlib/msfiles 微软的FTP服务器包含几百个以前的资源，到目前为止我发现的最有用的东西是两个小文件：drgdrps.exe和drgdrpt.exe。他们是自解压的ZIP文件，包含了简单的drop源和drop目标程序的完整代码，为了可以简单的访问这些文件，你仅仅需要输入下面的命令： ftp ftp.microsoft.com username “ftp” password “ftp” cd softlib/mslfiles bin get drgdrps.exe get drgdrpt.exe bye 4. 微软技术论文 &#8211; OLE for Idiots 系列，What OLE is Really about等，这些论文虽然很老了，但他们在今天依然有用。在GOOGLE中可以轻松查询到。 OLE Drag 和 Drop 拖放是用来描述使用鼠标将数据从一个地方传输到另一个地方的短语。 每个拖放操作包含三个元素，当然这些元素是COM对象，需要支持拖放功能的程序都必须实现这三个元素。 IDropSource 接口表示拖放操作的源. IDropSource [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/674/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OLE Drag and Drop Tutorials</title>
		<link>http://blog.tinybrowser.net/archives/677</link>
		<comments>http://blog.tinybrowser.net/archives/677#comments</comments>
		<pubDate>Thu, 04 Feb 2010 06:56:18 +0000</pubDate>
		<dc:creator>free2000fly</dc:creator>
				<category><![CDATA[OLE Drag and Drop Tutorials]]></category>
		<category><![CDATA[OLE Drag and Drop]]></category>

		<guid isPermaLink="false">http://blog.tinybrowser.net/?p=677</guid>
		<description><![CDATA[http://www.catch22.net/tuts/dragdrop James &#8211; Sat, 08/30/2008 &#8211; 09:10 The aim of this series of tutorials is to enable the reader to implement complete drag and drop support for their applications. Drag and drop became a standard feature of many Windows applications when Windows 95 was launched. With COM and OLE becoming more mainstream at this time, [...]]]></description>
		<wfw:commentRss>http://blog.tinybrowser.net/archives/677/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

