пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Смуги прокручування та обробка їх повідомлень.

Смуги прокрутки не обов’язково розташовуються саме у діалогових вікнах. Вони однаково успішно пов’язуються з вікнами, породжуваними від класу СFrameWnd, з такими загальними елементами керування, як спін і регулятор.

          Загалом, в операційній системі Windows існує два типи смуг прокрутки. Елементи першого типу є частиною вікна (включно із діалоговим вікном). Їх називають стандартними або віконними смугами прокрутки. Елементи другого типу існують незалежно і тому називаються незалежними смугами прокрутки. Перші описуються у класі CWnd, другі – за допомогою класу CScrollBar.

          Для того, щоб вікно містило стандартні смуги прокрутки необхідно визначити відповідні стилі. У головному вікні, похідному від CFrameWnd додатково визначаються стилі WS_VSCROLL – для вертикальної смуги прокрутки і WS_HSCROLL – для горизонтальної. Наприклад:

CMainWin::CMainWin()

[Create(NULL,"Проста MFC-програма",

 WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL, rectDefault, NULL, MAKEINTRESOURCE(IDR_MENU1));]

          Для діалогових вікон ситуація значно простіше: у властивостях шабло-ну діалогового вікна слід лише зазначити “Horizontal scroll”, “Vertical Scroll”.

Смуги прокрутки не генерують повідомлень типу WM_COMMAND, а замість цього посилають повідомлення WM_VSCROLL або WM_HSCROLL. Їм відповідають макрокоманди ON_WM_VSCROLL() та ON_WM_HSCROLL().

          Кожна макрокоманда має свій обробник:

 

void CWnd::OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );

void CWnd::OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );

 

де nSBCode – код дії із смугою прокрутки, nPos – визначає позицію смуги прокрутки (якщо не надіслані коди SB_THUMBPOSITION або SB_THUMBTRACK), pScrollBar – покажчик на об’єкт смуги прокрутки (має значення NULL, якщо повідомлення прийшло від стандартної смуги прокрутки).

Для реалізації обробників необхідно розпізнавати коди дій із смугою. Перед використанням смуги прокрутки задається її діапазон, що визначає кількість умовних позицій повзунка, який за замовчуванням має діапазон (0 – 100).

Діапазон прокрутки задається функцією SetScrollRange(). Її прототип:

 

void CWnd::SetScrollRange( int nBar, int nMinPos, int nMaxPos, BOOL bRedraw = TRUE );

 

де nBar – тип смуги прокрутки: вертикальна (SB_VERT) або горизонтальна (SB_HORZ)  , nMinPos – мінімальне значення межі прокрутки, nMaxPos – Максимальне значення межі прокрутки, bRedraw – ознака необхідності оновлення зображення прокрутки після зміни стану.

          Функція SetScrollPos() встановлює нову позицію смуги прокрутки:

 

int CWnd::SetScrollPos( int nBar, int nPos, BOOL bRedraw = TRUE );

 

де Pos – позиція, у яку встановлюється повзунок смуги прокрутки. Парамет-ри nBar та bRedraw мають те саме значення, що й у попередній функції.

 Інша функція – GetScrollPos() отримує поточне значення повзунка смуги прокрутки:

 

int CWnd::GetScrollPos( int nBar); // nBar має те саме значення, що у попередніх функціях


21.06.2015; 22:30
хиты: 73
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь