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类如下:

 

  1. class CMFCClipboardDlg : public CDialog  
  2. {  
  3. // Construction  
  4. public:  
  5.     CMFCClipboardDlg(CWnd* pParent = NULL); // standard constructor  
  6.   
  7. // Dialog Data  
  8.     enum { IDD = IDD_MFCCLIPBOARD_DIALOG };  
  9.   
  10.     protected:  
  11.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support  
  12.   
  13.   
  14. // Implementation  
  15. protected:  
  16.     HICON m_hIcon;  
  17.   
  18.     // Generated message map functions  
  19.     virtual BOOL OnInitDialog();  
  20.     afx_msg void OnPaint();  
  21.     afx_msg HCURSOR OnQueryDragIcon();  
  22.     DECLARE_MESSAGE_MAP()  
  23. public:  
  24.     afx_msg void OnBnClickedCopyButton();  
  25.     afx_msg void OnBnClickedCutButton();  
  26.     afx_msg void OnBnClickedPasteButton();  
  27. private:  
  28.     CEdit m_editTarget;  
  29.     CEdit m_editSource;  
  30. };  

主要功能:

拷贝:

 

  1. void CMFCClipboardDlg::OnBnClickedCopyButton()  
  2. {  
  3.     /////////////////////////////////////////////////////////////////////////  
  4.     // 1. Get text from edit control.  
  5.     //   
  6.   
  7.     CString strData;  
  8.     m_editSource.GetWindowTextW(strData);  
  9.   
  10.     int len = strData.GetLength();  
  11.   
  12.     if (len <= 0)  
  13.         return;  
  14.   
  15.   
  16.     /////////////////////////////////////////////////////////////////////////  
  17.     // 2. Open and empty clipboard. (OpenClipboard, EmptyClipboard)  
  18.     //   
  19.   
  20.     if (!OpenClipboard())  
  21.         return;  
  22.   
  23.     EmptyClipboard();   
  24.   
  25.   
  26.     /////////////////////////////////////////////////////////////////////////  
  27.     // 3. Create global buffer. (GlobalAlloc)  
  28.     //   
  29.   
  30.     HGLOBAL hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (len + 1));  
  31.       
  32.     if (hglbCopy == NULL)   
  33.     {   
  34.         CloseClipboard();   
  35.         return;   
  36.     }  
  37.   
  38.   
  39.     /////////////////////////////////////////////////////////////////////////  
  40.     // 4. Lock the buffer. (GlobalLock)  
  41.     //   
  42.   
  43.     char* lptstrCopy = (char*)GlobalLock(hglbCopy);   
  44.   
  45.   
  46.     /////////////////////////////////////////////////////////////////////////  
  47.     // 5. Copy text to the buffer. (strcpy)  
  48.     //   
  49.   
  50.     strcpy(lptstrCopy, (CStringA)strData);  
  51.   
  52.   
  53.     /////////////////////////////////////////////////////////////////////////  
  54.     // 6. Unlock the buffer. (GlobalUnlock)  
  55.     //   
  56.   
  57.     GlobalUnlock(hglbCopy);   
  58.   
  59.   
  60.     /////////////////////////////////////////////////////////////////////////  
  61.     // 7. Set buffer data to clipboard. (SetClipboardData)  
  62.     //   
  63.   
  64.     SetClipboardData(CF_TEXT, hglbCopy);   
  65.   
  66.   
  67.     /////////////////////////////////////////////////////////////////////////  
  68.     // 8. Close clipboard. (CloseClipboard)  
  69.     //   
  70.   
  71.     CloseClipboard();     
  72. }  

剪贴:

 

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


粘贴:

 

  1. void CMFCClipboardDlg::OnBnClickedPasteButton()  
  2. {  
  3.     /////////////////////////////////////////////////////////////////////////  
  4.     // 1. Check and open clipboard. (IsClipboardFormatAvailable,   
  5.     // OpenClipboard)  
  6.     //   
  7.   
  8.     if (!IsClipboardFormatAvailable(CF_TEXT))   
  9.         return;   
  10.   
  11.     if (!OpenClipboard())   
  12.         return;  
  13.   
  14.   
  15.     /////////////////////////////////////////////////////////////////////////  
  16.     // 2. Get clipboard data. (GetClipboardData)  
  17.     //   
  18.   
  19.     HGLOBAL hglb = GetClipboardData(CF_TEXT);  
  20.   
  21.   
  22.     /////////////////////////////////////////////////////////////////////////  
  23.     // 3. Set the data into edit control.  
  24.     //   
  25.   
  26.     if (hglb != NULL)   
  27.     {   
  28.         char* lptstr = (char*) GlobalLock(hglb);   
  29.         if (lptstr != NULL)   
  30.         {   
  31.             // Call the application-defined ReplaceSelection   
  32.             // function to insert the text and repaint the   
  33.             // window.   
  34.             CString displayData = CString(lptstr);  
  35.             m_editTarget.SetWindowTextW(displayData);  
  36.             GlobalUnlock(hglb);   
  37.         }   
  38.     }   
  39.   
  40.   
  41.     /////////////////////////////////////////////////////////////////////////  
  42.     // 4. Close clipboard. (CloseClipboard)  
  43.     //   
  44.   
  45.     CloseClipboard();   
  46.   
  47.     return;   
  48. }  

程序效果如下:

posted @ 2014-03-06 14:07  godjob  Views(658)  Comments(0Edit  收藏  举报