Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Смуги прокрутки






Загальні відомості. Смуги прокрутки широко використовують для перегляду вмісту документу, який не вміщається у вікні, і бувають лише горизонтальні або вертикальні. Вони розташовуються відповідно в нижній і правій частині вікна. Поняття ”смуга прокрутки” не обмежується смугою перегляду і в загальному випадку представляє собою множину вікон класу SCROLLBAR різного призначення (табл.2.4).

 

Таблиця 2.4. Список стилів смуг прокрутки

Стилі Опис
   
SBS_BOTTOMALIGN, SBS_TOPALIGN В нижній або верхній частині прямокутника, заданого аргументами x, y, nWidth, nHeight виклика функції CreateWindow, створюється горизонтальна смуга прокрутки, висота якої дорівнює висоті системної смуги прокрутки. Цей стиль використовують з SBS_HORZ
SBS_HORZ Якщо не вказано SBS_BOTTOMALIGN або SBS_TOPALIGN, то позиція, висота і ширина горизонтальної смуги прокрутки визначаються аргументами x, y, nWidth, hNeight виклику функції CreateWindow
SBS_LEFT ALIGN, SBS_RIGHT ALIGN В лівому або правому краю прямокутника, заданого аргмуентами x, y, nWidth, hNeight виклику функції CreateWindow, створюється вертикальна смуга прокрутки, ширина якої дорівнює ширині системної смуги прокрутки. Цей стиль використовують з SBS_VERT
SBS_SIZEBOX Створюється прямокутник сірого кольору. Якщо встановити курсор всередину прямокутника, натиснути ліву кнопку і пересувати мишу, батьківське вікно одержить повідомлення, аналогічні повідомленням від рамки зміни розміру вікна.Якщо не вказані стилі SBS_SIZEBOXBOTTOMRIGHTALIGN і SBS_SIZEBOXTOPLEFTALIGN, то прямокутник задається аргументами x, y, nWidth, hNeight виклику функції CreateWindow
SBS_VERT Якщо не вказано стиль SBS_RIGHTALIGN або SBS_LEFTALIGN, то позиція, висота і ширина вертикальної смуги прокрутки визначаються аргументами x, y, nWidth, hNeight виклику функції CreateWindow
   
SBS_SIZEBOXBOTTOM RIGHTALIGN (SBS_SIZE BOXTOPLEFTALIGN) Аналогічно SBS_SIZEBOX, але правий нижній (лівий верхній) кут прямокутника вирівнюється по правому нижньому (лівому верхньому) куту прямокутника, визначеного аргументами x, y, nWidth, hNeight виклику функції CreateWindow, а для висоти і ширини органу управління використовуються системні значення. Цей стиль використовують з SBS_SIZEBOX

Найбільш складний їх різновид представляють смуги перегляду. Смуга перегляду складається з декількох об’єктів різного призначення.

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

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

Повзунок можна плавно пересувати мишшю вздвож смуги перегляду. В процесі переміщення вміст вікна пересувається або відображається в позиції повзунка.

Таким чином, в залежності від виду дії миші смуга перегляду може надсилати 7 різних повідомлень батьківському вікну.

Існують менш звичні смуги прокрутки. Наприклад, смуга прокрутки стилю SBS_SIZEBOX, яка буде розглянута нижче.

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

Існує 3 способи створення смуги прокрутки:

1. смугу прокрутки можна створити за допомогою виклику функції CreateWindow. Цей спосіб аналогічний способу, застосовуваному при створенні кнопок або статичних органів управління. Першим аргументом виклику CreateWindow вказують SCROLLBAR, а другим – NULL (заголовок вікна не використовується). Дескриптор смуги прокрутки використовують функції управління смугами прокрутки. Кількість і різновид смуг, створюваних таким чином, необмежені;

2. при створенні будь-якого вікна за допомогою функції CreateWindow можна вказати, що вікно має горизонтальну та/або вертикальну смуги прокрутки. Для цього в третьому параметрі функції CreateWindow вказують стилі WS_VSCROLL та/або WS_HSCROLL. Наприклад:

hwnd=CreateWindow(szClassName, szWindowTitle,

WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL,

CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

CW_USEDEFAULT, 0, 0, hInstance, NULL);

