MFC中使用用户剪贴板
代码逻辑:
拷贝功能:
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类如下:
- class CMFCClipboardDlg : public CDialog
- {
- // Construction
- public:
- CMFCClipboardDlg(CWnd* pParent = NULL); // standard constructor
- // Dialog Data
- enum { IDD = IDD_MFCCLIPBOARD_DIALOG };
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- // Implementation
- protected:
- HICON m_hIcon;
- // Generated message map functions
- virtual BOOL OnInitDialog();
- afx_msg void OnPaint();
- afx_msg HCURSOR OnQueryDragIcon();
- DECLARE_MESSAGE_MAP()
- public:
- afx_msg void OnBnClickedCopyButton();
- afx_msg void OnBnClickedCutButton();
- afx_msg void OnBnClickedPasteButton();
- private:
- CEdit m_editTarget;
- CEdit m_editSource;
- };
主要功能:
拷贝:
- void CMFCClipboardDlg::OnBnClickedCopyButton()
- {
- /////////////////////////////////////////////////////////////////////////
- // 1. Get text from edit control.
- //
- CString strData;
- m_editSource.GetWindowTextW(strData);
- int len = strData.GetLength();
- if (len <= 0)
- return;
- /////////////////////////////////////////////////////////////////////////
- // 2. Open and empty clipboard. (OpenClipboard, EmptyClipboard)
- //
- if (!OpenClipboard())
- return;
- EmptyClipboard();
- /////////////////////////////////////////////////////////////////////////
- // 3. Create global buffer. (GlobalAlloc)
- //
- HGLOBAL hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (len + 1));
- if (hglbCopy == NULL)
- {
- CloseClipboard();
- return;
- }
- /////////////////////////////////////////////////////////////////////////
- // 4. Lock the buffer. (GlobalLock)
- //
- char* lptstrCopy = (char*)GlobalLock(hglbCopy);
- /////////////////////////////////////////////////////////////////////////
- // 5. Copy text to the buffer. (strcpy)
- //
- strcpy(lptstrCopy, (CStringA)strData);
- /////////////////////////////////////////////////////////////////////////
- // 6. Unlock the buffer. (GlobalUnlock)
- //
- GlobalUnlock(hglbCopy);
- /////////////////////////////////////////////////////////////////////////
- // 7. Set buffer data to clipboard. (SetClipboardData)
- //
- SetClipboardData(CF_TEXT, hglbCopy);
- /////////////////////////////////////////////////////////////////////////
- // 8. Close clipboard. (CloseClipboard)
- //
- CloseClipboard();
- }
剪贴:
- void CMFCClipboardDlg::OnBnClickedCutButton()
- {
- /////////////////////////////////////////////////////////////////////////
- // 1. Copy
- //
- OnBnClickedCopyButton();
- /////////////////////////////////////////////////////////////////////////
- // 2. Clear the text.
- //
- m_editSource.SetWindowTextW(CString(""));
- }
粘贴:
- void CMFCClipboardDlg::OnBnClickedPasteButton()
- {
- /////////////////////////////////////////////////////////////////////////
- // 1. Check and open clipboard. (IsClipboardFormatAvailable,
- // OpenClipboard)
- //
- if (!IsClipboardFormatAvailable(CF_TEXT))
- return;
- if (!OpenClipboard())
- return;
- /////////////////////////////////////////////////////////////////////////
- // 2. Get clipboard data. (GetClipboardData)
- //
- HGLOBAL hglb = GetClipboardData(CF_TEXT);
- /////////////////////////////////////////////////////////////////////////
- // 3. Set the data into edit control.
- //
- if (hglb != NULL)
- {
- char* lptstr = (char*) GlobalLock(hglb);
- if (lptstr != NULL)
- {
- // Call the application-defined ReplaceSelection
- // function to insert the text and repaint the
- // window.
- CString displayData = CString(lptstr);
- m_editTarget.SetWindowTextW(displayData);
- GlobalUnlock(hglb);
- }
- }
- /////////////////////////////////////////////////////////////////////////
- // 4. Close clipboard. (CloseClipboard)
- //
- CloseClipboard();
- return;
- }
程序效果如下:
MFC中使用用户剪贴板的更多相关文章
- 在MFC中添加用户自定义消息
1.定义一个宏 (用户自定义消息从WM_USER开始) #define WM_XXXXX WM_USER+数值 2.声明一个函数并实现 afx_msg LRESULT OnXXXXX( WPARAM ...
- MFC中添加用户自定义消息
1.定义一个宏(用户自定义消息从WM_USER开始) #define WM_XXXXX WM_USER+数值 2.声明一个成员函数并实现 afx_msg LRESULT OnXXXXX( WPARAM ...
- MFC中,如何自定义用户消息
1.用处 在多个类之间传递消息.当需要响应用户操作,本类却无法实现时,可以向系统发出消息.然后让系统中的需要的位置实现它. 2.方法 2.1定义这个消息,并让拥有者发送这个这个消息,传递一个整型参数 ...
- MFC中使用FLASH
一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash Player(大约 ...
- MFC中的各种DC区别
转载自:xntop的<区别MFC中的CClientDC.CWindowDC.CPaintDC.CMetaFileDC> CClientDC及其子类 1. CClientDC类只能在客户区绘 ...
- MFC中对话框类(Dialog)的应用
转载http://hi.baidu.com/jackywdx/item/feee8041d2c2e12310ee1e85 Windows应用程序通常是通过对话框接收用户输入.向用户输出信息,本节介绍应 ...
- 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 简介和缘 ...
- 不使用CvvImage类来在MFC中显示图像
/* * ===================================================================================== * * Filen ...
- 转:MFC中创建多线程
MFC中创建多线程 MFC的多线程函数必须声明为静态的或者是全局函数(不同的在于全局函数不能访问类的私有静态成员,而静态类函数可以):但这样的线程函数只能访问静态的成员变量,要实现访问类的其他成员 ...
随机推荐
- 解决Access denied for user ''@'localhost' to database 'mysql'问题
在改动mysql的root用户password后,再登陆,提示如标题的错误,找了一番答案之后,最终解决,过程例如以下: 1.停掉mysql: service mysqld stop 2.使用 ...
- 比特币交易本质--UTXO(Unspent Transaction Output)
UTXO 代表 Unspent Transaction Output. Transaction 被简称为 TX,所以上面这个短语缩写为 UTXO. 现在的银行也好.信用卡也好.证券交易系统也好,互联网 ...
- Sys未定义处理方法
网上很多方法都试过,但是我发现,如果我把iis的端口号换一下,然后重新部署,就正常了,然后你可以再换回原来的端口号,也不会再报错了,应该是微软的一个bug,不知道大伙有什么更好的办法么
- PostgreSQL入门指南
默认端口:5432 创建用户与数据库 PostgreSQL初次安装后,默认会生成一个名为postgres的数据库和一个名为postgres的数据库用户.这里需要注意的是,同时还生成了一个名为postg ...
- MapReduce的InputFormat过程的学习
转自:http://blog.csdn.net/androidlushangderen/article/details/41114259 昨天经过几个小时的学习,把MapReduce的第一个阶段的过程 ...
- 代码生成利器:IDEA 强大的 Live Templates
Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量, logger 或者 bean 等等.对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates 功 ...
- 进制A~Z,全字母26进制转化
public String to26( int x ) { StringBuffer sBuffer = new StringBuffer(); int cur; x++; while( x > ...
- WPF 在TextBox失去焦点时检测数据,出错重新获得焦点解决办法
WPF 在TextBox失去焦点时检测数据,出错重新获得焦点解决办法 在WPF的TextBox的LostFocus事件中直接使用Focus()方法会出现死循环的问题 正确的使用方式有2中方法: 方法一 ...
- UIView 坐标转换
例子1 Controller的view中有一个tableView,tableView的cell上有一个button,现在需要将button的frame转为在Controller的view中的frame ...
- 一些 JS页面的 调用方式init()
//初始化.... var initAccManPage=function() { //初始化... var initChangeBtn = function(){ $("#btnChang ...