Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Комбінований список
Створення комбінованого списку. Цей оран є комбінацією однорядкового редактора тексту і списку і створюється на базі класу 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. Список стилів комбінованого списка
Коди сповіщення. Комбінований список надсилає функції батьківського вікна сповіщувальне повідомлення 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. Які основні етапи створення орагнів управління?
|