Теми рефератів
> Авіація та космонавтика > Банківська справа > Безпека життєдіяльності > Біографії > Біологія > Біологія і хімія > Біржова справа > Ботаніка та сільське гос-во > Бухгалтерський облік і аудит > Військова кафедра > Географія
> Геодезія > Геологія > Держава та право > Журналістика > Видавнича справа та поліграфія > Іноземна мова > Інформатика > Інформатика, програмування > Історія > Історія техніки
> Комунікації і зв'язок > Краєзнавство та етнографія > Короткий зміст творів > Кулінарія > Культура та мистецтво > Культурологія > Зарубіжна література > Російська мова > Маркетинг > Математика > Медицина, здоров'я > Медичні науки > Міжнародні відносини > Менеджмент > Москвоведение > Музика > Податки, оподаткування > Наука і техніка > Решта реферати > Педагогіка > Політологія > Право > Право, юриспруденція > Промисловість, виробництво > Психологія > Педагогіка > Радіоелектроніка > Реклама > Релігія і міфологія > Сексологія > Соціологія > Будівництво > Митна система > Технологія > Транспорт > Фізика > Фізкультура і спорт > Філософія > Фінансові науки > Хімія > Екологія > Економіка > Економіко-математичне моделювання > Етика > Юриспруденція > Мовознавство > Мовознавство, філологія > Контакти
Українські реферати та твори » Информатика, программирование » Обмін даними в Windows

Реферат Обмін даними в Windows

Буфер обміну (CLIPBOARD)

У Windows передбачений спеціальний механізм обміну даними між різними додатками, званий буфер обміну (clipboard). Буфер обміну являє собою буфер, в який можуть бути поміщені дані яким додатком. Всі інші додатки Windows можуть прочитати ці дані або розмістити в цьому буфері свої.

Для того, що б не виникало плутанини при використанні буфера обміну, Windows передбачає застосування певних форматів даних, розташовуваних в буфері.

У деяких випадках буває зручно проглянути дані, розміщення в буфері обміну - для цих цілей Windows містить спеціальну програму перегляду вмісту буфера обміну, (Clipboard Viewer). Не треба змішувати між собою сам буфер обміну і програму його перегляду. Буфер обміну реалізований декількома функціями Windows і спеціальними даними.

При розгляді буфера обміну нам треба буде розглянути три питання:

1) як можна самим класти або читати дані з буфера обміну

2) як можна використовувати буфер обміну зі стандартним вікном-редактором

3) як написати власну програму перегляду вмісту буфера обміну. ​​

Попередньо ми розберемося з деякими основними поняттями, пов'язаними із застосуванням буфера обміну. ​​

Як ми вже сказали, Windows припускає використання певних форматів даних для передачі через буфер обміну. Звичайно, у Вас є можливість передавати дані у власному форматі, тільки для використання власним додатком, однак рекомендується дотримуватися загальноприйнятих стандартів, так як можливість передачі даних між самими різноманітними додатками є дуже зручною.

Кожному вживаному формату даних буфера обміну в Windows поставлений у відповідність певний номер. Windows визначає кілька стандартних форматів і надає для них певні символічні імена:

CF_TEXT відповідає ASCIIZ тексту

CF_BITMAP звичайний бітмапи

CF_DIB бітмапи, незалежний від пристрою

CF_PALETTE палітра (зазвичай застосовується разом з CF_DIB)

CF_METAFILEPICT метафайл

При відображенні даних цих форматів в програмі перегляду буфера обміну не виникає жодних проблем, так як Windows містить усі необхідні кошти для відображення цих даних. Однак Ви можете класти в буфер обміну дані у власному форматі. Якщо Ви хочете, що б їх відображала стандартна програма перегляду, то Ви повинні їх оголосити як

CF_OWNERDISPLAY дані, відображувані користувачем

У цьому випадку програма перегляду буде посилати спеціальні повідомлення Вашому вікну для відображення цих даних у вікні.

Кілька додаткових форматів, будучи звичайними форматами даних, мають відмінні від них номери. У символічних іменах таких даних присутня абревіатура 'DSP'

CF_DSPTEXT відповідає ASCIIZ тексту

CF_DSPBITMAP звичайний бітмапи

CF_DSPMETAFILEPICT метафайл

дані цих форматів відображаються в програмі перегляду як дані відповідних форматів, але зазвичай не використовуються іншими додатками, крім Вашого.

Крім розглянутих, Windows додатково визначає велика кількість інших стандартних форматів даних, однак вони використовуються порівняно рідко. У більшості випадків це специфічні формати даних різних популярних програм, які було вирішено включити в стандарт Windows.

При необхідності використання власного формату даних для буфера обміну треба отримати номер цього формату. Для того, що б уникнути можливих накладок, Ви повинні зареєструвати Ваш формат даних за допомогою функції

