РОБОТА З ЕЛЕМЕНТАМИ УПРАВЛІННЯ ФОРМ

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

Елементи форм створюються за допомогою стандартної функції CreateWindowEx Параметри функції:

dwExStyle розширений стиль елемента, наприклад може бути WSEXNODRAG елемент неможливо рухати за допомогою миші, WSEXNOACTIVATE елемент не може бути активним, WSEXTOPMOST елемент завжди відображається поверх інших

IpClassName покажчик на рядок, що містить назву класу елемента, наприклад EDIT, BUTTON, LISTBOX. Саме цей параметр і задає тип елемента управління

IpWindowName покажчик на рядок, яка буде написом dwStyle стиль вікна, може дорівнювати або бути комбінацією наступних констант:

WSBORDER елемент з бордюром,

WS_CHILD (mni WS_CHILDWINDOW) елемент є дочірнім,

WSHSCROLL елемент має смугу вертикальної прокрутки,

WSVSCROLL елемент має смугу горизонтальної прокрутки,

WSVTSIBLE елемент спочатку бачимо,

WSDISABLED елемент спочатку недоступний,

ESMULTILINE (для EditBox) елемент є багаторядковим,

ESAUTOVSCROLL (для EditBox) вертикальна автопрокрутка елемента,

ESAUTOHSCROLL (для EditBox) горизонтальна автопрокрутка елемента,

CSDBLCLKS елемент буде сприймати подвійні клацання миші

х, у координати верхнього лівого кута елементу форми

Width, Height ширина і висота елемента управління

hWndParent покажчик на батьківське вікно, на яке буде поміщений елемент управління

hMenu ідентифікатор дочірнього вікна, який буде асоціюватися з елементом

hlnstance дескриптор екземпляра додатка

IpParam покажчик на значення, яке буде міститися в полі IParam для повідомлення WM_CREATE, генерованому після створення елемента

Функція CreateWindowEx повертає покажчик на створений елемент або NULL у разі неможливості створити елемент форми Як правило, елементи форми створюються при обробці повідомлення WM_CREATE батьківської форми

Взаємодія з створеним елементом форми здійснюється відправкою та отриманням повідомлень Для відправки повідомлень елементу використовується функція SendMessage Функції передаються 4 параметра, перший вказує на елемент форми, другий код повідомлення, третій і четвертий залежать від повідомлення Наприклад, для зміни тексту на рядок в newText використовується виклик види:

invoke SendMessage,hElement,WM_SETTEXT,0,ADDR newText

Повідомлення, які підходять для всіх елементів (у тому числі і форм), мають префікс WM_ (Windows Messages) Однак, для кожного елемента форми існують спеціальні повідомлення, придатні тільки для нього, наприклад повідомлення LBGETCOUNT повязано з лічильником рядків у ListBox, і для кнопки не має сенсу Спеціальні повідомлення для кнопок мають префікс ВМ_ (Buttons Messages), для списку рядків LB_ (ListBoxes )

31 Кнопки

У простому випадку кнопка являє собою прямокутник, на якому є напис або зображення Клацання мишею по кнопці призводить до її перемальовуванні із застосуванням тіні, щоб відобразити натискання Відпускання миші призводить до відновлення первісного вигляду кнопки Для того щоб така перерисовка стала можливою, від кнопки в батьківську форму надсилається повідомлення WMCOMMAND При цьому через молодше слово wParam передається ідентифікатор кнопки, а через старше код дій з кнопкою, наприклад, при натисканні код дорівнює BNCLICKED

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

Стиль BSPUSHBUTTON дозволяє створити кнопку, яка відправляє повідомлення WMCOMMAND батьківському вікну, коли користувач вибирає цю кнопку Стиль BSDEFPUSHBUTTON описує кнопку, яка поводиться подібно кнопці стилю BSPUSHBUTTON і має жирну чорну рамку Якщо така кнопка знаходиться в діалоговому вікні, то користувач може вибрати кнопку, натиснувши клавішу ENTER, навіть тоді, коли кнопка не має фокусу введення Цей стиль корисний для надання користувачу можливості швидко вибрати найбільш підходящу (задану за замовчуванням) опцію

