SetClipboardData

【勇芳软件工作室】汉化HomePreviousNext

SetClipboardData功能将数据以指定的剪贴板格式放置在剪贴板上。该窗口必须是当前的剪贴板所有者,应用程序必须调用OpenClipboard功能。(当回复WM_RENDERFORMATWM_RENDERALLFORMATS消息时,剪贴板所有者在致电SetClipboardData之前不得致电OpenClipboard)。

手柄SetClipboardData(

UINT 【UFormat】,//剪贴板格式
HANDLE 【HMEM】//数据句柄
); 

参数

【UFormat】

指定剪贴板格式。此参数可以是注册格式或以下备注部分中列出的任何标准剪贴板格式。有关注册剪贴板格式的信息,请参阅RegisterClipboardFormat功能。

【HMEM】

标识指定格式的数据。此参数可以为NULL,表示窗口根据请求提供指定剪贴板格式的数据(呈现格式)。如果窗口延迟渲染,则必须处理WM_RENDERFORMATWM_RENDERALLFORMATS消息。

一旦SetClipboardData被调用,系统拥有由【HMEM】参数标识的对象。应用程序可以读取数据,但不能释放句柄或将其锁定。如果【HMEM】参数标识内存对象,则必须使用带有GMEM_MOVEABLE和GMEM_DDESHARE标志的GlobalAlloc函数分配该对象。

返回值

如果函数成功,则返回值是数据的句柄。

如果函数失败,返回值为NULL。要获取扩展错误信息,请调用GetLastError.

备注

【UFormat】参数可以标识已注册的剪贴板格式,也可以是以下值之一:

含义
CF_BITMAP位图的句柄(HBITMAP)。
CF_DIB一个包含BITMAPINFO结构的内存对象,后跟位图位。
CF_DIF软件艺术数据交换格式。
CF_DSPBITMAP与私有格式相关联的位图显示格式。【HMEM】参数必须是可以以位图格式显示的数据句柄,而不是私有格式的数据。
CF_DSPENHMETAFILE与私有格式相关联的增强型图元文件显示格式。【HMEM】参数必须是可以以增强的图元文件格式显示的数据句柄,而不是私有格式的数据。
CF_DSPMETAFILEPICT与私有格式相关联的图元文件图片显示格式。【HMEM】参数必须是可以以图元文件格式显示的数据句柄,而不是私有格式的数据。
CF_DSPTEXT与私有格式相关联的文本显示格式。【HMEM】参数必须是可以以文本格式显示的数据句柄,而不是私有格式的数据。
CF_ENHMETAFILE增强图元文件的句柄(HENHMETAFILE)。
CF_GDIOBJFIRST通过CF_GDIOBJLAST应用程序定义的GDI对象剪贴板格式的整数值范围。当剪贴板被清空时,使用GlobalFree功能不会自动删除与此范围内的剪贴板格式相关联的句柄。此外,当使用此范围内的值时,【HMEM】参数不是GDI对象的句柄,而是由GlobalAlloc函数与GMEM_DDESHARE和GMEM_MOVEABLE标志分配的句柄。
CF_HDROP类型为HDROP的句柄,用于标识文件列表。应用程序可以通过将句柄传递给DragQueryFile函数来检索有关文件的信息。
CF_LOCALE数据是与剪贴板中文本相关联的区域设置标识符的句柄。关闭剪贴板时,如果包含CF_TEXT数据但不包含CF_LOCALE数据,系统将自动将CF_LOCALE格式设置为当前输入的区域设置。您可以使用CF_LOCALE格式将不同的语言环境与剪贴板文本相关联。

从剪贴板粘贴文本的应用程序可以检索此格式,以确定用于生成文本的字符集。

请注意,剪贴板不支持多个字符集中的纯文本。为了实现这一点,可以使用诸如RTF之类的文件数据类型。

Windows NT:系统使用与CF_LOCALE关联的代码页从CF_TEXT隐式转换为CF_UNICODETEXT。因此,正确的代码页表用于转换。