3. деякі органи управління також можуть мати смуги прокрутки.

В другому і третьому способах дескриптори для смуг прокрутки не створюються.

Повідомлення від смуги прокрутки. Горизонтальні смуги прокрутки батьківському вікну надсилають код повідомлення WM_HSCROLL, а вертикальні – код WM_VSCROLL. При цьому молодше слово параметру wParam містить код здйсненої дії, старше слово – поточну позицію повзунка, а lParam вказує на дескриптор смуги прокрутки.

Для повідомлень WM_HSCROLL та WM_VSCROLL можна використовувати одні й ті ж коди дій.

Управління смугою прокрутки. Позиція nPos повзунка може приймати значеня із заданого діапазону [nMin, nMax]. Крайня ліва (верхня) горизонтальної (вертикальної) смуги позиція відповідає значенню nMin, відповідно крайня права (нижня) позиція відповідає значенню nMax.

Функції управління станом смуг прокрутки не викликають для смуг, створених третім способом. Якщо смуга прокрутки створена першим способом, то при виклику цих функцій першим аргументом вказують дескриптор смуги. Інакше першим аргументом вказують дескриптор вікна, до якого належить смуга перегляду. Другим аргументом вказують вигляд смуги.

 

Таблиця 2.5. Допустимі значення для другого аргументу

(вигляд смуги)

Значення Вигляд смуги
SB_CTL Смуга прокрутки. Першим аргументом є дескриптор смуги
SB_HORZ Стандартна горизонтальна смуга прокрутки вікна
SB_VERT Стандартна вертикальна смуга прокрутки вікна

Для установки діапазона смуги прокрутки викликають функцію SetScrollRange:

BOOL SetScrollRange(HWND hwnd, int nBar, int nMin, int nMax, BOOL bRedraw);

Вона встановлює мінімальне і максимальне значення позицій повзунка смуги. У випадку успішної установки значення, що повертається, відрізняється від 0. При nMin=nMax смуга зникає. Такої ситуації потрібно уникати при управлінні станом смуг прокрутки. Аргумент bRedraw, якщо не рівний 0, вказує на необхідність перемалювання смуги. Цей аргумент частіше за все рівний 0. За замовчуванням nMin=0 і nMax=100 для смуг перегляду вікон і nMin=nMax=0 для смуг прокрутки, створених першим способом. Різниця nMax-nMin не може бути більше константи MAXLONG.

Функція SetScrollPos встановлює повзунок в задану позицію:

int SetScrollPos(HWND hwnd, int nBar, int nPos, BOOl bRedraw);

Для визначення поточної позиції повзунка викликають функцію GetScrollPos:

int GetScrollPos(HWND hwnd, int nBar);

Функція ShowScrollBar приховує або показує смугу:

BOOL ShowScrollBar(HWND hwnd, int wBar, BOOl bShow);

Функція EnableScrollBar блокує кнопки смуги прокрутки:

BOOL EnableScrollBar(HWND hwnd, UINT wSBflags, UINT wArrows);

Нові функції управління смугами прокрутки. В Win32 описані нові функції – SetScrollInfo та GetScrollInfo, а також нова структура – SCROLLINFO. Вони дозволяють більш гнучко керувати смугами прокрутки.

Структура SCROLLINFO містить параметри смуги прокрутки. Параметри смуги встановлюють за допомогою функції SetScrollInfo. Для одержання значень параметрів викликають функцію GetScrollInfo. Структуру SCROLLINFO описано наступним чином:

typedef struct

{UINT cbSize;

UINT fMask;

Int nMin;

Int nMax;

UINT nPage;

Int nPos;

Int nTrackPos;

} SCROLLINFO;

Поле з ім’ям cbSize визначає розмір цієї структури.

Поле fMask визначає, значення яких параметрів смуги потрібно встановити чи одержати.

Поля nMin і nMax задають діапазон, nPage – розмір, nPos – поточну позицію повзунка. Поле nTrackPos містить абсолютну позицію повзунка після плавного переміщення. Додаток не може встановлювати значення цього поля, але може обрати його значення (наприклад, при обробці повідомлення SB_THUMBTRACK). Значення поля nPage повинно знаходитись в межах від 0 до nMax-nMin+1, а значення nPos – від nMin до nMax.

Функція SetScrollInfo встановлюює вказані параметри смуги прокрутки і, при необхідності, перемальовує смугу:

int SetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw);

Функція GetScrollInfo обирає вказані параметри смуги прокрутки:

BOOL GetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi);

Зміст параметрів той же, що й раніше. Ця функція записує параметри смуги прокрутки, що визначаються полем fMask, у відповідні поля структури, на яку вказує lpsi. У випадку успішної вибірки функція повертає ненульове значення.

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

Задача. Створити вікно додатку з вертикальною смугою перегляду. Забезпечити обробку команд перегортання від клавіатури. Довжину повзунка збільшувати на одиницю при порядковому збільшенні позиції повзунка і зменшувати на одиницю при порядковому зменшенні позиції повзунка.

Розв’язок.

#include " Functions.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hInstance;

char szClassName[]=" ScrollClass";

char szTitle[]=" приклад";

INT WINAPI WinMain (HINSTANCE hInst, HINSTANCE, PSTR, INT nCmdShow)

{MSG msg; HWND hwnd; hInstance=hInst;

if (! RegClass(WndProc, szClassName, COLOR_WINDOW)) return FALSE;

if(! hwnd=CreateWindow(szClassName, szTitle,

WS_OVERLAPPEDWINDOW|WS_VSCROLL, 194, 50,

246, 150, 0, 0, hInstance, NULL))) return FALSE;

ShowWindow(hwnd, SW_SHOWNORMAL,); UpdateWindow(hwnd);

while(GetMessage(& msg, NULL, 0, 0)) DispatchMessage(& msg);

return msg.wParam; }

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)

{static unsigned int nyPos, nyMin, nyMax, nyPage; static SCROLLINFO siy;

switch (msg)

{case WM_CREATE:

{nyPos=nyMin=1; nyMax=200; nyPage=10;

siy.cbSize=sizeof(siy); siy.fMask=SIF_ALL;

siy.nMin=nyMin; siy.nMax=nyMax;

siy.nPage=nyPage; siy.nPos=nyPos;

SetScrollInfo(hwnd, SB_VERT, & siy, TRUE);

return 0; }

case WM_VSCROLL:

{ switch (LOWORD(wParam))

{case SB_PAGERIGHT: {nyPos+=10; break;)

case SB_LINERIGHT: {nyPos+=1;

if (siy.nPage< nyMax/3)siy.nPage+=1; break; }

case SB_PageLeft: {nyPos-=10; break; }

case SB_LINELEFT: {nyPos-=1;

if (siy.nPage> nyPage) siy.nPage-=1; break; }

case SB_TOP: {nyPos=nyMin; break; }

case SB_BOTTOM: {nyPos=nyMax; break; }

case SB_THUMBPOSITION:

case SB_THUMBTRACK: {nyPos=HIWORD(wParam); break; } }

if (nyPos> nyMax) nyPos=nyMax;

if (nyPos< nyMin) nyPos=nyMin;

siy.nPos=nyPos; siy.fMask=SIF_POS|SIF_PAGE;

SetScrollInfo(hwnd, SB_VERT, & siy, TRUE);

return 0; }

case WM_KEYDOWN:

{switch (wParam)

{case VK_HOME:

{ if (HIBYTE(GetKeyState(VK_CONTROL)))

SendMessage(hwnd, WM_VSCROLL, SB_TOP, 0L);

break; }

case VK_END:

{ if (HIBYTE(GetKeyState(VK_CONTROL)))

SendMessage(hwnd, WM_VSCROLL, SB_BOTTOM, 0L);

Break; }

case VK_UP:

{SendMessage(hwnd, WM_VSCROLL, SB_LINELEFT, 0L);

break; }

case VK_DOWN:

{SendMessage(hwnd, WM_VSCROLL, SB_LINERIGHT, 0L);

break; }

case VK_PRIOR:

{SendMessage(hwnd, WM_VSCROLL, SB_PAGELEFT, 0L);

break; }

case VK_NEXT:

{SendMessage(hwnd, WM_VSCROLL, SB_PAGERIGHT, 0L);

break; }

} return 0; }

case WM_DESTROY: {PostQuitMessage(0); return 0; }

} return DefWindowProc(hwnd, msg, wParam, lParam); }

