Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual1.doc
Скачиваний:
10
Добавлен:
07.03.2016
Размер:
4.35 Mб
Скачать

8.4. Робота з повзунками

Приклад роботи знаходиться у папці DISK\dialog\dialog4.

У цьому блоці показана робота з використанням елементів управління повзунком, а також технологія ініціалізації елементів керування безпосередньо в класі виду похідному від CView.

Програма роботи з повзунком згенерована з використанням режиму Dialog Based.

Найменування програми sliders.

Послідовність роботи.

1. На першому етапі створюється ресурс діалогу, який включає повзунок (slider) і текстове поле, в якому буде відображено положення повзунка. Потім створюємо змінні m_slider типу CSliderCtrl і m_text типу CString за наступними ідентифікаторами аналізованих елементів управління, відповідно IDC_SLIDER1, IDC_EDIT1.

2. При переміщенні бігунка елемент посилає повідомлення WM_HSCROLL (WM_VSCROLL для вертикальних повзунків). За допомогою ClassWizard зв'яжіть повідомлення WM_HSCROLL з методом OnHScroll() (OnVScroll() для вертикальних повзунків). Метод OnHScroll() обробляє повідомлення, призначені для діалогового вікна:

void CSlidersDlg::OnHScroll(UINT nSBCode, UINT nPos,

CScrollBar * pScrollBar)

{

.............................................................

}

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

Таблиця 8.2

Повідомлення про прокрутку Windows

Код операції

Значення

SB_ENDSCROLL

Завершення прокручування

SB_LEFT

Прокрутка в крайню ліву позицію

SB_LINELEFT

Прокрутка ліворуч

SB_LINERIGHT

Прокрутка праворуч

SB_PAGELEFT

Прокручування на сторінку ліворуч

SB_PAGERIGHT

Прокручування на сторінку праворуч

SB_RIGHT

Прокрутка в крайню праву позицію

SB_THUMBPOSITION

Прокрутка в задану позицію

SB_THUMBTRACK

Переміщення бігунка в задану позицію

У нашому випадку використовується код SB_THUMBPOSITION, що посилається при переміщенні бігунка. Текст програми:

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

{

if (SB_THUMBPOSITION == nSBCode)

{

m_text.Format("% ld", nPos);

UpdateData(false);

}

CDialog::OnHScroll(nSBCode, nPos, pScrollBar);

}

Тут, при переміщенні повзунка значення його позиції передається в текстове поле. Ініціалізація елементів управління відбувається наступним чином:

BOOL CSlidersDlg::OnInitDialog()

{

CDialog::OnInitDialog();

m_slider.SetRangeMin(1, false);

m_slider.SetRangeMax(100, false);

m_text = "1";

UpdateData(false);

return TRUE;

}

У даному фрагменті встановлюється інтервал повзунка від 1 до 100, який задається за допомогою методів SetRangeMin(), SetRangeMax() класу CSliderCtrl. Початкове значення, що відображається в текстовому полі, прийнято рівним одиниці. На рис. 8.8 продемонстровано роботу додатка.

Рис. 8.8. Робота програми sliders

8.5. Виведення бітових матриць в діалозі та у вікні виду

Приклад роботи знаходиться у папці DISK\dialog\dialog5.

Створимо додаток з назвою ColorDemo, у ньому буде показано створення діалогового вікна для вибору кольору а також виведення бітових зображень у вікнах діалогу з використанням ресурсів та файлів зображень. Створимо діалогове вікно для вибору кольору (з ідентифікатором IDD_DIALOG1 у файлі ресурсу), яке містить: 4 кнопки, 3 вертикальні полоси прокрутки, 7 текстових підписів і 4 підписа без тексту для відображення вибраних параметрів кольору (верхнє вікно на рис. 8.9).

Рис. 8.9. Виведення діалогового вікна вибору кольору

Для діалогового вікна вибору кольору окрім ресурсу IDD_DIALOG1 створимо клас CScrollDial. При зміні позицій у полосах прокрутки буде викликатись функція OnVScroll, її код наведено далі:

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

{

if(nPos==0)nPos = pScrollBar->GetScrollPos();

if(nSBCode == SB_LINEUP) nPos--;

if(nSBCode == SB_LINEDOWN)nPos++;

if(nSBCode == SB_PAGEUP) nPos-=5;

if(nSBCode == SB_PAGEDOWN)nPos+=5;

if(nPos<0)nPos = 0;

if(nPos>255)nPos = 255;

pScrollBar->SetScrollPos(nPos);

InvalidateRect(&rectGl,false);

InvalidateRect(&rectR,false);

InvalidateRect(&rectG,false);

InvalidateRect(&rectB,false);

CDialog::OnVScroll(nSBCode, nPos, pScrollBar);

}

