【教学课件】第16章监视剪贴板程序制作.ppt
第16章 监视剪贴板程序制作,目前网络上的下载工具都有一个功能监视剪贴板。也就是说,当用户复制某个URL地址时,下载工具会自动察觉到并下载此URL地址对应的资源。本章将通过一个实际例子来演示如何监视剪贴板。,16.1 案例效果图,当用户复制某一下载资源的URL时,会被程序监视到。如果此URL符合一定要求便给出提示,如图所示,当用户复制地址、服务器端口等信息。,16.2 案例需求,完成监视剪贴板的功能,要求如下。当用户复制内容时,如果内容为http或ftp的URL,且资源扩展名为zip或jpg,则解析出URL对应的一些信息,包括域名、端口、文件路径、协议名等。表为一些测试用例。,16.3 需要掌握的知识点,开发本程序需要掌握以下知识点。对话框编程基础。剪贴板查看器操作基础,监视剪贴板操作。,16.4 剪贴板查看器操作基础,要开发一个剪贴板监视程序,首先要知道剪贴板查看器的概念。剪贴板查看器实际上是一个窗口。当剪贴板中的内容发生变化时,此窗口会收到一个WM_DRAWCLIPBOARD消息。如果要获取此时剪贴板中的内容,可以通过剪贴板的其他函数完成。,16.4.1 获取剪贴板内容,获取剪贴板内容需要使用几个剪贴板相关的API,其操作步骤比较固定,具体流程如图所示。,16.4.2 剪贴板查看器链,一个操作系统中可能有多个剪贴板程序,操作系统将这些剪贴板程序保存到一个链中。当剪贴板发生变化时,操作系统会将WM_DRAWCLIPBOARD消息发送给链中的第1个窗口。当第1个窗口处理完毕后,再由第一个窗口发送给第2个窗口,依次进行下去直到链的末尾。所以一个剪贴板查看器程序必须在收到WM_DRAWCLIPBOARD消息后,再将消息发送给下一个剪贴板查看器程序,代码如下所示。/将消息发送给下一窗口:SendMessage(m_hWndNextClipboardViewer,WM_DRAWCLIPBOARD,0,0);,16.4.3 设置当前窗口为剪贴板查看器,使用SetClipboardViewer剪贴板API函数可以将当前窗口设置为剪贴板查看器。SetClipboardViewer的定义如下。HWND SetClipboardViewer(HWND hWndNewViewer/当前窗口句柄);SetClipboardViewer的返回值表示链中下一个剪贴板查看器窗口的句柄。,16.4.4 退出时删除链中的当前窗口,当剪贴板查看器程序退出时,应自行删除链中的自己。以下代码可以在剪贴板查看器链中删除当前程序。/将自己从链中删除:ChangeClipboardChain(this-m_hWnd,/当前窗口句柄this-m_hWndNextClipboardViewer);/下一剪贴板查看器的窗口句柄,16.5 开发过程,程序的功能比较简单,可以当作一个模块来使用。程序的主要流程如图所示。,16.5.1 创建工程,由于本程序主要是开发剪贴板监视模块,对工程的要求较少,所以只需简单地创建一个对话框工程即可。创建对话框工程,工程名为eg_1_WatchClipboard。,16.5.2 解析URL模块开发,解析URL模块的步骤如下。(1)添加一般的C+类“CHTTPParser”,编写类声明代码如下。(2)编写类实现代码如下。,16.5.3 剪贴板模块开发,手动添加WM_CHANGECBCHAIN(链发生变化)与WM_DRAWCLIPBOARD的消息处理函数。同时添加一个HWND类型成员变量m_hWndNextClipboardViewer,用来保存链中的下一个剪贴板查看器窗口。public:afx_msg LRESULT OnChangeCBChain(WPARAM,LPARAM);/WM_CHANGECBCHAINafx_msg LRESULT OnDrawClipboard(WPARAM,LPARAM);/WM_DRAWCLIPBOARDHWND m_hWndNextClipboardViewer;/链中下一个窗口,16.6 小结,至此,一个剪贴板监视程序已经制作完毕。本例中主要介绍了剪贴板查看器的相关操作。剪贴板查看器的操作流程比较固定,并且经常被当作一个模块来使用。剪贴板查看器主要处理2个消息,比较重要的是WM_DRAWCLIPBOARD消息。当剪贴板的内容发生变化时,会发送此消息给窗口。剪贴板查看器还应处理WM_CHANGECBCHAIN消息来维持剪贴板链。,