UINT RegisterClipboardFormat ( lpszFormatName);

для вже зареєстрованого формату Ви можете дізнатися його ім'я:

int GetClipboardFormatName ( nFormat, lpsBuffer, nMaxCount);

Буфер обміну містить не більше одного блоку даних кожного формату, причому всі дані, що знаходяться в буфері повинні бути покладені одним вікном. Так як дані, передані в буфер обміну, повинні бути доступні всім додаткам, то для їх передачі використовуються тільки блоки глобальної пам'яті.

Запис і читання даних з буфера обміну

Загальні правила роботи з буфером обміну зводяться до наступного:

1) Вся робота з буфером обміну повинна проводитися за час обробки одного повідомлення. Під час роботи з буфером Ви не повинні викликати ніяких функцій, які можуть передати управління іншому застосуванню. Тобто Ви не повинні використовувати функцій типу: DialogBox, MessageBox, GetMessage, PeekMessage.

Дані повинні розміщуватися тільки в переміщуваному блоці глобальної пам'яті.

Коли буфер обміну одержує дані, він оголошує себе власником цих даних, так що додаток більше не повинно використовувати передані дані. Більш того, ці дані не можна видаляти при завершенні роботи Вашого додатки - коли буде треба, буфер обміну сам видалить їх.

Коли Ви читаєте дані з буфера обміну, то Ви отримуєте хендл блоку даних. Так як ці дані закріплені за буфером, то Ви не повинні з ними працювати, Вам необхідно скопіювати їх до себе.

При обміні даними з буфером обміну можна передавати йому замкнені блоки даних, так само як не можна залишати їх замкненими після читання.

2) Перед початком обміну даними з буфером обміну Ви повинні його відкрити. Робиться це за допомогою функції

BOOL OpenClipboard ( hWnd);

якщо Ви покладете небудь дані в буфер, то вікно, вказане Вами, буде вважатися власником всіх даних буфера обміну. ​​

3) Потім Ви можете здійснити необхідні операції обміну даними. Якщо Ви збираєтеся покласти дані в буфер обміну, то Ви повинні попередньо видалити всі вже знаходяться в ньому дані:

BOOL EmptyClipboard ( void);

і тільки потім покласти потрібні дані, скориставшись функцією:

HGLOBAL SetClipboardData ( nFormat, hGlobal);

параметр nFormat задає ім'я формату даних, а hGlobal є хендл глобального блоку даних. Функція повертає Вам новий хендл цього блоку даних, за допомогою якого Ви можете звертатися до цих даних до закриття буфера обміну. ​​

Ви можете покласти в буфер обміну кілька блоків даних різного формату одночасно. Так як покладені в буфер дані зберігаються там або до його очищення, або до завершення роботи Windows, то передавати великі блоки може бути занадто накладно.

Для цього випадку в Windows передбачений механізм передачі даних із затримкою. Викликаючи функцію SetClipboardData Ви вказуєте замість Хендли блоку даних NULL. Це означає, що дані для буфер обміну у Вас є, але передавати Ви їх будете тільки на вимогу. Для такої передачі Вам треба буде обробляти три повідомлення:

WM_RENDERFORMAT nFormat 0L

повідомлення вимагає дані для буфера обміну. При цьому буфер вже відкритий іншим додатком, тому Вам відкривати або закривати його не треба. Вам треба просто викликати функцію

SetClipboardData ( nFormat, hGlobal);

передавши їй хендл реального блоку даних.

WM_RENDERALLFORMATS, 0, 0L

повідомлення посилається Вашому вікну коли воно знищується, а буфер обміну містить затримані дані Вашого вікна. Ви повинні звичайним чином (тобто відкрити-очистити-покласти-закрити) передати всі дані в буфер обміну. ​​

WM_DESTROYCLIPBOARD, 0, 0L

повідомлення інформує Вас про те, що викликана функція EmptyClipboard, коли буфер обміну містить затримані дані Вашого вікна. Ваші дані більше не знадобляться, тому Ви можете звільнити використовувані структури даних.

Якщо Ви збираєтеся тільки читати дані з буфера обміну, то очищати його не треба, а отримати дані потрібного формату можна за допомогою функції

HGLOBAL GetClipboardData ( nFormat);

Функція повертає хендл глобального блоку пам'яті, який Ви повинні скопіювати до себе.

4) Після завершення обміну з буфером обміну Ви повинні закрити його за допомогою функції

BOOL CloseClipboard ( void);

На цьому закінчуються операції обміну даними з буфером обміну. ​​

Крім розгл...


Страница 1 из 7 | Следующая страница

Друкувати реферат
Замовити реферат
Поиск
Товары
загрузка...