Вхідний параметр nSBCode визначає подію, яка відбулась із полосами прокрутки. Змінна nPos відповідає за позицію повзунків. Константи SB_LINEUP і SB_LINEDOWN визначають події які відбуваються при натисненні на верхню або нижню кнопки скролінгу, вони повинні здійснювати мінімальну прокрутку повзунків. Константи SB_PAGEUP і SB_PAGEDOWN відповідають подіям прокрутки повзунків на одну сторінку документа вверх або вниз. У даному випадку ми не використовуємо полосу прокрутки для відображення деякого документа, тому розмір сторінки обираємо самостійно рівним 5. В іншому випадку виникала б необхідність робити розрахунки розмірів видимої області документа по відношенню до всього документа і кількості мінімальних переміщень функцією SetScrollSizes, яку ми розглядали у п. 5.5.

Для виведення зображень у вікні діалогу створимо клас CDialBitmap. Внесемо у вікно діалогу елемент керування CStatic. Основне призначення цих елементів у виведенні текстової інформації, але у даному випадку ми скористаємось можливістю встановлення фонових зображень. Тексту у ньому не буде так як він буде слугувати рамкою для виведення зображень. Додамо вказівку на об'єкт CStatic* st1, а у функції OnInitDialog присвоюємо їй значення:

BOOL CDialBitmap::OnInitDialog()

{

CDialog::OnInitDialog();

st1 = (CStatic*)GetDlgItem(IDC_STATIC1);

return TRUE;

}

Внесемо у ресурси проекту 2 зображення із папки BMP з ідентифікаторами IDB_BITMAP1 і IDB_BITMAP2, після чого у файлі ресурсів з'являться такі рядки коду:

// Bitmap

IDB_BITMAP1 BITMAP "BMP\\audi.bmp"

IDB_BITMAP2 BITMAP "BMP\\BMW.bmp"

Додамо у діалог 3 кнопки для зміни зображень. Через майстер створимо для них функції OnButton1, OnButton2 та OnButton3. Для роботи з картинкою у класі CDialBitmap необхідно оголосити об’єкт m_Bit класу CBitmap.

void CDialBitmap::OnButton1()

{

// Виведення картинки на основі ресурсів

m_Bit.DeleteObject();

m_Bit.LoadBitmap(IDB_BITMAP1);

st1->SetBitmap((HBITMAP)m_Bit.m_hObject);

}

void CDialBitmap::OnButton2()

{

// Виведення картинки на основі ресурсів

m_Bit.DeleteObject();

m_Bit.LoadBitmap(IDB_BITMAP2);

st1->SetBitmap((HBITMAP)m_Bit.m_hObject);

}

void CDialBitmap::OnButton3()

{

// Виведення картинки з папки BMP з повною перевіркою

if(access("BMP",0))

{

MessageBox("Отсутствует папка BMP,\nгде должны находится файлы *.bmp\nдля работы с картинками \n",

"Внимание!",MB_ICONINFORMATION);

return;

}

if(access("BMP\\GAZ.bmp",0))

{

MessageBox("В папке BMP отсутствует файл GAZ.bmp",

"Внимание!",MB_ICONINFORMATION);

return;

}

HBITMAP startBitmap = (HBITMAP)LoadImage(NULL, "BMP\\GAZ.bmp", IMAGE_BITMAP,0,0, LR_LOADFROMFILE);

if (!startBitmap)

{

MessageBox(

"В папке BMP ошибочная структура файла GAZ.bmp",

"Внимание!",MB_ICONINFORMATION);

return;

}

st1->SetBitmap(startBitmap);

}

У функціях OnButton1 і OnButton2 виведення зображення робиться на основі об'єкту m_Bit класу CBitmap, через який ми завантажуємо зображення із ресурсів. Встановлення зображення відбувається функцією SetBitmap об'єкту st1.

Інколи буває не зручно тримати зображення у ресурсах програми, так як це збільшує розмір програмного файлу а також вимагає перекомпіляції програмного файлу при необхідності замінити зображення. У функції OnButton3 показано варіант із підключенням зовнішнього зображення. Ця функція більша за попередні тому що у ній передбачені випадки контролю наявності зовнішнього файлу, а також відповідності його структури формату *.bmp. На рис. 8.10. продемонстровано результат виведення бітового зображення у вікні діалогу.

Рис. 8.10. Виведення бітового зображення у діалозі

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]