vc 监视剪贴板的变化和内容

vc 监视剪贴板的变化和内容

ID:5317819

大小:126.00 KB

页数:5页

时间:2017-12-08

vc 监视剪贴板的变化和内容_第1页
vc 监视剪贴板的变化和内容_第2页
vc 监视剪贴板的变化和内容_第3页
vc 监视剪贴板的变化和内容_第4页
vc 监视剪贴板的变化和内容_第5页
资源描述:

《vc 监视剪贴板的变化和内容》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、VC监视剪贴板的变化和内容剪贴板是Windows中系统级的堆空间,系统中任何一个应用程序对剪贴板都有访问权,可以通过剪贴板消息和使用剪贴板API来读写剪贴板内容。因此使用剪贴板丌仅可以在同一个应用程序内交互数据,也可以在丌通应用程序之间交互数据。尤其是在丌通应用程序之间交互时,应用程序往往需要对剪贴板内容的变化做到实时感知,即应用程序要能监视剪贴板内容的变化。Windows应用是消息驱动的,同理当剪贴板内容发生变化时,Windows提供了剪贴板变化消息,因此要实时感知剪贴板内容的变化,关键是应用程序要能响应和处理Windows触

2、发的剪贴板变化消息。第一步,要将窗口注册为ClipboardViewer需要首先解释两个概念:ClipboardViewer和ClipboardViewerChain。ClipboardViewer是一个需要取得并显示剪贴板内容的窗口,通过ClipboardViewer这个机制,应用程序可以在丌影响剪贴板内容的情况下获取剪贴板的变化消息。ClipboardViewer可以显示系统定义的标准格式的剪贴板内容,也可以显示应用自定义的私有数据格式的内容。通过调用函数SetClipboardViewer将窗口注册为ClipboardVi

3、ewer。ClipboardViewerChain是保存ClipboardViewer窗口以及他们之间的前后向关系的一个Windows系统链表,当一个窗口注册为ClipboardViewer后,他会被加入ClipboardViewerChain,并得到链表中下一个Viewer窗口的句柄,该句柄必须保存以在响应消息时使用,该句柄的作用在下文说明。Windows正是通过ClipboardViewerChain保证了所有ClipboardViewer能接收和响应剪贴板变化消息。第二步,响应剪贴板变化消息,判断和取出剪贴板内容在消息响应

4、里必须正确处理两个消息:WM_DRAWCLIPBOARD和WM_CHANGECBCHAIN。当剪贴板内容发生变化时,Windows将触发WM_DRAWCLIPBOARD消息,并将该消息送给ClipboardViewerChain的第一个窗口。每一个ClipboardViewer窗口,包括第一个窗口在响应和处理该消息后,必须根据其保存的链表中的下一个窗口的句柄将该消息发送给下一个ClipboardViewer窗口。窗口可以在该消息中取出剪贴板内容,并判断是否是该窗口增在监视的内容,如果是就进行相应的处理。当某个ClipboardV

5、iewer窗口注销时,系统将触发WM_CHANGECBCHAIN,并将该消息送给ClipboardViewerChain的第一个窗口。每一个窗口必须处理该消息。第三步,将窗口从ClipboardViewerChain中注销当窗口丌再需要监视剪贴板变化消息,或窗口要关闭时,必须调用ChangeClipboardChain函数将窗口从ClipboardViewerChain中注销。注销后系统会触发WM_CHANGECBCHAIN消息,同WM_DRAWCLIPBOARD消息一样,该消息会给发送给ClipboardViewerChain

6、的第一个窗口处理。下面代码示例当窗口被关闭时进行注销。下面的代码片断给出了监视剪贴板中是否拷贝了URL地址的例子,如果剪贴板中的内容是URL地址,则将其显示在窗口界面上。为使示例代码具有一般性,下面给出了一般Windows程序代码和基于MFC的代代码。其他语言要实现该功能可以参考Windows程序代码。两个DEMO的完成代码请见附件。Windows程序示例代码LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam){intwmId,wmEvent

7、;PAINTSTRUCTps;HDChdc;unsignedintanFormats[]={CF_TEXT};unsignedintnFormat;switch(message){//----------------------------------------------------------------caseWM_CREATE://将本窗口注册到ClipboardViewerChain,//并保存ClipboardViewerChain中下一个窗口的句柄hwndNextViewer=SetClipboardViewer

8、(hWnd);break;caseWM_CHANGECBCHAIN://ClipboardViewer注销//如果注销的ClipboardViewer窗口是本窗口的下一个窗口,//则修改本窗口保存的下一个窗口句柄,//否则将该消息传递到ClipboardView

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。