您的位置:首页 > 其它

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

2013-05-01 00:52 267 查看
原文地址: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;
}
程序效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: