Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 курс / Лекции / Лекции 4-5.pptx
Скачиваний:
67
Добавлен:
18.02.2023
Размер:
1.46 Mб
Скачать

//Функция InitApp

//Выполняет регистрацию класса окна

//=====================================

BOOL InitApp(HINSTANCE hInstance)

{

ATOM aWndClass; // атом для кода возврата

WNDCLASS wc; // структура для регистрации // класса окна

memset(&wc, 0, sizeof(wc));

wc.style = 0;

wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0;

wc.cbWndExtra = 0; wc.hInstance = hInstance;

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszMenuName = (LPSTR)NULL;

wc.lpszClassName = (LPSTR)szClassName;

// Регистрация класса aWndClass = RegisterClass(&wc);

return (aWndClass != 0);

}

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

{

static HWND hListBox;

// Идентификатор органа управления "listbox"

static HWND hButton;

// Идентификатор кнопки

switch (msg)

 

{

 

case WM_CREATE:

{// Создаем список

hListBox = CreateWindow("listbox", NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_WANTKEYBOARDINPUT, 30, 30, 200, 100, hwnd, (HMENU) ID_LIST, hInst, NULL);

SendMessage(hListBox, WM_SETREDRAW, FALSE, 0L);

// Отменяем режим перерисовки

списка

 

// Добавляем в список несколько строк

SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Зеленый"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Красный"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Розовый"); SendMessage(hListBox, LB_ADDSTRING, 0,(LPARAM)(LPSTR)"Пурпурный"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Синий"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Желтый"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Фиолетовый"); SendMessage(hListBox, LB_ADDSTRING, 0,(LPARAM)(LPSTR)"Черный"); SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPSTR)"Белый");

SendMessage(hListBox, WM_SETREDRAW, TRUE, 0L); // Включаем режим перерисовки списка InvalidateRect(hListBox, NULL, TRUE); // Перерисовываем список

// Создаем кнопку

hButton = CreateWindow("button", "OK", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 250, 30, 50, 20, hwnd, (HMENU) ID_BUTTON, hInst, NULL);

case WM_COMMAND:

{

if(wParam == ID_LIST) // Обработка извещения списка об ошибке

{

if(HIWORD(lParam) == (unsigned)LBN_ERRSPACE)

{

MessageBox(hwnd, "Мало памяти", szWindowTitle, MB_OK);

}

}

else if(wParam == ID_BUTTON) // Сообщение от кнопки

{

int uSelectedItem; char Buffer[256];

// Определяем номер выделенной строки, получаем текст строки //и выводим этот текст в окно

uSelectedItem = (int)SendMessage(hListBox, LB_GETCURSEL, 0, 0L);

if(uSelectedItem != LB_ERR)

{

SendMessage(hListBox, LB_GETTEXT, uSelectedItem, (LPARAM)Buffer); MessageBox(hwnd, (LPSTR)Buffer, szWindowTitle, MB_OK);

}

}

return 0;

}

// Когда главное окно приложения получает фокус ввода, отдаем фокус списку case WM_SETFOCUS:

{

SetFocus(hListBox); return 0;

}

case WM_PAINT:

{

HDC hdc; PAINTSTRUCT ps;

hdc = BeginPaint(hwnd, &ps);

TextOut(hdc, 30, 10,"Выберите цвет и нажмите кнопку 'OK'", 35); EndPaint(hwnd, &ps);

return 0;

}

case WM_DESTROY:

{

PostQuitMessage(0); return 0;

}

}

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

}

http://www.frolov-lib.ru/books/bsp/v12/ch2_5.htm

Комбинированный

список – класс

Стили комбинированного списка

CBS_AUTOHSCROLL “combobox”Автоматическая свертка текста по горизонтали в окне

 

редактирования

CBS_DISABLENOSCROLL

Вертикальную полосу просмотра отображать в неактивном

 

состоянии даже если в списке помещаются все строки

CBS_DROPDOWN

Список остается невидимым до тех пор, пока пользователь

 

не нажмет пиктограмму, предназначенную для отображения

 

списка

CBS_DROPDOWNLIST

Запрещает редактирование текста в однострочном

 

текстовом редакторе

CBS_LOWERCASE

Преобразовывать все символы в строчные

