• 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. }  

    程序效果如下:

  • 相关阅读:
    Android之绚丽的图片游览效果--有点像W7效果,透明的倒影,层叠的图片,渐变的颜色透明度
    小程序自定义弹出框
    从零学React Native之04自定义对话框
    ajax的content-download时间过慢问题的解决与思考
    小程序
    使用自定义视图的AlertDialog
    Android浮动按钮
    android 实现微信分享多张图片的功能
    AndroidUI多线程网络请求更新导致BUG
    ==比较时的坑
  • 原文地址:https://www.cnblogs.com/UnGeek/p/3584439.html
Copyright © 2020-2023  润新知