CF_METAFILEPICT处理由METAFILEPICT结构定义的图元文件图片格式。通过动态数据交换(DDE)传递CF_METAFILEPICT句柄时,负责删除【HMEM】的应用程序也应该释放CF_METAFILEPICT句柄引用的元文件。
CF_OEMTEXT文字格式包含OEM字符集中的字符。每行以回车/换行(CR-LF)组合结束。空字符表示数据的结尾。
CF_OWNERDISPLAY所有者显示格式。剪贴板所有者必须显示和更新剪贴板查看器窗口,并接收WM_ASKCBFORMATNAMEWM_HSCROLLCLIPBOARDWM_PAINTCLIPBOARDWM_SIZECLIPBOARDWM_VSCROLLCLIPBOARD消息。【HMEM】参数必须为NULL。
CF_PALETTE处理调色板。每当应用程序将数据放置在依赖于或假定调色板的剪贴板中时,它也应将调色板放在剪贴板上。
 如果剪贴板包含CF_PALETTE(逻辑调色板)格式的数据,则应用程序应使用SelectPaletteRealizePalette函数来实现(比较)剪贴板中与该逻辑调色板的任何其他数据。
 当显示剪贴板数据时,Windows剪贴板始终将剪贴板上的任何对象用作CF_PALETTE格式的当前调色板。
CF_PENDATA用于Pen Computing的Microsoft Windows笔的扩展数据。
CF_PRIVATEFIRST通过CF_PRIVATELAST专用剪贴板格式的整数值范围。与私人剪贴板格式相关联的句柄不会自动释放;剪贴板所有者必须释放这样的句柄,通常是响应WM_DESTROYCLIPBOARD消息。
CF_RIFF表示音频数据比CF_WAVE标准波形格式更复杂。
CF_SYLKMicrosoft符号链接(SYLK)格式。
CF_TEXT文字格式。每行以回车/换行(CR-LF)组合结束。空字符表示数据的结尾。对ANSI文本使用此格式。
CF_WAVE以诸如11 kHz或22 kHz脉冲编码调制(PCM)的标准波形格式之一表示音频数据。
CF_TIFF标记图像文件格式。
CF_UNICODETEXT仅Windows NT: Unicode文字格式。每行以回车/换行(CR-LF)组合结束。空字符表示数据的结尾。

当应用程序调用{??989796180}功能时,操作系统会执行某些剪贴板格式之间的隐式数据格式转换。例如,如果CF_OEMTEXT格式在剪贴板上,则窗口可以检索CF_TEXT格式的数据。剪贴板上的格式根据需要转换为请求的格式。下表显示了可用的剪贴板数据类型转换。请注意,其中一些自动类型转换在所有平台上都不可用。

剪贴板格式转换格式平台支持
CF_BITMAPCF_DIBWindows NT,Windows 95
CF_DIBCF_BITMAPWindows NT,Windows 95
CF_DIBCF_PALETTEWindows NT,Windows 95
CF_ENHMETAFILECF_METAFILEPICTWindows NT,Windows 95
CF_METAFILEPICTCF_ENHMETAFILEWindows NT,Windows 95
CF_OEMTEXTCF_TEXTWindows NT,Windows 95
CF_OEMTEXTCF_UNICODETEXTWindows NT
CF_TEXTCF_OEMTEXTWindows NT,Windows 95
CF_TEXTCF_UNICODETEXTWindows NT
CF_UNICODETEXTCF_OEMTEXTWindows NT
CF_UNICODETEXTCF_TEXTWindows NT

如果操作系统为特定的剪贴板格式提供自动类型转换,则不需要将转换格式放在剪贴板上。

复制位图时,最好将CF_DIB格式放在剪贴板上。这是因为与设备相关的位图(CF_BITMAP)中的颜色相对于系统调色板,可能会在粘贴位图之前更改。如果只有CF_DIB格式在剪贴板上,并且窗口请求CF_BITMAP格式,则系统将使用当前调色板来呈现与设备相关的位图。

如果将CF_BITMAP格式放在剪贴板上(而不是CF_DIB),系统将在剪贴板关闭后立即呈现CF_DIB剪贴板格式。这确保使用正确的调色板来生成与设备无关的位图(DIB)。其他剪贴板格式之间的转换会根据需要进行。

Windows平台支持图形文件的两种剪贴板格式:CF_ENHMETAFILE和CF_METAFILEPICT。为增强的图元文件指定CF_ENHMETAFILE,为Windows图元文件指定CF_METAFILEPICT。

也可以看看

BITMAPINFO, GetClipboardData, GlobalAlloc, GlobalFree, METAFILEPICT, OpenClipboard, RealizePalette, RegisterClipboardFormat, SelectPalette, WM_ASKCBFORMATNAME, WM_DESTROYCLIPBOARD, WM_HSCROLLCLIPBOARD, WM_PAINTCLIPBOARD, WM_RENDERFORMAT, WM_RENDERALLFORMATS, WM_SIZECLIPBOARD, WM_VSCROLLCLIPBOARD