Як видно з лістинга, для створення смуги перегляду стиль вікна достатньо доповнити контсантою WS_VSCROLL. А обробка повідомлень від смуги така ж, якою вона була при створенні смуги прокрутки першим способом.

 

IІ. ЗМІСТ ЗВІТУ

1. Тема, мета, умова завдання.

2. Опис команд, за допомогою яких було виконано завдання, і результатів їх виконання.

3. Висновок.

 

ІІІ. ЗАВДАННЯ

Написати програму мовою програмування C++ для реалізації завдання згідно варіанту.

1. Вікно додатку без заголовка з рамкою стилю кнопки повідомляє про форматування гнучкого диску і містить кнопку “Зупинити”. При спробі натиснути на кнопку змінити текст повідомлення і пересунути кнопку в інше місце.

2. У вікні додатку відобразити кнопку “Клавіші відтиснуті”. При натисканні будь-якої кнопки сиші над робочою областю вікна ця кнопка зникає і під курсором миші з’являється кнопка “Клавішу натиснуто”. При відтисканні кнопки миші повернутись до початкового стану.

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

4. У вікні розташувати групу перемикачів, групу прапорців, кнопки “Так” і “Ні”, причому кнопка “Так” обирається за замовчуванням. Якщо натиснуто кнопку “Так”, то повідомити про стан перемикачів та прапорців. Якщо натиснуто кноку “Ні”, то завершити роботу.

5. В робочій області з фоном кольору кнопок розташувати групу прапорців, здатних перебувати в трьох станах, з написами ліворуч і кнопки “Так” і “Вихід”. Кнопка “Так” обирається за замовчуванням. Після натискання кнопки “Вихід” завершити роботу.

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

7. У вікні додатку відобразити два статичних органи з текстами “Група1” і “Група2”. При натисканні лівої кнопки миші над першим органом повинна з’явитись кнопка з написом “Кнопка1”, а при натисканні над другим органом – “Кнопка2”. Будь-яка кнопка при натисканні повинна щезнути.

8. В робочій області додатку створити тимчасове вікно з фоном кольору тривимірних елементів, яке мітсить групу варіантів взаємно виключаючих дій та 3 кнопки: “Так”, “Ні”, “Відміна”.

9. В робочій області вікна додатку відобразити кнопку за замовчуванням з написом “Так” та звичайну кнопку з написом “Відміна” з ідентифікаторами відповідно IDOK i IDCANCEL. Повідомити користувачу про дії над цими кнопками.

10. Створити групу прапорців з можливими варіантами даних про студента і кнопку “Так”. Після натискання на кнопку повідомити про встановлені дані.

11. У вікні додатку створити звичайну кнопку з синьою рамкою шириною 100 і висотою 30 пікселів з текстом “Так” в правому верхньому куті вікна та кнопку з чорною рамкою шириною 50 і висотою 10 пікселів з текстом “Ні” в лівому нижньому куті вікна.

12. Створити вікно додатку із заголовком “Завдання 12”. В точці з координатами (30, 25) розташовується лівий верхній кут кнопки стилю BS_CHECKBOX з розміром 100х80 пікселів.

13. Створити вікно додатку із заголовком з прізвищем студента, в якому створити 3 кнопки з назвами різних предметів, а під ними 3 групи перемикачів із залежною фіксацією, які вказують оцінки студента з певного предмету. Внизу вікна розташувати кнопку “ОК”, при натисканні якої відбувається вихід з вікна.

14. Створити вікно додатку, а в ньому створити статичні органи управління у вигляді зафарбованого прямокутника з текстом “1” всередині прямокутника і незафарбованого прямокутника з текстом “2” всередині прямокутника. Текст повинен бути відцентрований.

15. Створити вікно додатку. В ньому створити смугу прокрутки стилю SBS_SIZEBOX розміром 15х15 в точці з координатами (10, 10). Після зміни розмірів вікна смуга прокрутки повинна перейти в невидимий стан.

