概述
原文地址: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;
}
程序效果如下:
最后
以上就是柔弱小虾米为你收集整理的MFC中使用用户剪贴板(User clipboard in MFC)的全部内容,希望文章能够帮你解决MFC中使用用户剪贴板(User clipboard in MFC)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复