MFC中使用用户剪贴板(User clipboard in MFC)

17 篇文章 2 订阅
12 篇文章 0 订阅

原文地址:http://code.msdn.microsoft.com/windowsdesktop/MFCClipboard-3cca4de2

MFC中使用用户剪贴板
技术:MFC,Windows General
主题:剪贴板
MFC程序:MFCClipboard 工程概述
使用:
剪贴板是一系列的函数和消息的集合,能够让应用程序转移数据。由于所有的程序都有权访问剪贴板,数据可以很容易的在程序之间或是程序自身中进行转移。
一个用户一般是通过选取程序编辑菜单中的命令来操作剪贴板。以下是对标准的剪贴板操作的简要描述。
剪切:将选择区域拷贝到剪贴板,然后删除文档中的选择区域。先前剪贴板中的内容会被销毁。
复制:将选择区域拷贝到剪贴板。文档保持不变。先前剪贴板中的内容会被销毁。
粘贴:将当前选择区域的内容用剪贴板的内容进行替换。剪贴板的内容不改变。
删除:从文档中删除选择区域内容。剪贴板的内容不改变。这个命令不涉及到剪贴板,但是它应该同剪贴板命令一同出现在编辑菜单中。
示例演示了如何通过程序来进行拷贝和粘贴文本。
代码逻辑:
拷贝功能:

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; 
}
程序效果如下:















  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值