ALTE DOCUMENTE
|
||||||
Clipboard
Clipboard Windows выполняет две основные функции. Во-первых, он служит буфером памяти для кратковременного хранения данных: чтобm 858n137i 9; в текстовом редакторе переместить фрагмент текста документа, необm 858n137i 3;одимо скопировать текст в буфер обмена, а затем уже вставить в новое место своего документа. Второй функцией буфера обмена является поддержка простейшей формы информационного межпроцессного взаимодействия для различных приложений Windows
API
Clipboard
ChangeClipboardChain | ||
CloseClipboard | ||
CountClipboardFormats | ||
EmptyClipboard | ||
EnumClipboardFormats | ||
GetClipboardData | ||
GetClipboardFormatName | ||
GetClipboardOwner | ||
GetClipboardViewer | ||
GetOpenClipboardWindow | ||
GetPriorityClipboardFormat | ||
IsClipboardFormatAvailable | ||
OpenClipboard | ||
RegisterCHpboardFormat | ||
SetClipboardData | ||
SetClipboardViewer |
OpenClipboard EmptyClipboard SetClipboardData GetClipboardData CloseClipboard API, как правило, используются лишь некоторые из них. Большинство же применяются только в особm 858n137i 9;х, редко возникающих ситуациях. Что касается подсистемы работы с буфером обмена, то программа может, например, отслеживать содержимое последнего. Такие программы называются программами просмотра буфера обмена (clipboard viewer API Windows
Windows
1) выделить блок глобальной памяти, достаточный для того, чтобm 858n137i 9; хранить в нем данные, которые необm 858n137i 3;одимо поместить в буфер обмена;
// Выделить блок глобальной памяти и получить
// его дескриптор
hGout GlobalAlloc GHND GMEM DDESHARE
(DWORD)MAXSIZE);
=(char*)GlobalLock(hGout);
// Операторы копирования текста
// в глобальную память
GlobalUnlock(hGout);
if(OpenClipboard(hwnd))
hGout GlobalAlloc
HGLOBAL GlobalAlloc(UINT How, DWORD dwSize);
GlobalAlloc NULL dwSize NULL How
GHND | ||
GMEM_DDESHARE |
c |
|
GMEM_DISCARDABLE | ||
GMEM_LOWER | ||
GMEM_NOCOMPACT | ||
GMEM NODISCARD | ||
GMEM_SHARE |
To GMEM DDESHARE |
|
GMEM ZEROINIT | ||
GPTR |
GlobalAlloc
GlobalAlloc GlobalAlloc GlobalLock
LPVOID GlobalLock HGLOBAL hObj
GlobalLock hObj GlobalLock NULL при возникновении ошибки. Чтобm 858n137i 9; осуществить обращение к глобальным блокам памяти, эти блоки нужно обязательно зафиксировать. Таким образом, вызов функции GlobalLock
После получения указателя на глобальный блок памяти необm 858n137i 3;одимо скопировать в этот блок данные, которые Вы хотите поместить в буфер обмена. Когда копирование завершится, блок памяти можно разблокировать, вызвав функцию GlobalUnlock
BOOL GlobalUnlock HGLOBAL hObj
GlobalUnlock hObj
OpenClipboard
BOOL OpenClipboard HWND hWnd
OpenClipboard hWnd
EmptyClipboard
BOOL EmptyClipboard void
EmptyClipboard
Чтобm 858n137i 9; записать данные в буфер обмена, его следует настроить на память, содержащую эти данные. Это делается при помощи вызова функции SetClipboardData
HANDLE SetClipboardData UINT Format HANDLE hData
SetClipboardData hData NULL
Format
CF BITMAP |
bitmap |
|
CF DIB |
bitmap BITMAPINFO |
|
CF DIF |
Data Interchange Format |
|
CF_DSPBITMAP | ||
CF_DSPENHMETAFILE | ||
CF_DSPMETAFILEPICT | ||
CF_DSPTEXT | ||
F_ENHMETAFILE | ||
CF_METAFILEPICT |
METAFILEPICT |
|
CF_OEMTEXT |
OEM |
|
CF_OWNERDISPLAY | ||
CF_PALETTE | ||
CF_PENDATA | ||
CF_RIFF |
(Resource Interchange File Format) |
|
CF_SYLK | ||
CF_TEXT | ||
CF TIFF |
TIFF |
|
CF_WAVE |
WAVE |
|
CF UNICODETEXT |
UNICODE |
CF TEXT CF OEMTEXT CF UNICODETEXT CR LF CF PRTVATEFIRST CF PRIVATELAST CF GDIOBJFIRST CF GDIOBJLAST
CloseClipboard
BOOL CloseClipboard void
if(OpenClipboard(hwnd))
Чтобm 858n137i 9; получить доступ к данным, хранящимся в буфере обмена, последний должен быть открыт. После этого нужно получить дескриптор глобальной памяти, в которой хранятся данные хбуфера обмена. Это делается при помощи функции GetClipboardData
HANDLE GetClipboardData UINT Format
GetClipboardData Format NULL CF TEXT GetClipboardData GlobalLock
GetClipboardData Windows Windows
Clipboard
Приведенная ниже программа демонстрирует доступ к буферу обмена: она записывает данные в этот буфер и читает их. Профамма предназначена для чтения только текстовых данных, хотя ее можно модифицировать таким образом, чтобm 858n137i 9; она могла читать данные и других форматов. Программа записывает текст в буфер обмена по команде меню Записать в буфер и читает данные по команде Прочесть из буфера. В буфер обмена можно также записать блок текста из другой программы (текстового редактора) и затем прочесть его при помощи данной программы.
Clipboard
#include <Windows.h>
#include <String.h>
#include "Clip.h"
#define Maxsize 100
LRESULT CALLBACK WindowFunc(HWND, UINT,
WPARAM, LPARAM);
char szWinName[]="МоеОкно"; // Имя класса окна
HGLOBAL hGout, hGin;
char text[]="Это текст для буфера обмена";
int WINAPI WinMain(HINSTANCE hThisInst,
HINSTANCE hPrevInst,
LPSTR lpszArgs,
int nWinMode)
return msg wParam
}
Windows
// параметров сообm 858n137i 7;ения из очереди сообm 858n137i 7;ений
LRESULT CALLBACK WindowFunc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
break;
case ID_READFROMCLIP:
if(OpenClipboard(hwnd))
}
break
case WM DESTROY // Завершение программы
PostQuitMessage
break
default
// Все сообm 858n137i 7;ения, не обрабатываемые в
// данной функции, направляются на обработку
// по умолчанию
return DefWindowProc(hwnd,message,
wParam lParam
}
return
}
Для этой программы необm 858n137i 3;одим следующий файл ресурсов Clipboard rc
#include <Windows.h>
#include "Clip.h"
MYMENU MENU
}
MYMENU ACCELERATORS
Clip h
#define ID_OUTTOCLIP 101
#define ID_READFROMCLIP 102
![]() |
Clipboard
Microsoft Visual
Windows
7. Шилдт Г. Программирование на С и С++ для Windows. - К.: Торгово-издательское бюро BHV, 2001. - 408 с.
|