我是靠谱客的博主 柔弱小虾米,这篇文章主要介绍MFC中使用用户剪贴板(User clipboard in MFC),现在分享给大家,希望可以做个参考。

原文地址: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类如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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; };
主要功能:

拷贝:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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(); }
剪贴:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void CMFCClipboardDlg::OnBnClickedCutButton() { / // 1. Copy // OnBnClickedCopyButton(); / // 2. Clear the text. // m_editSource.SetWindowTextW(CString("")); }

粘贴:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部