代码逻辑:
拷贝功能:

1.从编辑控件中获取文本。
2.打开并清空剪贴板。(OpenClipboard,EmptyClipboard)
3.创建一个全局缓冲区。(GlobalAlloc)
4.锁定缓冲区。(GlobalLock)
5.将文本拷贝到缓冲区。(strcpy)
6.解锁缓冲区。(GlobalUnlock)
7.将缓冲区数据设置到剪贴板(SetClipboradData)
8.关闭剪贴板(CloseClipboard)
剪切功能:
1.拷贝(参考拷贝功能)
2.删除文本。
粘贴功能:
1.检查并打开剪贴板.(IsClipboardFormatAvailable,OpenClipboard)
2.获得剪贴板数据.(GetClipboardData)
3.将数据设置到编辑框.
4.关闭剪贴板.(CloseClipboard)

按照上面的代码逻辑顺序主要的代码如下(稍后会提供整个工程文件的下载)

免积分下载地址:http://download.csdn.net/detail/zy_dreamer/5319129

基于对话框的程序Dialog类如下:

  1. class CMFCClipboardDlg : public CDialog
  2. {
  3. // Construction
  4. public:
  5. CMFCClipboardDlg(CWnd* pParent = NULL); // standard constructor
  6. // Dialog Data
  7. enum { IDD = IDD_MFCCLIPBOARD_DIALOG };
  8. protected:
  9. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  10. // Implementation
  11. protected:
  12. HICON m_hIcon;
  13. // Generated message map functions
  14. virtual BOOL OnInitDialog();
  15. afx_msg void OnPaint();
  16. afx_msg HCURSOR OnQueryDragIcon();
  17. DECLARE_MESSAGE_MAP()
  18. public:
  19. afx_msg void OnBnClickedCopyButton();
  20. afx_msg void OnBnClickedCutButton();
  21. afx_msg void OnBnClickedPasteButton();
  22. private:
  23. CEdit m_editTarget;
  24. CEdit m_editSource;
  25. };

主要功能:

拷贝:

  1. void CMFCClipboardDlg::OnBnClickedCopyButton()
  2. {
  3. /////////////////////////////////////////////////////////////////////////
  4. // 1. Get text from edit control.
  5. //
  6. CString strData;
  7. m_editSource.GetWindowTextW(strData);
  8. int len = strData.GetLength();
  9. if (len <= 0)
  10. return;
  11. /////////////////////////////////////////////////////////////////////////
  12. // 2. Open and empty clipboard. (OpenClipboard, EmptyClipboard)
  13. //
  14. if (!OpenClipboard())
  15. return;
  16. EmptyClipboard();
  17. /////////////////////////////////////////////////////////////////////////
  18. // 3. Create global buffer. (GlobalAlloc)
  19. //
  20. HGLOBAL hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (len + 1));
  21. if (hglbCopy == NULL)
  22. {
  23. CloseClipboard();
  24. return;
  25. }
  26. /////////////////////////////////////////////////////////////////////////
  27. // 4. Lock the buffer. (GlobalLock)
  28. //
  29. char* lptstrCopy = (char*)GlobalLock(hglbCopy);
  30. /////////////////////////////////////////////////////////////////////////
  31. // 5. Copy text to the buffer. (strcpy)
  32. //
  33. strcpy(lptstrCopy, (CStringA)strData);
  34. /////////////////////////////////////////////////////////////////////////
  35. // 6. Unlock the buffer. (GlobalUnlock)
  36. //
  37. GlobalUnlock(hglbCopy);
  38. /////////////////////////////////////////////////////////////////////////
  39. // 7. Set buffer data to clipboard. (SetClipboardData)
  40. //
  41. SetClipboardData(CF_TEXT, hglbCopy);
  42. /////////////////////////////////////////////////////////////////////////
  43. // 8. Close clipboard. (CloseClipboard)
  44. //
  45. CloseClipboard();
  46. }

剪贴:

  1. void CMFCClipboardDlg::OnBnClickedCutButton()
  2. {
  3. /////////////////////////////////////////////////////////////////////////
  4. // 1. Copy
  5. //
  6. OnBnClickedCopyButton();
  7. /////////////////////////////////////////////////////////////////////////
  8. // 2. Clear the text.
  9. //
  10. m_editSource.SetWindowTextW(CString(""));
  11. }

粘贴:

  1. void CMFCClipboardDlg::OnBnClickedPasteButton()
  2. {
  3. /////////////////////////////////////////////////////////////////////////
  4. // 1. Check and open clipboard. (IsClipboardFormatAvailable,
  5. // OpenClipboard)
  6. //
  7. if (!IsClipboardFormatAvailable(CF_TEXT))
  8. return;
  9. if (!OpenClipboard())
  10. return;
  11. /////////////////////////////////////////////////////////////////////////
  12. // 2. Get clipboard data. (GetClipboardData)
  13. //
  14. HGLOBAL hglb = GetClipboardData(CF_TEXT);
  15. /////////////////////////////////////////////////////////////////////////
  16. // 3. Set the data into edit control.
  17. //
  18. if (hglb != NULL)
  19. {
  20. char* lptstr = (char*) GlobalLock(hglb);
  21. if (lptstr != NULL)
  22. {
  23. // Call the application-defined ReplaceSelection
  24. // function to insert the text and repaint the
  25. // window.
  26. CString displayData = CString(lptstr);
  27. m_editTarget.SetWindowTextW(displayData);
  28. GlobalUnlock(hglb);
  29. }
  30. }
  31. /////////////////////////////////////////////////////////////////////////
  32. // 4. Close clipboard. (CloseClipboard)
  33. //
  34. CloseClipboard();
  35. return;
  36. }

