Студопедия

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

КАТЕГОРИИ:

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






Комбінований список






Створення комбінованого списку. Цей оран є комбінацією однорядкового редактора тексту і списку і створюється на базі класу COMBOBOX. Комбінований списо створюють так, як і інші орагни управління:

HComboBox=CreateWindow(" COMBOBOX", NULL, WS_CHILD|WS_VISIBLE|

WS_VSCROLL|CBS_SIMPLE, 30, 30, 200, 200, hwnd, (HMENU)ID_COMBO, hInst, NULL);

В стилі вікон класу вказують символічні імена з префіксом CBS_ (табл.3.3).

Таблиця 3.3. Список стилів комбінованого списка

Стиль Пояснення
CBS_AUTOHSCROLL Автоматично зсувати текст ліворуч при досягненні правого краю вікна редагування
CBS_DISABLENO SCROLL Вертикальну смугу перегляду відображати в неактичному стані, навіть якщо в списку поміщаються всі рядки
CBS_DROP DOWN Подыбний до CBS_SIMPLE, але список залишається в невидимому стані, доки користувач не натисне піктограму, призначену для відображення списка
CBS_DROP DOWNLIST Подібний до CBS_DROPDOWN, але однорядковий текстовий редактор відображає текст виділеного в списку рядка
CBS_LOWERCASE Перетворювати всі символи в рядкові
CBS_NOINTEGRALHEIGHT Висота вікна комбінованого списка задає батьківське вікно, інакше (за замовчуванням) висота кратна висоті рядків
CBS_ SIMPLE Створюється список, який завжди видимий і розташований під вікном однорядковго редактора тексту, що містить виділений в списку рядок
CBS_SORT Автоматично сортує рядки, введені у вікно списку
CBS_UPPERCASE Перетворювати всі символи в прописні

Коди сповіщення. Комбінований список надсилає функції батьківського вікна сповіщувальне повідомлення WM_COMMAND. При цьому молодше слово параметру wParam мітсить ідентифікатор, а lParam – дескриптор цього спику. Старше слово параметру wParam мітсить код сповіщення.

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

Приклад роботи з комбінованим списком.

Задача. У вікні додатку створити однорядковий редактор, комбінований список та кнопку “Добавити”. При натисненні на кнопку вміст редактора записати в список. При подвійному калцанні по рядку списку повідомити про рядок, який було обрано.

Розв‘язок.

#include " Functions.h"

#define ID_EDIT 1000

#define ID_LISTBOX 1001

#define ID_BUTTON 1002

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

HINSTANCE hInstance;

char szClassName[]=" ComboList";

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_VISIBLE, 100, 50, 364, 260,

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

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

{ TranslateMessage(& msg); DispatchMessage(& msg); }

return msg.wParam; }

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

