MFC-剪贴板
复制文本到剪贴板
//**********复制文本到剪贴板********** 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(); // 关闭剪贴板 }
从剪贴板中获取文本
//**********从剪贴板中获取文本********** if (IsClipboardFormatAvailable(CF_UNICODETEXT) && OpenClipboard()) { /* IsClipboardFormatAvailable 确定剪贴板是否包含指定格式的数据 返回值:类型: BOOL 如果剪贴板格式可用,则返回值为非零。 如果剪贴板格式不可用,则返回值为零。 要获得更多的错误信息,请调用 GetLastError */ HGLOBAL hMem = GetClipboardData(CF_UNICODETEXT); //获取剪贴板内容 /* 参数:UINT 指定要获取的数据的格式 常见的数据格式包括CF_TEXT(ANSI文本) 、CF_BITMAP(位图) 、CF_DIB(设备无关位图)等 傳回值:類型: HANDLE 如果函式成功,則傳回值是指定格式之剪貼簿物件的控制碼。 如果函式失敗,則傳回值為 Null。 若要取得擴充的錯誤資訊,請呼叫 GetLastError */ if (hMem != NULL) { LPCTSTR lptstr = (LPCTSTR)GlobalLock(hMem); CString text(lptstr); GlobalUnlock(hMem); // 对获取到的文本进行处理 ::OutputDebugString(text); } CloseClipboard(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2020-08-27 C++继承
2020-08-27 C++迭代器iterator
2020-08-27 C++pair-组合两个数据
2019-08-27 qt5-QDir目录