zoukankan      html  css  js  c++  java
  • MFC剪贴板通信

    1、建立一个基于对话框的应用程序,界面如下:

    2、对两个按钮进行消息响应:

     1 void CChipBoardOperateDlg::OnBnClickedBtnCopycb()
     2 {
     3     // TODO: 在此添加控件通知处理程序代码
     4     if( !OpenClipboard() )
     5     {
     6         AfxMessageBox( _T("Cannot open the Clipboard!") );
     7         return;
     8     }
     9 
    10     // 将剪贴板内容清空,释放数据资源,然后指定当前打开剪贴板的窗口为剪贴板的所有制
    11     if( !EmptyClipboard() )        
    12     {
    13         AfxMessageBox( _T("Cannot empty the Clipboard!") );
    14         return;
    15     }
    16 
    17     // 取回当前控件的数据,hData开辟全局内存区域,存放数据
    18     CStringW str;
    19     this->GetDlgItemTextW( IDC_EDIT_COPYCB, str );
    20     size_t cbStr = (str.GetLength()+1)*sizeof(TCHAR);
    21     HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE, cbStr);
    22     memcpy_s( GlobalLock(hData), cbStr, str.LockBuffer(), cbStr );
    23     GlobalUnlock( hData );
    24     str.UnlockBuffer();
    25 
    26     // 选择合适的格式
    27     UINT uiFormat = (sizeof(TCHAR)==sizeof(WCHAR)) ? CF_UNICODETEXT : CF_TEXT;
    28     if(::SetClipboardData( uiFormat, hData ) == NULL )
    29     {
    30         AfxMessageBox(_T("Unable to set Clipboard data"));
    31         CloseClipboard();
    32         return;
    33     }
    34     CloseClipboard();
    35 }
    36 
    37 
    38 void CChipBoardOperateDlg::OnBnClickedBtnPastecb()
    39 {
    40     if( !OpenClipboard() )
    41     {
    42         AfxMessageBox( _T("Cannot open the Clipboard!") );
    43         return;
    44     }
    45 
    46     // 选择合适的格式(读取的时候不用获得剪贴板的拥有权)
    47     UINT uiFormat = (sizeof(TCHAR)==sizeof(WCHAR) ? CF_UNICODETEXT : CF_TEXT );
    48     HANDLE hData = ::GetClipboardData( uiFormat );
    49     if( NULL == hData )
    50     {
    51         AfxMessageBox( _T("Unable to get Clipboard data!") );
    52         CloseClipboard();
    53         return;
    54     }
    55     CStringW str;
    56     LPCTSTR lpdata = (LPCTSTR)GlobalLock(hData);
    57     this->SetDlgItemTextW( IDC_EDIT_PASTECB, lpdata );
    58     GlobalUnlock( hData );
    59     CloseClipboard();
    60 }

    3、在上边的文本框中输入数据,然后单击SetClipboardData按钮打开剪贴板,将该文本框中数据写入剪贴板,最后关闭剪贴板;

    而单击下面的GetClipboardData按钮将打开剪贴板,从剪贴板内读取数据,显示到下面的文本框中,最后关闭剪贴板。

    为了显示操作结果的细节,可以打开Word的剪贴板观看过程,效果如下:

  • 相关阅读:
    【原创】MessageBox设置默认按钮
    探秘Win7计算器,这货不只是计算器
    android fill_parent和match_parent 的区别
    陈晓旭出家申明
    vi语法高亮
    EXTJS 常用控件的使用
    android平台下使用点九PNG技术
    【Android】附加Android源代码Androidandroid_gingerbread_javasrc
    ComboBox控件隐藏fieldLabel不能隐藏问题解决
    ScriptLoader.loadScripts cannot be called while the ScriptLoader is already loading scripts
  • 原文地址:https://www.cnblogs.com/dongsheng/p/3668921.html
Copyright © 2011-2022 走看看