|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
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.
5. 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(); }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Склеивание Информации из Буфера
В приложении Этикетки, определенное прикладное функциональное прошлое EditPaste содержимое буфера. Эта функция делает следующим:
1. Открывает буфер вызывая функцию OpenClipboard. 2. Определяет который из доступных форматов буфера, чтобы извлекать. 3. Извлекает ручку данных в выбранный формат вызывая функцию GetClipboardData. 4. Включает копию данных в документ.
Ручка возвращанная GetClipboardData все еще принадлежащая буферу, так что приложение не должно освобождать это или оставляет заперто.
5. Закрывает буфер вызывая функцию CloseClipboard.
Если этикетка выбрана и содержалась точка введения, функция EditPaste включает текст из буфера в точке введения. Если нет выбора или если этикетка выбрана, функция создает новую этикетку, использовавшую определенную прикладную структуру LABELBOX в буфере. Структура LABELBOX установлена в буфере используя зарегистрированный формат буфера. Следующее является функцией EditPaste.
ПУСТОТА WINAPI EditPaste(ПУСТОТА) { PLABELBOX pbox; HGLOBAL hglb; LPTSTR lptstr; PLABELBOX pboxCopy; int cx, cy; HWND hwnd; pbox = hwndSelected == НЕДЕЙСТВИТЕЛЬНЫЙ? НЕДЕЙСТВИТЕЛЬНЫЙ : (PLABELBOX) GetWindowLong(hwndSelected, 0); // Если приложение - в режиме редактирования, // получать буфер текста. если (pbox != НЕДЕЙСТВИТЕЛЬНЫЙ && pbox->fEdit) { если (!IsClipboardFormatAvailable ВОЗВРАТА(CF_TEXT)); если (!OpenClipboard(hwndMain))
возврат; hglb = GetClipboardData(CF_TEXT); если (hglb != НЕДЕЙСТВИТЕЛЬНЫЙ) { lptstr = GlobalLock(hglb); если (lptstr != НЕДЕЙСТВИТЕЛЬНЫЙ) { // Вызов определенная функция приложения ReplaceSelection //, чтобы включать текст и перекрашивать // окно. ReplaceSelection(hwndSelected, pbox, lptstr); GlobalUnlock(hglb); }
} CloseClipboard(); возврат; } // Если приложение - не в режиме редактирования, // создавать окно этикетки. если (!IsClipboardFormatAvailable ВОЗВРАТА(uLabelFormat)); если (!OpenClipboard ВОЗВРАТА(hwndMain)); hglb = GetClipboardData(uLabelFormat); если (hglb != НЕДЕЙСТВИТЕЛЬНЫЙ) { pboxCopy = GlobalLock(hglb); если (pboxCopy != НЕДЕЙСТВИТЕЛЬНЫЙ) { cx = pboxCopy->rcText.right + CX_MARGIN;
cy = pboxCopy->rcText.top * 2 + cyText; hwnd = CreateWindowEx( WS_EX_NOPARENTNOTIFY | WS_EX_TRANSPARENT, atchClassChild, НЕДЕЙСТВИТЕЛЬНЫЙ, WS_CHILD, 0, 0, cx, cy, hwndMain, НЕДЕЙСТВИТЕЛЬНЫЙ, hinst, НЕДЕЙСТВИТЕЛЬНЫЙ ); если (hwnd != НЕДЕЙСТВИТЕЛЬНЫЙ) { pbox = (PLABELBOX) GetWindowLong(hwnd, 0); memcpy(pbox, pboxCopy, sizeof(LABELBOX)); ShowWindow(hwnd, SW_SHOWNORMAL);
SetFocus(hwnd); } GlobalUnlock(hglb); } } CloseClipboard(); }
|
|
|
|
| |