操作系统

当前位置:金沙棋牌 > 操作系统 > 用代码操纵剪切板

用代码操纵剪切板

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-11-09 19:48

松树宣布于微博:

拷贝与粘贴文本   
      
  下面的源代码演示了怎么将文件(蕴含在CString对象“source”中卡塔 尔(英语:State of Qatar)拷贝到剪贴板上。  

#ifndef __HSS_AUTO_CLIPBOARD_HSS__
#define __HSS_AUTO_CLIPBOARD_HSS__

    
  CString   source;     
  //put   your   text   in  source   
  if(OpenClipboard())   
  {   
                    HGLOBAL  clipbuffer;   
                    char  *   buffer;   
                    EmptyClipboard();  
                    clipbuffer  =   GlobalAlloc(GMEM_DDESHARE,  source.GetLength()+1);   
                    buffer  =   (char*)GlobalLock(clipbuffer);   
                    strcpy(buffer,  LPCSTR(source));   
                    GlobalUnlock(clipbuffer);  
                    SetClipboardData(CF_TEXT,clipbuffer);  
                    CloseClipboard();  
  }  

/*********************************************************************************
*  2012-10-30
活动复制内容到剪贴板

   
  反过来,下边包车型客车代码是用来贯彻从剪贴板上拿到文本的。  

  用法:

    
  char   *   buffer   =  NULL;   
  //open   the   clipboard   
  CString   fromClipboard;   
  if   (   OpenClipboard()  )     
  {   
                    HANDLE  hData   =   GetClipboardData(  CF_TEXT   );   
                    char  *   buffer   =   (char*)GlobalLock(  hData   );   
                    fromClipboard  =   buffer;   
                    GlobalUnlock(  hData   );   
                    CloseClipboard();  
  }  

  复制:
  auto_clipboard a(hwnd, psz);

    
  拷贝与粘贴WMF(enhanced)数据   
      
  你想在您的顺序中往剪贴板上“画”以致向剪贴板读取图形吗?请放心,那几个――轻便!示范代码如下,其达成的是往剪贴板上写豆蔻梢头enhanced  metafile。  

  粘贴:
  CString sz;
  auto_clipboard::GetText(sz);
***************************************************************************/

    
  if   (   OpenClipboard()  )   
  {   
                    EmptyClipboard();  
      
                    //create  the   metafile   DC   
                    CMetaFileDC  *   cDC   =   new  CMetaFileDC();   
                    cDC->CreateEnhanced(GetDC(),NULL,NULL,"the_name");  
      
                    //call  draw   routine   here   that  makes   GDI   calls   int  cDC   
      
                    //close  meta   CMetafileDC   and   get  its   handle   
                    HENHMETAFILE  handle   =   cDC->CloseEnhanced();   
      
                    //place  it   on   the   clipboard   
                    SetClipboardData(CF_ENHMETAFILE,handle);  
                    CloseClipboard();  
金沙棋牌,      
                    //delete  the   dc   
                    delete  cDC;   
  }          

class auto_clipboard
{
public:
    auto_clipboard(HWND hwnd, LPCTSTR pszText)
    {
        if (::OpenClipboard(hwnd))
        {
            ::EmptyClipboard();

    
  好啊,该演示反过来如何做的代码了。我们从剪贴板上获得metafile并将其画到自身的应用程序的顾客区DC(设备上下文卡塔尔国上(仅仅是个考试而已,实际上你可能更想将它拷贝风度翩翩份儿卡塔尔。        

            HANDLE hMem = ::GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE , strlen(pszText)+1);
            if (hMem)
            {
                char* pszMem = (char*)(::GlobalLock(hMem));
                if (pszMem)
                {
                    strcpy(pszMem, pszText);
                    ::GlobalUnlock(hMem);
                    SetClipboardData(CF_TEXT, hMem);
                }
                ::GlobalFree(hMem);
            }
            CloseClipboard();
        }
    }

  if  (   OpenClipboard()   )   
  {   
                    //Get  the   clipboard   data   
                    HENHMETAFILE  handle   =  (HENHMETAFILE)GetClipboardData(CF_ENHMETAFILE);   
      
                    //play  it   into   a   DC   (our  own   DC   in   this  example)   
                    CClientDC  dc(this);   
                    CRect  client(0,0,200,200);   
                    dc.PlayMetaFile(handle,client);                            
      
                    //close  the   clipboard   
                    CloseClipboard();  
  }  

    ~auto_clipboard()
    {
    }

    
  拷贝与粘贴一张位图(BitMap卡塔 尔(英语:State of Qatar)        
    
  拷贝和粘贴位图可是供给有些神秘的拍卖的,可是基本的考虑依旧一直以来。请看上边包车型客车代码。  

    /*************************************************************************
    * auto_clipboard    :    2014年12月2日
    * CString sz        :   
    **************************************************************************/
#ifdef __AFX_H__
    static BOOL GetText(CString& sz)
    {
        if (!OpenClipboard(0))        
            return FALSE;

  if  (   OpenClipboard()   )   
  {   
                    EmptyClipboard();  
                    //create  some   data   
                    CBitmap  *   junk   =   new  CBitmap();   
                    CClientDC  cdc(this);   
                    CDC  dc;   
                    dc.CreateCompatibleDC(&cdc);  
                    CRect  client(0,0,200,200);   
                    junk->CreateCompatibleBitmap(&cdc,client.Width(),client.Height());  
                    dc.SelectObject(junk);  
      
                    //call  draw   routine   here   that  makes   GDI   calls   
                    DrawImage(&dc,CString("Bitmap"));  
      
                    //put  the   data   on   the  clipboard   
                    SetClipboardData(CF_BITMAP,junk->m_hObject);  
                    CloseClipboard();  
      
                    //copy  has   been   made   on  clipboard   so   we   can  delete   
                    delete  junk;   
  }

        HANDLE hClip = GetClipboardData(CF_TEXT);

   
      
  如下示例代码是从剪贴板上收获一张位图,将它粘贴到顾客区DC中。  

        if (hClip == 0)
        {
            CloseClipboard();
            return FALSE;
        }

  if  (   OpenClipboard()   )   
  {   
                    //Get  the   clipboard   data   
                    HBITMAP  handle   =  (HBITMAP)GetClipboardData(CF_BITMAP);   
                    CBitmap  *   bm   =  CBitmap::FromHandle(handle);   
      
                    CClientDC  cdc(this);   
                    CDC  dc;   
                    dc.CreateCompatibleDC(&cdc);  
                    dc.SelectObject(bm);  
                    cdc.BitBlt(0,0,200,200,&dc,0,0,SRCCOPY);  
      
                    CloseClipboard();  
  }  

        LPVOID pRes = (LPVOID)GlobalLock(hClip);

    
    
  建设构造并采纳你本身定做的多少格式   
      
  若是你要拷贝、粘贴此外格式的数额,能够用RegisterClipboardFormat()  API函数先将此格式注册,然后就能够“妄自尊大”了。那大致是太有用了,越发是在我们生死与共的应用程序中拷贝资料。若是大家有下边包车型客车构造:      

        if (pRes == 0)
        {
            CloseClipboard();
            return FALSE;
        }

  struct  MyFormatData   
  {   
                    long  val1;   
                    int  val2;   
  };  

        sz = (char*)pRes;

          
  想将此布局的多少拷贝到剪贴板上。能够那样达成:  

        GlobalUnlock(hClip);

  UINT  format   =  RegisterClipboardFormat("MY_CUSTOM_FORMAT");   
  if(OpenClipboard())   
  {   
                    //make  some   dummy   data   
                    MyFormatData  data;   
                    data.val1  =   100;   
                    data.val2  =   200;   
      
                    //allocate  some   global   memory   
                    HGLOBAL  clipbuffer;   
                    EmptyClipboard();  
                    clipbuffer  =   GlobalAlloc(GMEM_DDESHARE,  sizeof(MyFormatData));   
                    MyFormatData  *   buffer   =  (MyFormatData*)GlobalLock(clipbuffer);   
      
                    //put  the   data   into   that  memory   
                    *buffer  =   data;   
      
                    //Put  it   on   the   clipboard   
                    GlobalUnlock(clipbuffer);  
                    SetClipboardData(format,clipbuffer);  
                    CloseClipboard();  
  }

        CloseClipboard();

        
    
  想把它从剪贴板上读下来的话,也轻便:        
    
  //第三遍调用时,此格式已经登记过了,读下去就行了  

        return TRUE;
    }
#endif
};

  UINT  format   =  RegisterClipboardFormat("MY_CUSTOM_FORMAT");   
  MyFormatData   data;   
  if   (   OpenClipboard()  )     
  {   
                    //get  the   buffer   
                    HANDLE  hData   =   GetClipboardData(format);   
                    MyFormatData  *   buffer   =   (MyFormatData  *)GlobalLock(   hData   );   
      
                    //留生机勃勃份儿本地拷贝   
                    data  =   *buffer;   
      
                    GlobalUnlock(  hData   );   
                    CloseClipboard();  
  }

#endif

      
    
  --------------------------------------------------------------------------------    
      
    
  拿到剪贴板变化文告(Getting  notified   of   clipboard   changes卡塔尔   
      
  风姿罗曼蒂克旦剪贴板上的剧情发生更换,我们都盼望能够意识到(经由windows音信卡塔尔,那是很有用的。你能够用函数SetClipboardViewer()来捕获WM_DRAWCLIPBOARD消息。      
      
  在您的初始化代码中调用:                        

SetClipboardViewer();    //add   us   to   clipboard  change   notification   chain

   
      
  在您的音信映射(message   map卡塔尔中加上:                        

ON_MESSAGE(WM_DRAWCLIPBOARD,  OnClipChange)     //clipboard  change   notification

   
      
  将其定义为:                      

  afx_msg  void   OnClipChange();    //clipboard   change   notification  

      
  实现为:  

  void  CDetectClipboardChangeDlg::OnClipChange()     
  {   
                    //do  something   here,   for   example   
                    CTime  time   =   CTime::GetCurrentTime();   
                    SetDlgItemText(IDC_CHANGED_DATE,time.Format("%a,  %b   %d,   %Y   --  %H:%M:%S"));   
      
                    DisplayClipboardText();  
  }  

    
  --------------------------------------------------------------------------------      
      
    
  将数据粘贴到别的应用程序窗口中的方法   
      
  作者感觉假诺能把公文拷贝到剪贴板上(参见下边包车型地铁代码卡塔 尔(阿拉伯语:قطر‎,然后再在其它叁个应用程序元帅那几个文件粘贴过来,这样才有用。作者写了二个十分不错的本土应用程序,此程序行使了包涵此手艺的第三方的言语翻译包。超级轻松,仅是赢得指标窗口的句柄,并向它发送“PASTE”音信就OK了。             

SendMessage(m_hTextWnd,  WM_PASTE,   0,   0);   

本文由金沙棋牌发布于操作系统,转载请注明出处:用代码操纵剪切板

关键词:

上一篇:集群安装配置及部署说明

下一篇:没有了