Results 1 to 4 of 4

Thread: SetClipboardData() in VC++

  1. #1
    -=EtnieS=-
    Guest

    Question SetClipboardData() in VC++

    I'm having a lot of problems trying to implement a Copy to the Clipboard function in my keygen.

    Especially SetClipboardData() disturbs me...

    Can someone explain that API to me ? .. I'm a newbie in C++, so I don't understand the concept of data handles too..
    I promise that I have read the FAQ and tried to use the Search to answer my question.

  2. #2
    read MSDN in the site of M$.

    or just get a book named "Programming Windows". It is detailly explained in it.
    Last edited by Solomon; November 13th, 2001 at 21:37.

  3. #3
    binbin
    Guest
    VC??
    Just type F1.
    I like MSDN CD.
    I promise that I have read the FAQ and tried to use the Search to answer my question.

  4. #4
    binbin
    Guest

    Example from MSDN CD

    Copying Information to the Clipboard
    In the Label application, the application-defined EditCopy function copies the current selection to the clipboard. This function does the following:

    Opens the clipboard by calling the OpenClipboard function.
    Empties the clipboard by calling the EmptyClipboard function.
    Calls the SetClipboardData function once for each clipboard format the application provides.
    Closes the clipboard by calling the CloseClipboard function.
    Depending on the current selection, the EditCopy function either copies a range of text or copies an application-defined structure representing an entire label. The structure, called LABELBOX, is defined as follows.

    #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 EditCopy function.

    BOOL WINAPI EditCopy(VOID)
    {
    PLABELBOX pbox;
    LPTSTR lptstrCopy;
    HGLOBAL hglbCopy;
    int ich1, ich2, cch;

    if (hwndSelected == NULL)
    return FALSE;

    // Open the clipboard, and empty it.

    if (!OpenClipboard(hwndMain))
    return FALSE;
    EmptyClipboard();

    // Get a pointer to the structure for the selected label.

    pbox = (PLABELBOX) GetWindowLong(hwndSelected, 0);

    // If text is selected, copy it using the CF_TEXT format.

    if (pbox->fEdit)
    {
    if (pbox->ichSel == pbox->ichCaret) // zero length
    {
    CloseClipboard(); // selection
    return FALSE;
    }

    if (pbox->ichSel < pbox->ichCaret)
    {
    ich1 = pbox->ichSel;
    ich2 = pbox->ichCaret;
    }
    else
    {
    ich1 = pbox->ichCaret;
    ich2 = pbox->ichSel;
    }
    cch = ich2 - ich1;

    // Allocate a global memory object for the text.

    hglbCopy = GlobalAlloc(GMEM_DDESHARE,
    (cch + 1) * sizeof(TCHAR));
    if (hglbCopy == NULL)
    {
    CloseClipboard();
    return FALSE;
    }

    // Lock the handle and copy the text to the buffer.

    lptstrCopy = GlobalLock(hglbCopy);
    memcpy(lptstrCopy, &pbox->atchLabel[ich1],
    cch * sizeof(TCHAR));
    lptstrCopy[cch] = (TCHAR) 0; // null character
    GlobalUnlock(hglbCopy);

    // Place the handle on the clipboard.

    SetClipboardData(CF_TEXT, hglbCopy);
    }

    // If no text is selected, the label as a whole is copied.

    else
    {
    // Save a copy of the selected label as a local memory
    // object. This copy is used to render data on request.
    // It is freed in response to the WM_DESTROYCLIPBOARD
    // message.

    pboxLocalClip = (PLABELBOX) LocalAlloc(
    LMEM_FIXED,
    sizeof(LABELBOX)
    );
    if (pboxLocalClip == NULL)
    {
    CloseClipboard();
    return FALSE;
    }
    memcpy(pboxLocalClip, pbox, sizeof(LABELBOX));
    pboxLocalClip->fSelected = FALSE;
    pboxLocalClip->fEdit = FALSE;

    // Place a registered clipboard format, the owner-display
    // format, and the CF_TEXT format on the clipboard using
    // delayed rendering.

    SetClipboardData(uLabelFormat, NULL);
    SetClipboardData(CF_OWNERDISPLAY, NULL);
    SetClipboardData(CF_TEXT, NULL);
    }

    // Close the clipboard.

    CloseClipboard();

    return TRUE;
    }
    I promise that I have read the FAQ and tried to use the Search to answer my question.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •