Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ІК (Говорущенко) Методичка.doc
Скачиваний:
6
Добавлен:
23.02.2016
Размер:
762.88 Кб
Скачать

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

Створення комбінованого списку. Цей оран є комбінацією однорядкового редактора тексту і списку і створюється на базі класу 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 списки. Причому список прізвищ повинен бути сортований в алфавітному порядку. При виділенні прізвища в одному списку виділити відповідне дівоче прізвище в другому списку.