程序效果如下:

MFC中使用用户剪贴板的更多相关文章

  1. 在MFC中添加用户自定义消息

    1.定义一个宏 (用户自定义消息从WM_USER开始) #define WM_XXXXX WM_USER+数值 2.声明一个函数并实现 afx_msg LRESULT OnXXXXX( WPARAM ...

  2. MFC中添加用户自定义消息

    1.定义一个宏(用户自定义消息从WM_USER开始) #define WM_XXXXX WM_USER+数值 2.声明一个成员函数并实现 afx_msg LRESULT OnXXXXX( WPARAM ...

  3. MFC中,如何自定义用户消息

    1.用处 在多个类之间传递消息.当需要响应用户操作,本类却无法实现时,可以向系统发出消息.然后让系统中的需要的位置实现它. 2.方法 2.1定义这个消息,并让拥有者发送这个这个消息,传递一个整型参数 ...

  4. MFC中使用FLASH

    一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash Player(大约 ...

  5. MFC中的各种DC区别

    转载自:xntop的<区别MFC中的CClientDC.CWindowDC.CPaintDC.CMetaFileDC> CClientDC及其子类 1. CClientDC类只能在客户区绘 ...

  6. MFC中对话框类(Dialog)的应用

    转载http://hi.baidu.com/jackywdx/item/feee8041d2c2e12310ee1e85 Windows应用程序通常是通过对话框接收用户输入.向用户输出信息,本节介绍应 ...

  7. MFC中快速应用OpenCV(转)

    转载链接:http://wiki.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%BA%94%E7%94%A8OpenCV 简介和缘 ...

  8. 不使用CvvImage类来在MFC中显示图像

    /* * ===================================================================================== * * Filen ...

  9. 转:MFC中创建多线程

    MFC中创建多线程   MFC的多线程函数必须声明为静态的或者是全局函数(不同的在于全局函数不能访问类的私有静态成员,而静态类函数可以):但这样的线程函数只能访问静态的成员变量,要实现访问类的其他成员 ...

随机推荐

  1. php的json校验json-schema

    客户端和服务端的http信息传递,采用json几乎成了标配.json格式简单,易于处理,不过由于没有格式规定,无法校验. 好在php有json-schema模块,可以用来验证json是否符合规定的格式 ...

  2. CR, LF, CR/LF区别与关系

    前言 在文本处理中,CR(Carriage Return),LF(Line Feed),CR/LF是不同操作系统上使用的换行符,具体如下: Dos和Windows采用回车+换行CR/LF表示下一行 而 ...

  3. 从文件/文件流的头字节中得到mime信息

    在写网络爬虫的时候,需要根据链接来获取文件类型,将内容正确存储.之前我都是根据链接的后缀来判断的,比如: http://img12.360buyimg.com/da/20120330/88_31_Zy ...

  4. Hibernate Annotation 字段 默认值

    http://emavaj.blog.163.com/blog/static/133280557201032262741999/ ——————————————————————————————————— ...

  5. php之道

    PHP The Right Way. Tweet 欢迎 目前网络上充斥着大量的过时资讯,让 PHP 新手误入歧途,并且传播着错误的实践以及不安全的代码.PHP 之道 收集了现有的 PHP 最佳实践.编 ...

  6. jQuery控制的不同方向的滑动(横向滑动等)

    引入jquery.js,复制以下代码,即可运行. <style type="text/css"> .slide { position: relative; height ...

  7. jsp中9个内置对象与servlet对应关系及四个作用域

    参考:  <jsp&servlet学习笔记.第2版.林信良><JSR-245 JavaServer Pages 2.2 Maintenance Release Specifi ...

  8. 采用预取(Prefetch)来加速你的网站(转)

    一.DNS预取 如果你像我一样想在网站上有一个Twitter小程序,还有网站分析,再也许一些网页字体,那么你必须要链接到一些其它域名,这意味着你将不得不引发DNS查询.我的建议通常是,不要还没有先适当 ...

  9. 【BZOJ】3172: [Tjoi2013]单词(后缀自动机)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3172 随便搞个sam就行了.(其实一开始看到数据n<=200, 单词长度不超过1e6,然后感觉 ...

  10. ubuntu 16.04安装 navicat

    原文地址:http://www.cnblogs.com/wbJson/p/5655537.html 下载地址:http://download2.navicat.com/download/navicat ...