НОУ ІНТУІТ, Лекція, Виведення тексту на екран та пристрій у Windows

12.10. Додаток № IV

Використання смуг прокручування для виведення тексту

Створення смуги прокручування

По-перше, Ви можете створити смугу прокручування за допомогою функції CreateWindow, вказавши певний клас вікна "scrollbar". Цей спосіб аналогічний способу створення кнопок чи статичних органів управління. Цей спосіб докладно у книзі [39 ]. По-друге, при створенні вікна на базі власного класу Ви можете вказати, що вікно повинно мати горизонтальну, вертикальну або обидві смуги прокручування. Цей спосіб ми розглянемо.

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

Повідомлення від смуги прокручування розглядаються у таблиці 12.6.

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

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

ФУНКЦІЯSETSCROLLRANGE
ВИЗНАЧЕНО У:
СИНТАКСИС:void WINAPI SetScrollRange( hwnd, fnBar, nMin, nMax, fRedraw ) , де
  • HWND hwnd - визначає ідентифікатор вікна, що має смугу прокручування, або ідентифікатор смуги прокручування, створеного органом управління;
  • int fnBar - визначає один із типів смуги прокручування. Його значення дивись у Таблиці 12.7;
  • Цілі (int) параметри nMin та nMax визначають відповідно мінімальне та максимальне значення для діапазону позицій. Різниця між nMax та nMin не повинна перевищувати числа 32767;
  • BOOL fRedraw - Визначає, чи потрібно перемальовувати смугу прокручування для відображення змін. Якщо значення дорівнює TRUE , то смуга прокручування буде перемальована і FALSE - смуга прокручування залишається без змін;
ПРИЗНАЧЕННЯ:Функція встановлює діапазон значень позиції для смуги прокручування;
ОПИС:
ПОВЕРНЕНИЙ ЗНАЧЕННЯ:Функція не повертає значень;
ПЕРЕНОСІМНІСТЬ:Лише Windows;
ФУНКЦІЯGETSCROLLRANGE
ВИЗНАЧЕНО У:
СИНТАКСИС:void WINAPI SetScrollRange( hwnd, fnBar, lpnMin, lpnMax ) , де
  • HWND hwnd - визначає ідентифікатор вікна, що має смугу прокручування, або ідентифікатор смуги прокручування, створеного органом управління;
  • int fnBar - визначає один із типів смуги прокручування. Його значення дивись у Таблиці 12.7;
  • У значення для далеких покажчиків на цілі числа (int FAR*) , lpnMin та lpnMax буде записано відповідно мінімальне та максимальне значення для діапазону позицій. Різниця між nMax та nMin не повинна перевищувати числа 32767;
ПРИЗНАЧЕННЯ:Функція видає діапазон значень позиції для смуги прокручування;
ОПИС:
ПОВЕРНЕНИЙ ЗНАЧЕННЯ:Функція не повертає значень;
ПЕРЕНОСІМНІСТЬ:Лише Windows;

Інші функції, що керують режимом відображення смуг прокручування, дивись у книзі [39].

Таблиця 12.7. Типи смуг прокручування (прапори)Значення прапора fnBar функцій роботи зі смугами прокручуванняЗначення Опис
SB_CTLВстановлення діапазону смуги прокручування, створеної як орган управління класу "scrollbar". У цьому випадку параметр hwnd функції SetScrollRange та інших повинен містити ідентифікатор органу управління, отриманий під час його створення функцією CreateWindow
SB_HORZВстановлення діапазону горизонтальної смуги прокручування, під час створення якої було використано стиль вікна WS_HSCROLL . Параметр функції hwnd повинен містити ідентифікатор вікна, що має смугу прокручування.
SB_VERTВстановлення діапазону вертикальної смуги прокручування, під час створення якої було використано стиль вікна WS_VSCROLL . Параметр функції hwnd повинен містити ідентифікатор вікна, що має смугу прокручування.

12.11. Додаток № V

Приклад програми на основі бібліотек WinAPI для виведення тексту у вікно з вертикальною смугою прокручування.

Ця програма оптимізована під середу розробки Borland C/C++ 3.1.

Примітки до текстів прикладів

Виведення тексту в робочу область екрана здійснюється лише при обробці переривання WM_PAINT . Перед виведенням тексту необхідно провести так звану "ініціалізацію вікна", викликавши функцію: PrintInitHDC_scroll без параметрів. Ця функціявстановлює початкову позицію виведення в робочій області вікна при її перемальовці (відступ зверху – 1 інтервал, відступ ліворуч – 0,5 від ширини літери зазначеного шрифту). Це необхідно зробити, оскільки при кожному прийомі повідомлення WM_PAINT вікно перемальовується заново.

Потім йдуть власне функції виведення тексту у вікно PrintHDC_scroll та PrintLnHDC_scroll.

Перша з цих функцій виводить текст у вікно без переходу на інший рядок. Новий висновок буде проводитися в тому ж рядку, початкова позиція якого дорівнюватиме "числу надрукованих символів" * "максимальну ширину літера шрифту". У Бейсику це еквівалентно командам:

Друга функція після виведення рядка переносить нову позицію виведення на початок наступного рядка таблиці - вертикальний зсув в 1 інтервал і початкова горизонтальна позиція - половина ширини символу від рамки вікна. Обидві функції як параметри сприймають контекст пристрою і рядок тексту, що виводиться на екран.