НОУ ІНТУІТ, Лекція, Виведення тексту на екран та пристрій у Windows
12.10. Додаток № IV
Використання смуг прокручування для виведення тексту
Створення смуги прокручування
По-перше, Ви можете створити смугу прокручування за допомогою функції CreateWindow, вказавши певний клас вікна "scrollbar". Цей спосіб аналогічний способу створення кнопок чи статичних органів управління. Цей спосіб докладно у книзі [39 ]. По-друге, при створенні вікна на базі власного класу Ви можете вказати, що вікно повинно мати горизонтальну, вертикальну або обидві смуги прокручування. Цей спосіб ми розглянемо.
Другий спосіб створення смуг надзвичайно простий, але з його допомогою можна створити лише одну горизонтальну та одну вертикальну смуги прокручування, розташовані по краях вікна. Для того щоб ця смуги прокручування з'явилися у вікні, при реєстрації класу вікна в третьому параметрі функції CreateWindow необхідно вказати стиль вікна WS_VSCROLL або WS_HSCROLL або обидва стилі разом.
Повідомлення від смуги прокручування розглядаються у таблиці 12.6.
Для смуги прокручування визначено поняття "поточна позиція" та "діапазон зміни значень позиції". При пересуванні повзунка вздовж смуги прокручування поточна позиція набуває дискретних значень всередині діапазону зміни значень позиції. Якщо повзунок знаходиться у лівому або верхньому положенні, поточна позиція є мінімальною. Якщо повзунок знаходиться в правому або нижньому положенні, поточна позиція є максимальною.
Після того, як Ви створили смугу прокручування, її необхідно проініціалізувати, вказавши діапазон змін значень позиції. Для цього необхідно викликати функцію: SetScrollRange, описану нижче:
| ФУНКЦІЯ | SETSCROLLRANGE |
| ВИЗНАЧЕНО У: | |
| СИНТАКСИС: | void WINAPI SetScrollRange( hwnd, fnBar, nMin, nMax, fRedraw ) , де
|
| ПРИЗНАЧЕННЯ: | Функція встановлює діапазон значень позиції для смуги прокручування; |
| ОПИС: | |
| ПОВЕРНЕНИЙ ЗНАЧЕННЯ: | Функція не повертає значень; |
| ПЕРЕНОСІМНІСТЬ: | Лише Windows; |
| ФУНКЦІЯ | GETSCROLLRANGE |
| ВИЗНАЧЕНО У: | |
| СИНТАКСИС: | void WINAPI SetScrollRange( hwnd, fnBar, lpnMin, lpnMax ) , де
|
| ПРИЗНАЧЕННЯ: | Функція видає діапазон значень позиції для смуги прокручування; |
| ОПИС: | |
| ПОВЕРНЕНИЙ ЗНАЧЕННЯ: | Функція не повертає значень; |
| ПЕРЕНОСІМНІСТЬ: | Лише Windows; |
Інші функції, що керують режимом відображення смуг прокручування, дивись у книзі [39].
| 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 інтервал і початкова горизонтальна позиція - половина ширини символу від рамки вікна. Обидві функції як параметри сприймають контекст пристрою і рядок тексту, що виводиться на екран.