zoukankan      html  css  js  c++  java
  • 剪贴板

    剪贴板实际上是系统维护管理的一块内存区域,当在一个进程中复制数据时,是将这个数据放到该块内存区域中,当在另一个进程中粘贴数据时,是从该块内存区域中取出数据,然后显示在窗口上;因为剪贴板是所有进程都可以访问的,如果某程序已经打开了剪贴板,则其他程序将不能修改剪贴板,直到前者调用了CloseClipboard函数,并且只有调用了EmptyClipboard函数清空剪贴板释放剪贴板上数据的句柄,打开剪贴板的当前窗口才拥有剪贴板;

    1、打开剪贴板

      BOOL OpenClipboard();

      返回值:打开剪贴板成功返回非0值,如果其他程序或当前窗口已打开了剪贴板则返回0;

    2、关闭剪贴板

      BOOL CloseClipboard();

      返回值:关闭成功返回非0值,关闭失败返回0;

    3、清空剪贴板,释放剪贴板中数据的句柄

      BOOL EmptyClipboard();

      返回值:函数操作成功返回非0值,失败返回0;

    4、以指定的剪贴板格式向剪贴板上放置数据

      调用SetClipboardData函数的窗口必须是剪贴板的拥有者,在这之前,该程序必须已经调用了OpenClipboard函数打开了剪贴板;

        HANDLE SetClipboardData(

            UINT uFormat,

            HANDLE hMem

        );

            uFormat:指定剪贴板格式,格式可以是已注册的格式或任一种标准的剪贴板格式;CF_TEXT为标准的剪贴板文本格式,该格式下每行数据以回车换行符终止,并以空字符作为数据的结尾;

            hMem:具有指定格式的数据的句柄;可以设为NULL采用延迟提交技术,在剪贴板上以指定的格式放置一个空剪贴板数据块,直到有其他进程需要数据或者自身进程需要终止运行时,操作系统会向数据提供进程发送WM_RENDERFORMAT和WM_RENDERALLFORMAT消息,而数据提供进程在响应消息的函数中再次调用SetClipboardData函数,这时才真正提交数据到剪贴板上;再次调用SetClipboardData函数时,就不需要调用OpenClipboard函数和EmptyClipboard函数了;

    5、调用GlobalAlloc函数从堆上分配指定数目的字节作为剪贴板数据的内存对象

      HGLOBAL GlobalAlloc(

          UINT uFlags,  

          DWORD dwBytes  

      );

          uFlags:用来指定分配内存的方式,可取值如下;如果为0,对应为默认的GMEM_FIXED;

            GHND  --GMEM_MOVEABLE和GMEM_ZEROINIT的组合

            GMEM_FIXED  --分配一块固定内存,返回值是一个指针,该内存对象其锁计数总是0

            GMEM_MOVEABLE  --分配一块可移动的内存,返回值是一块内存对象句柄,可以用GlobalLock函数将这个句柄转换为一个指针;创建一个进程时,系统为程序分配一块默认堆,内存块在物理内存中不能被移动,但可以在一个默认堆中被移动

            GMEM_ZEROINIT  --初始化内存的内容为0

            GPTR  --GMEM_FIXED和GMEM_ZEROINIT的组合

          dwBytes:指定分配的字节数;

      LPVOID GlobalLock( HGLOBAL hMem );

        该函数将一个全局内存对象句柄转换为一个指针;每个内存对象的内部数据结构中都包含了一个初始值为0的锁计数,对于可移动的内存对象来说,GlobalLock函数将其锁计数加1,而GlobalUnlock函数将该锁计数减1;被锁定的内存对象的内存块将保持锁定,不能被移动或被废弃,直到它的锁计数为0或调用GlobalRealloc函数重新分配该内存对象,该内存块才能被移动或被废弃;

      BOOL GlobalUnlock( HGLOBAL hMem );

      对于一个进程来说,每调用一次GlobalLock函数后,一定要调用对应次数的GlobalUnlock函数;

    6、从剪贴板中获得指定格式的数据

      HANDLE GetClipboardData( UINT uFormat );

      返回值:返回一个指定格式存在的剪贴板对象的句柄;

    7、查看剪贴板中是否有所需的特定格式的数据

      BOOL IsClipboardFormatAvailable( UINT format );

      返回值:如果剪贴板上有所需的数据格式可用,则返回非0值,否则返回0;

  • 相关阅读:
    hdu 1856 More is better(并查集)
    hdu 1787 GCD Again
    hdu 1203 I NEED A OFFER!(dp||背包)
    hdu 1208 Pascal's Travels(dp)
    hdu 1142 A Walk Through the Forest(dijkstra)
    hdu 1087 Super Jumping! Jumping! Jumping!(dp)
    Jquery插件
    在ashx文件中使用Session
    页面注册js的方法比较
    Linq体验(一)
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/6920940.html
Copyright © 2011-2022 走看看