{ static HWND hCombBox, hEdit, hButton, hStatic; int uItem; char Buf[80];

switch(msg)

{ case WM_CREATE:

{ hStatic=CreateWindow(" STATIC", " Введіть рядок для введення в список",

WS_CHILD|WS_VISIBLE|SS_CENTER,

30, 10, 300, 20, hwnd, (HMENU)0, hInstance, NULL);

hEdit=CreateWindow(" EDIT", NULL,

WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT|ES_AUTOHSCROLL,

30, 40, 300, 30, hwnd, (HMENU)ID_EDIT, hInstance, NULL);

SendMessage(hEdit, EM_LIMITTEXT, 35, 0L);

hCombBox=CreateWindow(" COMBOBOX", NULL,

WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_SIMPLE|CBS_SORT,,

30, 80, 300, 100, hwnd, (HMENU)ID_COMBBOX, hInstance, NULL);

hButton=CreateWindow(" BUTTON", " Додати",

WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,

130, 190, 100, 30, hwnd, (HMENU)ID_BUTTON, hInstance, NULL);

SetFocus(hEdit); return 0; }

case WM_COMMAND:

{ switch (LOWORD (wParam))

{ case ID_COMBBOX:

{switch (HIWORD(wParam))

{case CBN_ERRSPACE:

{MessageBox(hwnd, " Мало пам'яті",

szTitle, MB_OK);

return 0; }

case CBN_DBLCLK:

{uItem=(int)SendMessage(hCombBox,

CB_GETCURSEL, 0, 0L);

If (uItem! =LB_ERR)

{SendMessage(hCombBox, CB_GETLBTEXT,

uItem, (LPARAM)Buf);

MessageBox(hwnd, (LPSTR)Buf, szTitle, MB_OK); }

return 0; }

default: return 0; }

return 0; }

case ID_BUTTON:

{SendMessage(hEdit, EM_GETLINE, 0, (LPARAM)Buf);

SendMessage(hCombBox, CB_ADDSTRING, 0, (LPARAM)Buf);

SetWindowText(hEdit, " \0");

SetFocus(hEdit); return 0; }

default: return 0; } }

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

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

Текст додатку від попереднього відрізняється виглядом використовуваного списка – замість простого використовується комбінований список. Відміни пов’язані з іменами класу COMBOBOX, кодами сповіщень та повідомленнями.

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

 

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

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

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

3. Висновок.

 

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

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

1. При запуску додатка запитати пароль. Робочу область при будь-яких змінах розмірів вікна додатку повністю займає багаторядковий редактор зі смугами перегляду та фокусом введення. За замовчуванням користувач працює в режимі “Гість”, та редактор тексту підтримує не всі стандартні можливості. А зареєстрованому користувачу доступні всі стандартні можливості.

2. В лівому верхньому куті робочої області вікна додатку створити список. Праворуч від списку створити комбінований список. Списки відображати у вікні додатку після натискання лівої кнопки миші і приховувати після натискання правої (в тому числі при натисканні над будь-яким списком). За замовчуванням фокус введення встановити у вікні вибору.

3. Створити два списки, між ними розташувати кнопки “Перемістити праворуч” та “Перемітсити ліворуч”. Лівий список повинен бути ппочатково заповнений списком рядків. Якщо обрати рядок і натиснути одну з кнопок, то обраний рядок повинен перемітситись зліва направо або навпаки.

4. Вікно містить порожній рядок введення з написом “Введіть прізвище, ім’я, по-батькові”, групу перемикачів “Стать” з двох пунктів (“Чоловік” та “Жінка”) і кнопку “Так”. При натисканні на кнопку “Так” непорожній вміст рядка введення записати в заголовок групи. Потім при виборі статі повідомити новий вміст заголовка групи, обрану стать та повернутись до початкового стану.

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

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

7. В робочій області відображено кнопку з написом “Натисніть праву кнопку миші над робочою областю”. Після натискання правої кнопки миші кнопка приховується і відображається багаторядковий редактор з текстом “Натисніть ліву кнопку миші над робочою областю”. Після натискання лівої кнопки миші повернутись до початкового стану.

8. Створити два однорядкових редактора, під ними два комбінованих списки і ще нижче кнопку “Запис”. В першому редакторі вводити прізвище, в другому – ім’я. Після натискання кнопки “Запис” непорожній вміст редакторів записати в 2 списки. Причому список прізвищ повинен бути сортований в алфавітному порядку. При виділенні прізвища в одному списку виділити відповідне ім’я в другому списку.

9. При запуску першого екземпляра додатку у вікні додатку відобразити поле введення пароля, а при запуску наступних екземплярів того ж додатку запитати, чи дійсно потрібно запускати ще один екземпляр. Якщо «Так», запустити ще один екземпляр, але пароль більше не запитувати.

10. Створити однорядковий редактор, список і кнопки «Добавити» та «Змінити». При натисканні на кнопку «Добавити» вміст редактора (якщо він не порожній) добавати в список, очистити редактор та передати йому фокус введення. При натисканні на кнопку «Змінити» обраний рядок списку (якщо він обраний) записати в редактор, видалити зі списку і передати фокус введення редактору.

11. Створити однорядковий редактор, список і кнопку «Знайти». Початково заповнити список набором рядків. При натисканні на кнопку «Знайти» вміст редактора (якщо він не порожній) використовувати в якості початкових букв пошуку рядка в списку і обрати знайдений рядок.

12. В цнтрі екрану відобразити вікно без рамок, в верхній частині якого відобразити текст «Анкетні дані працівника», нижче – поле введення прізвища, ім’я, по-батькові, під яким групи перемикачів про стать та освіту. Вікно також містить кнопки “Запис”, “Очищення” та “Вихід”.

13. Створити рядок введення з числом 0 і праворуч від нього – маленьку вертикальну смугу прокрутки. Під ними кнопки “Вихід” і “Так”. При натисканні на верхню кнопку смуги число в рядку введення збільшити на 1, а на нижню кнопку – зменшити на 1. При натисканні кнопки “Так” відобразити вміст рядка введення, а кнопки “Вихід” – завершити роботу.

14. У вікні додатку відобразити однорядковий редактор, під ним список і ще нижче – кнопку з написом “Так”. При натисканні на кнопку записати у вікно редактора текст про натискання кнопки.

15. В робочій області вікна перерахувати назви вивчених в семестрі дисциплін та помітити назви дисциплін, які є сьогодні. Виділити серед цих дисциплін ті, по яких немає екзамену.

16. В правому верхньому куті робочої області вікна додатку створити список. Ліворуч від списку створити комбінований список. Списки відображати у вікні додатку після натискання правої кнопки миші і приховувати після натискання лівої (в тому числі при натисканні над будь-яким списком). За замовчуванням фокус введення встановити у вікні вибору.

17. Вікно містить порожній рядок введення з написом “Введіть прізвище, ім’я, по-батькові”, групу перемикачів “Зріст” з трьох пунктів (“До 150 см”, “150-180 см” “Більше 180 см”) і кнопку “Так”. При натисканні на кнопку “Так” непорожній вміст рядка введення записати в заголовок групи. Потім при виборі зросту повідомити новий вміст заголовка групи, обраний зріст та повернутись до початкового стану.

18. Вікно містить порожній рядок введення з написом “Введіть прізвище, ім’я, по-батькові”, групу перемикачів “Вік” з 5 пунктів (“До 20 років”, “20-30 років”, “30-40 років”, “40-50 років” та “Старше 50 років”) і кнопку “Так”. При натисканні на кнопку “Так” непорожній вміст рядка введення записати в заголовок групи. Потім при виборі віку повідомити новий вміст заголовка групи, обраний вік та повернутись до початкового стану.

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

20. В центрі екрану відобразити вікно без заголовка з фоном кольору тривимірних елементів. Вікно містить текст про автора програмного продукту та кнопки “Вихід” і “Так”. При натисканні кнопки “Вихід” завершити роботу, а кнопки “Так” – текст у вікні замінити введеним текстом про правила роботи, а кнопки замінити кнопками “Назад” і “Далі”. При натисканні кнопки “Назад” повернутись до почтакового стану.

21. Комбінований список початково заповнити довільними різними рядками. Поруч розташувати кнопку “Вниз”. Якщо обрати рядок і натиснути кнопку “Вниз”, то цей рядок повинен посунутись вниз на одну позицію в списку. Якщо цей рядок вже останній в списку, то заблокувати кнопку.

22. Створити два однорядкових редактора, під ними два комбінованих списки і ще нижче кнопку “Запис”. В першому редакторі вводити прізвище, в другому – посаду. Після натискання кнопки “Запис” непорожній вміст редакторів записати в 2 списки. Причому список прізвищ повинен бути сортований в алфавітному порядку. При виділенні прізвища в одному списку виділити відповідну посаду в другому списку.

23. Створити два однорядкових редактора, під ними два комбінованих списки і ще нижче кнопку “Запис”. В першому редакторі вводити прізвище, в другому – розімр заробітної плати. Після натискання кнопки “Запис” непорожній вміст редакторів записати в 2 списки. Причому список прізвищ повинен бути сортований в алфавітному порядку. При виділенні прізвища в одному списку виділити відповідну заробітну плату в другому списку.

24. Створити однорядковий редактор, список і кнопку «Добавити». При натисканні на кнопку «Добавити» вміст редактора (якщо він не порожній) добавати в список, очистити редактор та передати йому фокус введення.

25. Створити рядок введення з числом 0 і праворуч від нього – маленьку вертикальну смугу прокрутки. Під ними кнопки “Вихід” і “Так”. При натисканні на верхню кнопку смуги число в рядку введення збільшити на 2, а на нижню кнопку – зменшити на 2. При натисканні кнопки “Так” відобразити вміст рядка введення, а кнопки “Вихід” – завершити роботу.

26. Створити рядок введення з числом 0 і праворуч від нього – маленьку вертикальну смугу прокрутки. Під ними кнопки “Вихід” і “Так”. При натисканні на верхню кнопку смуги число в рядку введення збільшити на 10, а на нижню кнопку – зменшити на 10. При натисканні кнопки “Так” відобразити вміст рядка введення, а кнопки “Вихід” – завершити роботу.

27. В робочій області вікна перерахувати назви вивчених в минулому семестрі дисциплін та помітити назви дисциплін, які були 2 семестри. Виділити серед цих дисциплін ті, по яких не було екзамену.

28. Вікно містить порожній рядок введення з написом “Введіть прізвище, ім’я, по-батькові викладача”, групу перемикачів “Посада” з 4 пунктів (“Асистент”, “Старший викладач” “Доцент”, “Професор”) і кнопку “Так”. При натисканні на кнопку “Так” непорожній вміст рядка введення записати в заголовок групи. Потім при виборі посади повідомити новий вміст заголовка групи, обрану посаду та повернутись до початкового стану.

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

30. Створити два однорядкових редактора, під ними два комбінованих списки і ще нижче кнопку “Запис”. В першому редакторі вводити прізвище жінки, в другому – дівоче прізвище. Після натискання кнопки “Запис” непорожній вміст редакторів записати в 2 списки. Причому список прізвищ повинен бути сортований в алфавітному порядку. При виділенні прізвища в одному списку виділити відповідне дівоче прізвище в другому списку.

 

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

1. В чому перевага використання комбінованого списка в порівнянні із звичайним списком?

2. Що буде, якщо при створенні комбінованого списка другим аргумнтом вказати на деякий рядок?

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

4. Які органи управління і в якому випадку не використовують дескрипторів вікон?

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



Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.012 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал