为了传送出文字,首先打开剪贴簿:
会得到代表文字的记忆体块代号:
如果剪贴簿不包含CF_TEXT格式的资料,此代号就为NULL。这是确定剪贴簿是否含有文字的另一种方法。如果GetClipboardData传回NULL,则关闭剪贴簿,不做其他任何工作。
从GetClipboardData得到的代号并不属於使用者程式-它属於剪贴簿。仅在GetClipboardData和CloseClipboard呼叫之间这个代号才有效。您不能释放这个代号或更改它所引用的资料。如果需要继续存取这些资料,必须制作这个记忆体块的副本。
这里有一种将资料复制到使用者程式中的方法。首先,配置一块与剪贴簿资料块大小相同的记忆体块,并配置一个指向该块的指标:
再次呼叫hGlobal ,而hGlobal是从GetClipboardData呼叫传回的整体代号。现在锁定代号,获得一个指向剪贴簿块的指标:
现在就可以复制资料了:
或者,您可以使用一些简单的C程式码:
在关闭剪贴簿之前先解锁记忆体块:
现在您有了一个叫做pText的指标,以後程式的使用者就可以用它来复制文字了。
打开和关闭剪贴簿
在任何时候,只有一个程式可以打开剪贴簿。呼叫OpenClipboard的作用是当一个程式使用剪贴簿时,防止剪贴簿的内容发生变化。OpenClipboard传回BOOL值,它说明是否已经成功地打开了剪贴簿。如果另一个应用程式没有关闭剪贴簿,那么它就不能被打开。如果每个程式在回应使用者的命令时都尽快地、遵守规范地打开然後关闭剪贴簿,那么您将永远不会遇到不能打开剪贴簿的问题。
但是,在不遵守规范程式和优先权式多工环境中,总会发生一些问题。即使在您的程式将某些东西放