mfc中如何将剪切板中的内容显示到当前窗口的指定位置

解决方案 »

  1.   


    /*Pasting Information from the Clipboard
    In the Label application, the application-defined EditPaste function pastes the content of the clipboard. This function does the following: Opens the clipboard by calling the OpenClipboard function. 
    Determines which of the available clipboard formats to retrieve. 
    Retrieves the handle to the data in the selected format by calling the GetClipboardData function. 
    Inserts a copy of the data into the document. The handle returned by GetClipboardData is still owned by the clipboard, so an application must not free it or leave it locked. 
    Closes the clipboard by calling the CloseClipboard function. 
    If a label is selected and contains an insertion point, the EditPaste function inserts the text from the clipboard at the insertion point. If there is no selection or if a label is selected, the function creates a new label, using the application-defined LABELBOX structure on the clipboard. The LABELBOX structure is placed on the clipboard by using a registered clipboard format. The structure, called LABELBOX, is defined as follows. 
    */
    // Show Example#define BOX_ELLIPSE  0 
    #define BOX_RECT     1 
     
    #define CCH_MAXLABEL 80 
    #define CX_MARGIN    12 
     
    typedef struct tagLABELBOX {  // box 
        RECT rcText;    // coordinates of rectangle containing text 
        BOOL fSelected; // TRUE if the label is selected 
        BOOL fEdit;     // TRUE if text is selected 
        int nType;      // rectangular or elliptical 
        int ichCaret;   // caret position 
        int ichSel;     // with ichCaret, delimits selection 
        int nXCaret;    // window position corresponding to ichCaret 
        int nXSel;      // window position corresponding to ichSel 
        int cchLabel;   // length of text in atchLabel 
        TCHAR atchLabel[CCH_MAXLABEL]; 
    } LABELBOX, *PLABELBOX;Following is the EditPaste function. Hide Example
    VOID 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.   

    http://zhidao.baidu.com/question/120331351.html