MFC-剪贴板

发布时间 2023-08-27 17:02:14作者: 天子骄龙

 

复制文本到剪贴板 

    //**********复制文本到剪贴板**********

    CString text = _T("我是中国人");
    BOOL b = OpenClipboard();  //打开剪贴板
    /*
    返回值:
            如果通过CWnd打开了剪贴板,则返回非零值
            如果其他应用程序或窗口已经打开了剪贴板,则返回零
    说明:
    在调用Windows的CloseClipboard函数之前,其他应用程序将不能修改剪贴板的内容
    在调用Windows的EmptyClipboard函数之前,当前的CWnd对象将不会成为剪贴板的拥有者。
    */
    
    if (b) {
        EmptyClipboard(); // 清空剪贴板内容
        HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, (text.GetLength() + 1) * sizeof(TCHAR)); // 分配内存
        /*
        参数1 类型及说明
             uFlags Long,对分配的内存类型进行定义的常数标志,如下所示:
             GMEM_FIXED 分配一个固定内存块,返回值是一个指针
             GMEM_MOVEABLE 分配一个可移动内存块
                    分配可移动的内存,在Win32中内存块在物理内存中是不可移动的,但在缺省堆中可以.
                    返回值是该内存对象的句柄,可使用函数 GlobalLock 将该句柄转换为一个指针.
                    这个标识不能与 GMEM_FIXED 组合使用.
             GMEM_ZEROINIT 新分配的内存块全部初始化成零
             GHND         为GMEM_MOVEABLE 和 GMEM_ZEROINIT的组合
             GPTR         为GMEM_FIXED和GMEM_ZEROINIT组合
          
      参数2:dwBytes Long,指定要申请的字节数. 若该参数为 0 且参数 uFlags 指定为 GMEM_MOVEABLE 则该函数返回一个内存对象的句柄,该内存对象被标识为discarded(可抛弃的) 返回值:若函数调用成功,则返回一个新分配的内存对象的句柄 若函数调用失败,则返回NULL。可调用GetLastError以获得更多错误信息 注解: 如果堆内没有足够的空间满足请求,函数将返回 NULL 若函数调用成功,将至少分配所需内存.若实际分配量超过所需,则内存仍然能够充分利用之.可用函数 GlobalSize 来确定实际所分配的字节数 可使用 GlobalFree 来释放内存。
*/ if (hMem != NULL) { LPTSTR lptstrCopy = (LPTSTR)GlobalLock(hMem); // 锁定内存并绑定指定指针 /* 锁定内存中指定的内存块,除非用 GlobalUnlock 函数将内存块解锁,否则地址会一直保持有效 参数:HGLOBAL hMem 指定一个全局内存块的句柄,这个句柄是通过GlobalAlloc或GlobalReAlloc来得到的 返回值:Long,如成功,返回内存块的地址 如出错,或者这是一个已被丢弃的“可丢弃”内存块,则返回零。会设置GetLastError参数表 注意:调用过GlobalLock锁定一块内存区后,一定要调用GlobalUnlock来解锁 */ _tcscpy_s(lptstrCopy, text.GetLength() + 1, text); // 复制文本到内存 /* 说明:参数1是指向内存hMem,其实就是把数据复制到内存hMem */ GlobalUnlock(hMem); // 解锁内存 HANDLE hand=SetClipboardData(CF_UNICODETEXT, hMem); // 设置剪切板 /* 参数1:UINT uFormat CF_DIB——DIB图片,它包含一个BITMAPINFO结构,然后是位图位 CF_DIF——软件领域的数据交换格式 CF_PALETTE——调色板 CF_PENDATA——笔扩展的Microsoft笔计算的数据 CF_RIFF——表示更复杂的音频数据可以被表示为一个CF_WAVE的标准波形格式 CF_SYLK——微软符号链接(SYLK)格式 CF_TEXT——ANSI文本格式。回车/换行(CR-LF)组合表示换行。必须用NULL结束字符串。使用此格式为ANSI文本 CF_WAVE——表示在的标准电波格式之一,例如11kHz或22kHz的脉冲编码调制(PCM)的音频数据 CF_TIFF——TIFF标记图像文件格式 CF_UNICODETEXT——Unicode文本格式
            CF_BITMAP 位图 参数2:HANDLE hMem 具有指定格式的数据的句柄,该参数可以是空 返回值:类型: HANDLE 如果函数成功,则返回值是数据的句柄 如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError
*/ } CloseClipboard(); // 关闭剪贴板 }