Index   Commented   Search   About

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:

  1. Opens the clipboard by calling the OpenClipboard function.

  2. Determines which of the available clipboard formats to retrieve.

  3. Retrieves the handle of the data in the selected format by calling the GetClipboardData function.

  4. 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.

  1. 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.

Following is the EditPaste function.

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();

}

Related Links

Software for Delphi and C++ Builder developers
Software for Visual Studio .NET developers
Software for Visual Basic 6 developers
Delphi Tips&Tricks
MegaDetailed.NET
TMS Scripter Studio Pro components for Delphi/C++Builder

More Online Helps

Win32 Multimedia Programmer's Reference (mmedia.hlp)
OLE Programmer's Reference (ole.hlp)
Microsoft Windows Pen API Programmer's Reference (penapi.hlp)
Microsoft Windows Sockets 2 Reference (sock2.hlp)
Microsoft Windows Telephony API (TAPI) Programmer's Reference (tapi.hlp)
Unix Manual Pages

Free Tech Secrets ;) Copyright © 2008 Free Tect Secrets ;) greatis just4fun network just4fun