Стиль BSGROUPBOX служить для створення прямокутника, в якому можуть бути згруповані інші елементи управління Будь-який текст, повязаний з цим стилем відображається у верхньому лівому куті прямокутника Кнопка стилю BSGROUPBOX не передбачає посилку повідомлень батьківському вікну та обробку клавіатурних і «мишачих» подій

Прапорець (Check Box) зі стилем BSCHECKBOX являє собою квадратне вікно, працює як перемикач, що має 2 стану «включено» (у вікні малюється галочка) і «вимкнено» (у вікні нічого не відображено)

Радіокнопка або перемикач зі стилем кнопки BSRADIOBUTTON являє собою кругле вікно, включення якого відображається точкою у вікні

Розглянемо приклад створення кнопки з використанням макросу invoke:

.data

szText  btnClass,&quotBUTTON&quot

szText  text,&quotMY BUTTON!!&quot

hMybtn   dd 0

invoke CreateWindowEx,

0,ADDR btnClass,ADDR text,

WS_CHILD or WS_VISIBIiE or CS_DBLCLKS,

100,100,100,20,hWindow,111,

hins tance,NULL mov hMybtn,eax

Кнопки отримують повідомлення за допомогою функції SendMessage

Для зміни стану кнопки (нажатое або віджате) їй передається повідомлення BMSETSTATE При цьому wParam дорівнює TRUE для перекладу кнопки в натиснутий стан, і FALSE для перекладу в віджате IParam в обох випадках дорівнює нулю Кнопки стилю BS_PUSHBUTTON і BS_DEFPUSHBUTTON при натисканні перемальовувати автоматично Наприклад:

invoke SendMes sage,hMyBtn,BM_SETSTATE,TRUE,0

Щоб дізнатися стан кнопки, їй передають повідомлення BMGETCHECK з нульовими параметрами Значення, що повертається одно 0 для віджатою кнопки, вимкненого перемикача або прапорця, 1 для натиснутою кнопки, включеного перемикача або прапорця, 2 для неактивного стану цих елементів

Прапорці і перемикачі мають стилі У S3 STATE, BSCHECKBOX або BSRADIOBUTTON, і не перемальовувати автоматично, а для їх перемальовування треба послати повідомлення BMSETCHECK Параметр wParam вказує, що потрібно зробити з перемикачем чи прапорцем: 0 вимкнути (зняти вибір на Check-Box, прибрати крапку в RadioButton), 1 включити, 2 зробити неактивним Параметр IParam дорівнює нулю Наприклад, включити

invoke SendMes sage,hMyBtn,BM_SETCHECK,1,0

Повідомлення BMSETSTYLE встановлює стиль кнопки, через wParam передається новий стиль (В S3 STATE, BSCHECKBOX, BS_AUTOCHECKBOX, BS_AUT03STATE, BS_RADIOBUTTON, BSICON, BSFLAT тд), IParam дорівнює TRUE, якщо елемент перемальовується або FALSE, якщо не перемальовується Наприклад:

invoke SendMes sage,hMyBtn,BM_SETSTYLE,BS_3 STATE,TRUE

Слово AUTO у назві стилю означає автоматичну перерисовку обєкта при зміні його стану

Повідомлення BMSETIMAGE служить для додавання картинки до кнопки, wParam вказує тип зображення (IMAGEICON або IMAGEBITMAP), IParam містить дескриптор зображення Напри-заходів:

invoke SendMes sage,hMyBtn,BM_SETIMAGE,IMAGE_BITMAP,hBmp

Значення, що повертається покажчик на старе зображення на кнопці або NULL, якщо не було зображення

Для роботи з кнопками можна використовувати API-функції для вікон, розглянуті в розділі 1

Джерело: Сучкова, ЛІ Win32 API: основи програмування: навчальний посібник / ЛІ Сучкова АлтГТУ ім ШІ Ползунова -Барнаул, АлтГТУ, 2010 138 с, іл

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


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

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

Ваш отзыв

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

*

*