Карти повідомлень і CBuilder

Windows – система, побудована на повідомленнях (messages) Повідомлення посилаються системою Windows додатках для інформування їх про зміни стану, зміни в середовищі, діях користувача, а також для інформування про те, що якась дія додатку необхідно виконати

З іншого боку, CBuilder – система, заснована на подіях (events) Події генеруються компонентами VCL і системою і передаються в форми програми та інші обєкти через обробники подій Ці обробники викликаються з інформацією, необхідної додатком для розуміння, що ж відбувається Дуже багато повідомлення Windows загорнуті в обкладинку події в CBuilder Наприклад, коли система Windows генерує повідомлення LBN_SELCHANGE, яке інформує додаток про те, що користувач зробив зміни вибору елементів у списку, обєкт бібліотеки VCL TListBox (список) в CBuilder генерує подія SelectionChange для власника списку Додавання обробника події SelectionChange – все, що потрібно для обробки низлежащего повідомлення Windows LBN_SELCHANGE

Звичайно, не завжди все так просто Windows містить буквально тисячі повідомлень, які можуть надсилатися у вкрай рідкісних випадках Також деякі повідомлення не доходять до низького рівня VCL, так як вони вже оброблені будь-яким обєктом VCL

Іноді вам знадобиться обробляти повідомлення, для яких немає відповідної події в обєкті VCL, до якого повідомлення відноситься Чудовий приклад цього – обєкт TForm і повідомлення WM_VSCROLL Повідомлення WM_VSCROLL надсилається формі, коли відбувається клацання на смузі прокрутки (scrollbar) форми (яка є частиною самої форми) в тому чи іншому місці Є декілька випадків, коли генерується це повідомлення Коли користувач натискає стрілку вниз або стрілку вгору на смузі прокрутки, повідомлення генерується з кодом SB_LINEUP (для стрілки вгору) і SB_LINEDOWN (для стрілки вниз) Також повідомлення посилається з кодом SB_PAGEUP, коли клацання відбувається на самій смузі прокрутки вище указательной кнопки Є також багато інших прикладів таких кодів

Справа, однак, у тому, що ви не можете спіймати повідомлення прокрутки у формі через обробники подій Якщо ви подивитеся на список визначених для класу VCL TForm подій, ви не знайдете там подій OnLineUp або OnPageDown Якщо ви хочете визначити такі події самостійно, то вам доведеться створювати новий компонент, що успадковує від TForm (нетривіальне вправу) і потім спеціально перевіряти на повідомлення в компоненті або знайти яку-небудь дірку в системі, щоб зробити повідомлення смуги прокрутки доступними для вас, програміста Або ви можете використовувати карти повідомлень

Карти повідомлень дуже добре знайомі програмістам на Borland C + + / OWL або Visual C + + / MFC, вони використовуються каркасними системами для роботи з повідомленнями Ви пишіть функцію, приєднуєте її до позиції в карті повідомлень, відповідної потрібного повідомлення, і чекаєте, поки система не викличе функцію у відповідь на це повідомлення Карти повідомлень далеко не так елегантні, як обробники подій, хоча вони і працюють Набагато важче, насправді майже неможливо перемикати обробники повідомлень під час роботи додатку в тому вигляді, в якому це можна зробити для обробників подій Перед тим, як систему карти повідомлень, серйозно подумайте, чи потрібно вам це

Гаразд, все сказано, так далеко ви навряд чи стали б читати, якби у вас не було до того причини Карти повідомлень дійсно дозволяють програмісту на CBuilder вирішувати деякі проблеми, які інакше вирішити неможливо Порівняйте це з програмістами на Visual Basic, що мають в активі повідомлення, які дозволяє обробляти ця система, і ніяких інших Програмістам на Visual Basic частенько доводиться вдаватися до сторонніх компонентів, наприклад Message Blaster VBX, для того, щоб обробляти повідомлення, не визначені всередині Visual Basic До версії Visual Basic 50, по суті, ви не могли визначити функцію типу callback для повідомлень Може, CBuilder і не ідеал, але це помітний крок вперед у змаганні в даній області

У цьому прикладі ви побачите, як реалізувати карту повідомлень у вашому додатку і як обробити ускользающее повідомлення WM_VSCROLL Ми будемо використовувати це повідомлення для зміни зображення на екрані, а також побачимо, як відображати інформацію в секціях панелі стану

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

Схожі статті:


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

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*