首页 > 其他分享 >MFC-剪贴板

MFC-剪贴板

时间:2023-08-27 17:12:37浏览次数:40  
标签:剪贴板 MFC hMem 句柄 CF GMEM 内存

 

复制文本到剪贴板 

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

    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(); // 关闭剪贴板 }

 

 

 

 

 

 

标签:剪贴板,MFC,hMem,句柄,CF,GMEM,内存
From: https://www.cnblogs.com/liming19680104/p/17660489.html

相关文章

  • MFC-GetDlgItemText获取指定控件的文本
     TCHARname[256];HWNDhWnd=GetSafeHwnd();intn=::GetDlgItemText(hWnd,IDC_STATIC1,name,254);/*参数1:窗口句柄参数2:控件ID参数3:LPTSTRlpStr,//保存获取的文本的缓冲区参数4:nMaxCount指定了要拷贝到lpStr的字符串的最大......
  • MFC视频教学第一课,做一个简单的界面,理解应用程序和操作系统之间的消息传递机制
     #include<windows.h>#include<stdio.h>LRESULTCALLBACKWinSunProc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam);//WinMain是操作系统调用的,是系统的入口函数intWINAPIWinMain(HINSTANCEhInstance,//当前应运程序......
  • MFC-TeeChart图标控件
    OCX组件下载:链接:https://pan.baidu.com/s/1yOEbV4NBFdkusK_3CilLxA提取码:6666   系统注册下载之后,看安装说明       ......
  • MFC练习4:自动关机程序(恶搞版)
    用MFC实现了一个自动关机程序(恶搞版),需要输入“作者真帅”,不然会在30s后自动关机。程序涉及编辑框的输入输出、定时器的使用,按钮事件的添加、弹窗提示等,本身很简单。自动关机部分参考了网上的代码,在Win10系统上验证正常。一、界面展示这是一个MFC对话框类型的程序,整体界面如下。......
  • Debug Assertion Failed! Program: C:\Windows\SYSTEM32\mfc140ud.dll
    新建C++ MFC项目多文本对话框的模板,运行出错。解决办法:这是由于DockControlBar(&m_wndToolBar);引起的异常。在头文件MainFrm.h中重新定义  CMFCToolBar m_wndToolBar; 类型DockControlBar(&m_wndToolBar)改为DockPane(&m_wndToolBar);再次运行就不会出错了。......
  • 【MFC】CListCtrl 如何设置单元格颜色?
    CListCtrl默认可设置的内容很少,如单元格颜色默认无法设置。若想设置单元格颜色,需要对CListCtrl进行拓展,已有老外为我们写好demo,这里对其中原理、设置方法进行一个解析。其原理是:设置CListCtrl控件的OwerDraw属性为true,然后使用GDI画图函数进行各种自定义绘制。拓展的类为CColor......
  • MFC-数学函数
     sin正弦函数FLOATpi=3.1415926;FLOATf=sin(pi/2);//正弦函数/*参数:FLOAT以弧度为单位返回值:FLOAT*/       ......
  • 《MFC篇》悬浮button
    要在MFC中设置悬浮按钮,你可以按照以下步骤进行操作:首先,在你的对话框资源中创建一个普通的按钮控件,将其属性中的"Flat"设置为True,这将使按钮显示为一个扁平化的样式。在你的对话框类中添加按钮控件的成员变量。你可以使用类向导或手动添加。在对话框的OnInitDialog函数中,......
  • 微信 H5 页面兼容性——复制到剪贴板
    在开发微信H5页面时,时常会遇到难以解决的兼容性问题,现收集问题和解决方案,以备后用。在PC浏览器和手机移动端浏览器中,WebAPI提供了两种方式:1.1.Document.execCommand()方法Document.execCommand()是操作剪贴板的传统方法,各种浏览器都支持。它支持复制、剪切和粘贴这三......
  • 官网解决-找不到mfc140u.dll,无法继续执行代码
    问题:找不到mfc140u.dll,无法继续执行代码原因:一般都是电脑缺少或丢失了dll,或者没安装对应版本的vc运行库解决:直接去官网下载vc运行库,安装即可直接上Microsoft官网链接:https://answers.microsoft.com/zh-hans/windows/forum/all/%E5%BE%AE%E8%BD%AF%E5%B8%B8%E7%94%A8%E8%BF%90......