当应用程序以私有格式(CF_PRIVATEFIRST
至CF_PRIVATELAST
)将数据放在剪贴板上时,它必须释放它以响应WM_DESTROYCLIPBOARD
,因为对于这些格式,系统不会自动执行此操作。清理私人剪贴板格式
它应该在逻辑上是真实的,一个应用程序使用一个专用的格式不会被任何其他应用程序(即使他们使用私营范围相同的格式代码)可以看出。
a)系统如何执行此操作?它使用剪贴板所有者(窗口句柄)吗?
b)当所有者窗口关闭时,是否自动从剪贴板中删除私人格式的项目? (使用剪贴板查看器似乎他们不这样做。)那么当窗口句柄被重用时会发生什么?
除了释放内存以响应
WM_DESTROYCLIPBOARD
,你还需要在应用程序退出时释放它吗? (我知道剪贴板使用全局内存,因此可以从任何进程访问数据,所以我猜测它在创建它的进程退出时不会自动释放。)理想情况下,您将删除只是私有格式,并在应用程序退出时留下任何标准格式,但我无法找到API调用以从剪贴板中仅删除一种格式。有没有简单的方法来做到这一点,而不是清空剪贴板,然后明确地写回非私有格式?
我搜索了MSDN文档和Google,找不到这些问题的答案,所以任何人都可以帮忙吗?
(我知道注册剪贴板格式我不要求那些。)
如果一个应用程序使用相同的名称,您确定没有看到其他剪贴板格式的应用程序吗?我可以使用私有格式在同一应用程序的两个实例之间拖放。没有看到为什么这不适用于2种不同应用的原因。 – user2543253
@ user2543253我假设你的意思是'如果他们使用相同的_number_';私人剪贴板格式没有名称。问题是,如果私人剪贴板格式数字在所有应用程序之间共享,那么必须有一些专用格式的中央注册表,以防止两个应用程序使用相同的数字来处理不同的事情。然后他们不再是私人格式,而是像CF_TEXT这样的公共文件格式。您是否使用注册剪贴板格式混淆了它们? –
注册“RegisterClipboardFormat”时,我的意思是相同的名称。因为那时他们得到相同的号码。重新阅读文档,我发现:“这使得多个应用程序可以使用相同的注册剪贴板格式来复制和粘贴数据”。你是什么意思“混淆注册格式”?是不是剪贴板格式我注册自己的私人格式? – user2543253