Обробка вимірювання елемента C + + Builder

Ви, можливо, памятаєте, що ми зробили список змінного owner-draw (ручний промальовування) типу Це змусить систему Windows посилати списку повідомлення WM_MEASEUREITEM CBuilder потім перенаправляє це повідомлення в обробник MeasureItem для списку, який в свою чергу викличе обробник MeasureItem для батьківського вікна і для форми, якщо такі обробники існують Так як ми створили обробник події MeasureItem, то пора тепер його реалізувати Додайте наступний код в обробник події MeasureItem у вихідному файлі форми (Unit1cpp):

void __fastcall TForm1::MeasureItem(TWinControl *Control, int Index,int &ampHeight)

{

if ( FpFont )

ListBox1-&gtCanvas-&gtFont = FpFont

/ / Отримати висоту шрифту

Height = ListBox1-&gtCanvas-&gtTextHeight(&quotM&quot)

}

У цьому методі ми спочатку перевіряємо, чи вибрав користувач шрифт для списку Якщо це так, то властивості Font (шрифт) властивості Canvas списку присвоюється це значення Інакше властивість Font списку буде містити значення шрифта в системі Закінчивши з цим, ми використовуємо метод TextHeight для обчислення висоти рядка Так як всі символи в рядку – однакового шрифту, а Windows підтримує шрифти тільки з однаковою висотою, то ми можемо брати висоту будь-якого символу Прописна M добре підходить для цього, так як у-перших вона добре виглядає на самоті, а крім того M і W – найширші символи в будь-якому шрифті Вас, напевно, цікавить, що стало зі старим шрифтом (як обєктом), який був повязаний зі значенням шрифту для властивості списку Canvas В інших системах вам довелося б отримати цей старий шрифт, повязаний з Canvas, потім видалити його, після чого встановити нове значення Тоді вам би ще довелося потурбуватися про те, чи використовувався цей обєкт ще де-небудь в системі якщо так, то програма завалилася б при спробі звернутися до цього шрифту де-небудь в іншому місці Чи не мучтеся, CBuilder не дає вам безпосередньо змінювати властивість Font в операції привласнення Замість цього ви змушуєте систему викликати метод Set для властивості Font обєкта Canvas Цей метод Set автоматично звільнить обєкт Font, якщо це потрібно, зберігаючи вам тим самим нерви і час Це ще одна приємна річ з так званих розширень мови

Джерело: Теллес М – 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>

*

*