/*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;
// 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.
/*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();
}