CBS_UPPERCASE

Преобразовывать все символы в прописные

CBS_SIMPLE

Создается список, который всегда и расположен под окном

 

однострочного редактора, содержащего выделенную в

 

списке строку

CBS_SORT

Автоматически сортирует строки введенные в окно списка

Сообщения от комбинированного списка

 

 

CBN_CLOSEUP

Список исчез (стал невидимым)

 

 

CBN_DBLCLK

Двойной щелчок мыши по строке списка CBS_SIMPLE

 

 

CBN_DROPDOWN

Список стал видимым

 

 

CBN_EDITCHANGE

Пользователь изменил содержимое окна редактирования и

 

изменения отображены

 

 

CBN_EDITUPDATE

Пользователь изменил содержимое окна редактирования

 

 

CBN_ERRSPACE

Ошибка выделения дополнительной памяти

 

 

CBN_KILLFOCUS

Список теряет фокус управления

 

 

CBN_SELENDCANCEL

Пользователь отменил выбор в списке

 

 

CBN_SELENDOK

Пользователь выбрал строку в списке

 

 

CBN_SEKCHANGE

Изменился номер выбранной строки

 

 

CBN_SETFOCUS

Список получает фокус ввода

 

 

Сообщения для комбинированного списка

CB_ADDSTRING, 0,

Добавить строку lpszStr. Возвращает номер строки или

lParam = lpszStr

код ошибки

 

 

CB_DELETESTRING,

Удалить строку с номером nIndex. Возвращает

wParam = nIndex, 0L

количество оставшихся строк в списке или код ошибки.

 

 

CB_DIR, wParam = uAttr,

Заполнить список именами файлов с атрибутом uAttr – и

lParam = lpszFileSpec

шаблона lpszFileSpec и каталогов в текущем каталоге

 

 

CB_FINDSTRING,

Начиная со строки с номером nStart искать строку с

wParam = nStart,

префиксом lpszStr. Возвращает номер найденной строки

lParam = lpszStr

или код ошибке

 

 

CB_GETCOUNT, 0, 0L

Определить количество строк в списке. Возвращает

 

количество или код ошибки

 

 

CB_GETCURSEL, 0, 0L

Определить номер выделенной строки. Возвращает

 

номер или код ошибке.

 

 

CB_GETDROPPEDSTATE,

Определить, находится ли список в видимом или

0, 0L

невидимом состоянии. Возвращает TRUE – если виден,

 

FALSE – если нет.

 

 

Сообщения для комбинированного списка

CB_GETLBTEXT,

Копировать текст строки с номером nIndex в буфер

wParam = nIndex,

lpBuff. Возвращает длину строки или код ошибки

lParam = lpBuff

 

 

 

CB_INSERTSTRING,

Вставка строки lpBuff в список под номером nIndex.

wParam = nIndex,

Возвращает номер позиции или код ошибки

lParam = lpBuff

 

 

 

CB_LIMITEXT,

Определить cCmax как максимально допустимое

wParam = cCmax, 0L

количество символов в окне редактирования.

 

 

CB_RESETCONTENT, 0, 0L

Удалить все строки из списка

 

 

CB_SELECTSTRING,

Начиная со строки с номером nIndex найти и выделить

wParam = nIndex,

строку с префиксом lpBuff. Возвращает номер найденной

lParam = lpBuff

строки или код ошибки

 

 

CB_SETCURSEL,

Выделить строку с номером nIndex. Возвращает код

wParam = nIndex, 0L

ошибки.

 

 

CB_SHOWDROPDOWN,

Переключение списка в отображаемое или

wParam = (BOOL)fExt, 0L

неотображаемое состояние. fExt = TRUE – отображать,

 

FALSE – не отображать

 

 

Пример

Программа создает и заполняет combobox, а также кнопку «ОК», при нажатии на которую в центре экрана выводится MessageBox с сообщением, соответствующим содержанию выбранной строки.

#include <windows.h> #define ID_CBB 10000 #define ID_BUTTON 20000 BOOL InitApp(HINSTANCE);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); char const szClassName[] = "ComboBoxAppClass";

char const szWindowTitle[] = "ComboBox Demo"; HINSTANCE hInst;

Соседние файлы в папке Лекции