您可以通过下面的呼叫来取得目前在剪贴簿中之不同格式的个数:
延迟提出
当把资料放入剪贴簿中时,一般来说要制作一份资料的副本,并将包含这份副本的记忆体块代号传给剪贴簿。对非常大的资料项目来说,这种方法会浪费记忆体空间。如果使用者不想把资料粘贴到另一个程式里,那么,在被其他内容取代之前,它将一直占据著记忆体空间。
通过使用一种叫做「延迟提出」的技术可以避免这个问题。实际上,直到另一个程式需要资料,程式才提供这份资料。为此,不将资料代号传给Windows,而是在SetClipboardData呼叫中使用NULL:
可以有多个使用不同iFormat值的SetClipboardData呼叫,对其中某些呼叫可使用NULL值。而对其他一些则使用实际的代号值。
前面的过程比较简单,以下的过程就要稍微复杂一些了。当另一个程式呼叫GetClipboardData时,Windows将检查那种格式的代号是否为NULL。如果是,Windows将给「剪贴簿所有者」(您的程式)发送一个讯息,要求取得资料的实际代号,这时您的程式必须提供这个代号。
更具体地说,「剪贴簿所有者」是将资料放入剪贴簿的最後一个视窗。当一个程式呼叫OpenClipboard时,Windows储存呼叫这个函式时所用的视窗代号,这个代号标示打开剪贴簿的视窗。一旦收到一个EmptyClipboard呼叫,Windows就使这个视窗作为新的剪贴簿所有者。
使用延迟提出技术的程式在它的视窗讯息处理程式中必须处理三个讯息:WM_RENDERFORMAT、WM_RENDERALLFORMATS和WM_DESTROYCLIPBOARD。当另一个程式呼叫GetClipboardData时,Windows给视窗