Data Objects and Data Sources: Creation and Destruction-数据对象和数据源的创建和销毁

本文围绕数据对象和数据源的创建与销毁展开,介绍了在MFC中何时创建和销毁这些对象以实现数据传输。包括创建和销毁数据对象的情况,如拖放和粘贴操作时的处理;还说明了创建和销毁数据源的场景,如复制、剪切或拖放操作时的步骤。

 在数据对象和数据源中解释过,数据对象和数据源表示数据传输的两方。本文解释什么时候创建和销毁这些对象和源的来适当的执行你的数据传输。包括:
 1.创建数据对象
 2.销毁对数对象
 3.创建数据源
 4.销毁数据源


 创建数据对象
     数据对象被目标应用程序使用-可以是客户或服务端。目标程序中的一个数据对象是一个源应用程序 和目标程序之间的连接的端。一个目标程序汇总的数据对象被用来与数据源的数据进行交互和访问。
     数据对象在两种情况下需要,一种是数据通过拖放操作放到你的应用程序中;第二是从编辑菜单中 通过粘贴项时。 在拖放情况下,你不需要创建一个数据对象,一个指向一个存在的数据对象的指针将被传递给你 的OnDrop函数。这个数据对象被拖放操作的框架创建并将由它来销毁。这并不总是这样,当另一 个方法执行粘贴操作时就不是,更多参见:Destorying Data Objects

 
     如果应用程序执行粘贴或粘贴特别的操作,你应该创建一个COleDataObject对象并调用AttachClipboard
 成员函数。这将建立数据对象和粘贴板中的数据关联。你能在你的粘贴函数中使用数据对象。
     作为一个例子,参见MAINVIEW.CPP文件中DoPasteItem函数,它是MFC OLE例子OCLIENT的一部分。 OCLIENT实现一个函数来执行所有的粘贴操作并在OnDrop、OnPaste和OnPasteLink函数中调用DoPasteItem。 OnPaste、OnPasteLink传递一个NULL作为参数,并告诉DoPasteItem来创建一个数据对象并附加到 粘贴板中。这中模式分割你的粘贴代码,你仅仅需要在一个地方调式它,但可以使用各种粘贴操作上。
 
 销毁数据对象
     如果你按照创建数据对象中描述的模式来,销毁数据对象对数据传输来说是琐碎的事情。数据对象 被你的粘贴函数创建,并在你粘贴函数返回的时候由MFC来销毁。 如果你按照其他方法来处理粘贴操作,确信你的数据对象在你粘贴操作完成的以后被销毁。直到数据 对象被销毁,否则其他程序将不可能成功的复制数据到粘贴板。
 创建数据源
 数据传送的源使用数据源,它能够是数据传送的客户或服务端。一个源程序中的数据源是源应用程序 和目标应用程序的连接的一端。一个目标应用程序的数据对象被用来和数据源的数据交互。 数据源在一个数据需要被复制到粘贴板的时候被创建,典型的场景是这样的:
 1.用户选择数据
 2.用户选择复制(或CUT)或者开始一个拖放操作
 3.依赖于程序的设计,应用程序创建一个COleDataSource对象或一个COleDataSource继承的对象
 4.选择的数据被插入到数据源中,通过调用COleDataSource::CacheData或COleDataSource::DelayRenderData 函数来完成。
 5.应用程序调用第三步中创建的对象的SetClipboard成员函数(或者DoDragDrop成员函数,如果是拖动操作)。
 6.如果这是一个Cut操作或者是一个DoDragDrop,返回DROPEFFECT_MOVE,第一步中被选择的数据将从
 文档中删除。
 这个场景在MFC OLE例子程序OCLIENT和HIERSVR中实现。查看每个应用程序的CVew继承类的GetClipboardData 和OnGetClipboadrData函数的源代码。这两个函数在COleClientItem和COleServerItem继承类中 都有实现。这些例子程序提供解释这些概念的很好的例子。
 另外你想创建COleDataSource对象发生在你正在修改拖动操作的默认行为。更多信息参见:自定义拖放操作。
 销毁数据源:
    数据源必须被当前负责他们的应用程序销毁。在你将数据源传递给OLE的情况下,例如调用COleDataSource::SetClipboard,你不需要关心如何销毁它,因为OLE将负责销毁,如果你没有将你的数据传递给OLE,你应该负责销毁它,就象典型的C++对象一样。
 For more information, see Drag and Drop, Clipboard, and Manipulating Data Objects and Data Sources.

2025-08-03T21:43:09.808+08:00 INFO 26900 --- [seata-account] [ main] c.a.n.p.a.s.c.ClientAuthPluginManager : [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. 2025-08-03T21:43:09.808+08:00 INFO 26900 --- [seata-account] [ main] c.a.n.p.a.s.c.ClientAuthPluginManager : [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. 2025-08-03T21:43:09.854+08:00 INFO 26900 --- [seata-account] [ main] m.e.s.MybatisPlusApplicationContextAware : Register ApplicationContext instances org.springframework.context.annotation.AnnotationConfigApplicationContext@1a411233 2025-08-03T21:43:10.015+08:00 WARN 26900 --- [seata-account] [ main] iguration$LoadBalancerCaffeineWarnLogger : Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath. 2025-08-03T21:43:10.120+08:00 INFO 26900 --- [seata-account] [ main] c.z.account.SeataAccountMainApplication : Started SeataAccountMainApplication in 1.816 seconds (process running for 2.403) 2025-08-03T21:43:10.122+08:00 WARN 26900 --- [seata-account] [ Thread-14] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Start destroying common HttpClient 2025-08-03T21:43:10.122+08:00 WARN 26900 --- [seata-account] [ Thread-2] c.a.n.common.executor.ThreadPoolManager : [ThreadPoolManager] Start destroying ThreadPool 2025-08-03T21:43:10.124+08:00 WARN 26900 --- [seata-account] [ Thread-14] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Destruction of the end 2025-08-03T21:43:10.124+08:00 WARN 26900 --- [seata-account] [ Thread-2] c.a.n.common.executor.ThreadPoolManager : [ThreadPoolManager] Destruction of the end 已与地址为 ''127.0.0.1:61924',传输: '套接字'' 的目标虚拟机断开连接
最新发布
08-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值