16. У вікні додатку створити дві смуги прокрутки (горизонтальну і вертикальну) для управління розмірами двох прямокутників (сірого по горизонталі та чорного по вертикалі).

17. У вікні додатку створити звичайну кнопку з червоною рамкою шириною 80 і висотою 20 пікселів з текстом “Ок” в правому нижньому куті вікна та кнопку з чорною рамкою шириною 100 і висотою 30 пікселів з текстом “Ок2” в лівому верхньому куті вікна.

18. Створити вікно додатку з горизонтальною смугою прокрутки. Забезпечити обробку команд перегортання від клавіатури. Довжину повзунка збільшувати на 2 при порядковому збільшенні позиції повзунка і зменшувати на 2 при порядковому зменшенні позиції повзунка.

19. Створити вікно додатку із заголовком “Завдання 19”. В точці з координатами (100, 2) розташовується правий верхній кут кнопки стилю BS_GROUPBOX з розміром 80х80 пікселів.

20. Створити вікно додатку із заголовком з прізвищем спортсмена, в якому створити групу перемикачів із залежною фіксацією, які вказують види спорту. Внизу вікна розташувати кнопку “ОК”, при натисканні якої відбувається вихід з вікна.

21. Створити вікно додатку, а в ньому створити статичні органи управління у вигляді зафарбованого прямокутника з власним прізвищем, ім’ям, по-батькові всередині прямокутника і незафарбованого прямокутника з прізвищем, ім’ям, по-батькові друга всередині прямокутника. Текст повинен бути відцентрований з переносом слів в наступний рядок.

22. Створити вікно додатку. В ньому створити смугу прокрутки стилю SBS_HORZ розміром 10х10 в точці з координатами (50, 50). Після зміни розмірів вікна смуга прокрутки повинна перейти в невидимий стан.

23. У вікні додатку створити дві смуги прокрутки (горизонтальну і вертикальну) для управління розмірами двох прямокутників (червоного по горизонталі та жовтого по вертикалі).

24. У вікні додатку створити звичайну кнопку шириною 90 і висотою 15 пікселів з текстом “1” в лівому верхньому куті вікна та кнопку шириною 40 і висотою 5 пікселів з текстом “2” в правому нижньому куті вікна.

25. Створити вікно додатку із заголовком “Лабораторна №2”. В точці з координатами (11, 125) розташовується лівий нижній кут кнопки стилю BS_CHECKBOX.

26. Створити вікно додатку із заголовком з назвою предмету, в якому створити групу перемикачів із залежною фіксацією, які вказують прізвища викладачів, які ведуть заняття на п’ятому курсі. Внизу вікна розташувати кнопку “ОК”, при натисканні якої відбувається вихід з вікна.

27. Створити вікно додатку, а в ньому створити статичні органи управління у вигляді зафарбованого прямокутника з шифром власної групи всередині прямокутника і незафарбованого прямокутника з шифром групи друга всередині прямокутника. Текст повинен бути розташований по лівому краю з переносом слів в наступний рядок.

28. Створити вікно додатку. В ньому створити смугу прокрутки стилю SBS_VERT розміром 5х5 в точці з координатами (1, 100). Після зміни розмірів вікна смуга прокрутки повинна перейти в невидимий стан.

29. У вікні додатку створити дві смуги прокрутки (горизонтальну і вертикальну) для управління розмірами двох прямокутників (синього по горизонталі та зеленого по вертикалі).

30. Створити вікно додатку, а в ньому створити статичні органи управління у вигляді зафарбованого прямокутника з назвою одного предмету всередині прямокутника і незафарбованого прямокутника з назвою іншого предмету всередині прямокутника, зображеною підкресленим шрифтом. Текст повинен бути розташований по правому краю без переносу слів в наступний рядок.

 

IV. КОНТРОЛЬНІ ПИТАННЯ

1. Чим відрізняються вікна визначених системою класів від звичайних вікон?

2. Які аргументи обов’язкові при створенні органів управління за допомогою функції CreateWindow?

3. Які основні етапи створення орагнів управління?







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.