Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Списки рядків
Створення списку. Списки рядків створюють на базі класу LISTBOX. Рядки в списку нумерує операційна система, і номер першого рядка дорівнює 0. Списки можуть бути одноколонкові та багатоколонкові, з вертикальною (для одноколонкових списків) та горизонтальною (для багатоколонкових списків) смугою перегляду. При створенні списку першим аргументом функції CreateWindow є вказівник на рядок “LISTBOX”, а третій аргумент задають за допомогою таблиці 3.2.
Таблиця 3.2. Список стилів списку рядків
Наприклад: hListBox=CreateWindow(" LISTBOX", NULL, WS_CHILD|WS_VISIBLE|LBS_STANDARD|LBS_WANTKEYBOARDINPUT, 30, 30, 200, 100, hwnd, (HMENU)ID_LIST, hInst, NULL); Другий аргумент функції повинен бути вказаний як NULL. Додатково до стилів вікна WS_CHILD та WS_VISIBLE вказують стилі списку, імена яких мають префікс LBS_ Повідомлення від списку. Список зі стилем LBS_NOTIFY надсилає в функцію батьківського вікна сповіщувальне повідомлення WM_COMMAND. При цьому молодше слово параметру wParam дорівнює ідентифікатору списка. Параметр lParam містить дескриптор списку. Старше слово параметра wParam мітсить один з кодів сповіщення. Повідомлення для списку. Додаток може надсилати списку повідомлення, викликаючи функцію SendMessage. Символічні імена цих повідомлень мають префікс LB_ Приклад роботи зі списком. Задача. У вікні додатку створитти однорядковий редактор, список і кнопку “Добавити”. При натисканні на кнопку вміст редактора записати в список. При подвійному клацанні по рядку списку повідомити про рядок, який був обраний. Розв‘язок. #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[]=" ListDir"; 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, hInst, 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 hListBox, 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_AUTOSCROLL, 30, 40, 300, 30, hwnd, (HMENU)ID_EDIT, hInstance, NULL); SendMessage(hEdit, EM_LIMITTEXT, 35, 0L); HListBox=CreateWindow(" LISTBOX", NULL, WS_CHILD|WS_VISIBLE|LBS_STANDARD, 30, 80, 300, 100, hwnd, (HMENU)ID_LISTBOX, hInstance, NULL); hButton=CreateWindow(" BUTTON", " Додати", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 130, 85, 100, 30, hwnd, (HMENU)ID_BUTTON, hInstance, NULL); SetFocus(hEdit); return 0; } case WM_COMMAND: { switch (LOWORD (wParam)) { case ID_LISTBOX: {switch (HIWORD(wParam)) {case LBN_ERRSPACE: {MessageBox(hwnd, " Мало пам'яті", szTitle, MB_OK); return 0; } case LBN_DBLCLK: {uItem=(int)SendMessage(hListBox, LB_GETCURSEL, 0, 0L); If (uItem! =LB_ERR) {SendMessage(hListBox, LB_GETTEXT, uItem, (LPARAM)Buf); MessageBox(hwnd, Buf, szTitle, MB_OK); } return 0; } default: return 0; } return 0; } case ID_BUTTON: {SendMessage(hEdit, EM_GETLINE, 0, (LPARAM)Buf); SendMessage(hListBox, LB_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); }
|