void CAddFileDlg::OnButton1() 
{
    m_Edit1.GetWindowText(strSql);   strSql数据放入CTRL+C里面(然后按键盘ctrl+v能粘贴数据),如何实现???
}

解决方案 »

  1.   

    参考MSDN文档Clipboard操作
    OpenClipboard/CloseClipboard/EmptyClipboardVOID WINAPI EditPaste(VOID) 

        PLABELBOX pbox; 
        HGLOBAL   hglb; 
        LPTSTR    lptstr; 
        PLABELBOX pboxCopy; 
        int cx, cy; 
        HWND hwnd; 
     
        pbox = hwndSelected == NULL ? NULL : 
            (PLABELBOX) GetWindowLong(hwndSelected, 0); 
     
        // If the application is in edit mode, 
        // get the clipboard text. 
     
        if (pbox != NULL && pbox->fEdit) 
        { 
            if (!IsClipboardFormatAvailable(CF_TEXT)) 
                return; 
            if (!OpenClipboard(hwndMain)) 
                return; 
     
            hglb = GetClipboardData(CF_TEXT); 
            if (hglb != NULL) 
            { 
                lptstr = GlobalLock(hglb); 
                if (lptstr != NULL) 
                { 
                    // Call the application-defined ReplaceSelection 
                    // function to insert the text and repaint the 
                    // window. 
     
                    ReplaceSelection(hwndSelected, pbox, lptstr); 
                    GlobalUnlock(hglb); 
                } 
            } 
            CloseClipboard(); 
     
            return; 
        } 
     
        // If the application is not in edit mode, 
        // create a label window. 
     
        if (!IsClipboardFormatAvailable(uLabelFormat)) 
            return; 
        if (!OpenClipboard(hwndMain)) 
            return; 
     
        hglb = GetClipboardData(uLabelFormat); 
        if (hglb != NULL) 
        { 
            pboxCopy = GlobalLock(hglb); 
            if (pboxCopy != NULL) 
            { 
                cx = pboxCopy->rcText.right + CX_MARGIN; 
                cy = pboxCopy->rcText.top * 2 + cyText; 
     
                hwnd = CreateWindowEx( 
                    WS_EX_NOPARENTNOTIFY | WS_EX_TRANSPARENT, 
                    atchClassChild, NULL, WS_CHILD, 0, 0, cx, cy, 
                    hwndMain, NULL, hinst, NULL 
                ); 
                if (hwnd != NULL) 
                { 
                    pbox = (PLABELBOX) GetWindowLong(hwnd, 0); 
                    memcpy(pbox, pboxCopy, sizeof(LABELBOX)); 
                    ShowWindow(hwnd, SW_SHOWNORMAL); 
                    SetFocus(hwnd); 
                } 
                GlobalUnlock(hglb); 
            } 
        } 
        CloseClipboard(); 
    }
      

  2.   


    使用剪切板
    一:将文本装入剪切板:
    CString source("人约黄昏后"); 
    if(OpenClipboard()) 

    HGLOBAL hClipGlolbal; 
    char *buffer; 
    EmptyClipboard(); 
    hClipGlolbal=GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1); 
    buffer=(char*)GlobalLock(hClipGlolbal); 
    strcpy(buffer,LPCSTR(source)); 
    GlobalUnlock(hClipGlolbal); 
    SetClipboardData(CF_TEXT,hClipGlolbal); 
    CloseClipboard(); 



    从剪接板上获取文本,有两种方法
    (1):char * buffer; 
    if (IsClipboardFormatAvailable(CF_TEXT))
    if(OpenClipboard()) 

    buffer=(char*)GetClipboardData(CF_TEXT); 
    AfxMessageBox(buffer);

    CloseClipboard();
    (2):
    if(IsClipboardFormatAvailable(CF_TEXT))   //判断剪切板上的数据格式
    if (OpenClipboard())
    {
    HGLOBAL hClipGlolbal;
    char *buffer;
    hClipGlolbal=GetClipboardData(CF_TEXT);
    buffer=(char*)GlobalLock(hClipGlolbal);
    GlobalUnlock(hClipGlolbal);
    AfxMessageBox(buffer);
    }
    CloseClipboard();