初看之下,这个概念似乎是没有意义的。如果剪贴簿的作用是在应用程式之间传送资料,那么,为什么剪贴簿中要含有只有一个应用程式才能理解的资料呢?答案很简单:剪贴簿允许在同一个程式的内部(或者可能在一个程式中的不同执行实体之间)传送资料。很明显地,这些执行实体能理解它们自己的自订资料格式。
有几种使用自订资料格式的方法。最简单的方法用到一种表面上是标准剪贴簿格式(文字、点阵图或metafile)的资料,可是该资料实际上只对您的程式有意义。这种情况下,在SetClipboardData和GetClipboardData呼叫中可使用下列wFormat值:CF_DSPTEXT、CF_DSPBITMAP、CF_DSPMETAFILEPICT或CF_DSPENHMETAFILE(字母DSP代表「显示器」)。这些格式允许Windows按文字、点阵图或metafile来浏览或显示资料。但是,另一个使用常规的CF_TEXT、CF_BITMAP、CF_DIB、CF_METAFILEPICT或CF_ENHMETAFILE格式呼叫GetClipboardData的程式将不能取得这个资料。
如果用其中一种格式把资料放入剪贴簿中,则必须使用同样的格式读出资料。但是,如何知道资料是来自程式的另一个执行实体,还是来自使用其中某种资料格式的另一个程式呢?这里有一种方法,可以透过下列呼叫首先获得剪贴簿所有者:
然後可以得到此视窗代号的视窗类别名称:
如果类别名称与程式名称相同,那么资料是由程式的另一个执行实体传送到剪贴簿中的。
使用自订资料格式的第二种方法涉及到CF_OWNERDISPLAY旗标。SetClipboardData的整体记忆体代号是NULL:
这是某些文书处理程式在Windows的剪贴簿浏览器的显示区域中显示格式化文字时所采用的方法。很明显地,剪贴簿浏览器不知道如何显示这种格式化文字