|
览器应用程式有必要加入「剪贴簿浏览器链」,以便执行的所有剪贴簿浏览器都可以收到Windows发送给目前剪贴簿浏览器的讯息。当一个程式将自己注册为一个剪贴簿浏览器时,它就成为目前的剪贴簿浏览器。Windows把先前的目前浏览器视窗代号交给这个程式,并且此程式将储存这个代号。当此程式收到一个剪贴簿浏览器讯息时,它把这个讯息发送给剪贴簿链中下一个程式的视窗讯息处理程式。
剪贴簿浏览器的函式和讯息
程式透过呼叫SetClipboardViewer函式可以成为剪贴簿浏览器链的一部分。如果程式的主要作用是作为剪贴簿浏览器,那么这个程式在WM_CREATE讯息处理期间可以呼叫这个函式,该函式传回前一个目前剪贴簿浏览器的视窗代号。程式应该把这个代号储存在静态变数中:
如果在Windows的一次执行期间,您的程式成为剪贴簿浏览器的第一个程式,那么hwndNextViewer将为NULL。
不管剪贴簿中的内容怎样变化,Windows都将把WM_DRAWCLIPBOARD讯息发送给目前的剪贴簿浏览器(最近注册为剪贴簿浏览器的视窗)。剪贴簿浏览器链中的每个程式都应该用SendMessage把这个讯息发送到下一个剪贴簿浏览器。浏览器链中的最後一个程式(第一个将自己注册为剪贴簿浏览器的视窗)所储存的hwndNextViewer为NULL。如果hwndNextViewer为NULL,那么程式只简单地将控制项权还给系统而已,而不向其他程式发送任何讯息(不要把WM_DRAWCLIPBOARD讯息和WM_PAINTCLIPBOARD讯息混淆了。WM_PAINTCLIPBOARD是由剪贴簿浏览器发送给使用CF_OWNERDISPLAY剪贴簿资料格式的程式,而WM_
DRAWCLIPBOARD讯息是由Windows发往目前剪贴簿浏览器的)。
处理WM_DRAWCLIPBOARD讯息的最简单方法是将讯息发送给下一个剪贴簿浏览器(除非hwndNextViewer为NULL),并使视窗的显示区域无效:
|