Выпадающие списки (класс combobox)
Этот класс является комбинацией списка и однострочного редактора, поэтому для комбинированного списка используются стили, коды извещения и сообщения, аналогичные списку ”listbox”, а также некоторые сообщения, специфические для редактора текста класса “edit”.
Базовые стили комбинированного списка
Среди всех стилей комбинированного списка можно выделить три базовых:
Стиль CBS_SIMPLE соответствует списку с окном редактирования (или, как его называют, окном выбора).
Если список имеет стиль CBS_DROPDOWN, в исходном состоянии он состоит из окна редактирования и расположенной справа пиктограммы со стрелкой (кнопкой, предназначенной для отображения списка). Если нажать на эту пиктограмму левой клавишей мыши, под окном редактирования появится список.
Стиль CBS_DROPDOWNLIST аналогичен стилю CBS_DROPDOWN, но окно редактирования можно использовать только для просмотра выделенной строки, а не для редактирования или ввода.
Рассмотрим сообщения от комбинированного списка, посылаемые родительскому окну
Комбинированные списки посылают оконной процедуре родительского окна сообщения WM_COMMAND. Значения параметров сообщения wParam и lParam такие же как и для кнопок. Коды извещения для комбинированного списка имеют символические имена с префиксом CBN_.
Для обработки сообщения от комбинированного списка оконная функция родительского окна может содержать код следующего вида:
|
|
case WM_COMMAND:
{ UINT idCtl=LOWORD(wParam); // идентификатор дочер. окна
UINT code=HIWORD(wParam); // код уведомления
HWND hChild=(HWND)lParam; // дескриптор дочер. окна
If(idCtrl==ID_combo&&code==CBN_SELCHANGE)
{
// сделан выбор в комбинированном списке
. . .
}
}; return 0;
Рассмотрим сообщения, посылаемые родительским окном комбинированным спискам
Для управления списком “combobox” используется набор сообщений, аналогичный набору сообщений для списка “listbox” и редактора текста “edit”. Функция SendMessage, посылающая сообщения списку, возвращает значение, которое зависит от выполняемой функции, или коды ошибок.
- В файле windows.h определены сообщения, специально предназначенные для работы со списком “combobox”. Символические имена этих сообщений имеют префикс CB_.
Полосы прокрутки (класс scrollbar)
В отличие от других дочерних окон управления, посылающих родительскому окну сообщения, полосы прокрутки не посылают сообщения WM_COMMAND. Вместо этого они, также как и полосы прокрутки окна, посылают ему сообщения WM_VSCROLL и WM_HSCROLL.
- При обработке сообщений полос прокрутки приложению с помощью параметра lParam может различать сообщения полос прокрутки окна и полос прокрутки – элементов управления. Для полос прокрутки окна lParam равен NULL, а для полос – элементов управления он является дескриптором этих полос прокрутки, другими словами дескриптором дочернего окна
- Значения же старшего и младшего слов параметра wParam для полос прокрутки окна и для полос прокрутки – дочерних окон имеют одинаковый смысл.
Замечание. Полосы прокрутки – элементы управления можно сделать любого размера. Для того чтобы создать элементы управления с теми же стандартными размерами, что и полосы прокрутки окна, можно использовать функцию GetSystemMetrics:
|
|
- вызов GetSystemMetrics(SM_CYHSCROLL) выдает высоту горизонтальной полосы прокрутки,
- а вызов GetSystemMetrics(SM_CXVSCROLL) – ширину вертикальной полосы прокрутки.
Для полос прокрутки – элементов управления также можно установить диапазон и текущее положение с помощью тех же вызовов функция, что и для полос прокрутки окна:
SetScrollRange(hWndScroll,SB _ CTL,iNewMin,iNewMax,bRedraw);
Полосы прокрутки – элементы управления могут обрабатывать сообщения клавиатуры, но только в том случае, если они имеют фокус ввода. Если необходимо, чтобы полоса прокрутки управления получала фокус ввода, когда на полосе прокрутки происходит щелчок мыши, то следует включить идентификатор WS_TABSTOP в параметр стиля дочернего окна управления при вызове функции CreateWindow.
|
|
Приведем пример обработки сообщений от полосы прокрутки – дочернего окна управления. Пусть в окне hWnd создано дочернее окно управления hWndScroll – вертикальная линейка прокрутки, и для нее установлены диапазон и текущее положение бегунка:
static int min_sb=1,max_sb=100,pos_sb=20;
SetScrollRange(hWndScroll,SB_CTL,min_sb,max_sb,TRUE);
SetScrollPos(hWndScroll,SB_CTL,pos_sb,TRUE);
Рассмотрим фрагмент оконной функции, демонстрирующий возможную обработку действий пользователя с этой вертикальной линейкой прокрутки:
case WM_VSCROLL:
{
// произведенное действие
int nScrollCode=(int)LOWORD(wParam);
// текущая позиция
short int nPos=(short int)HIWORD(wParam);
// дескриптор полосы просмотра или NULL
HWND hwndScrollBar=(HWND)lParam;
int old_pos_sb=pos_sb;
switch(nScrollCode)
{
case SB_PAGEDOWN: pos_sb+=10; break;
case SB_PAGEUP: pos_sb-=10; break;
case SB_LINEDOWN: pos_sb+=1; break;
case SB_LINEUP: pos_sb-=1; break;
|
|
case SB_THUMBPOSITION: pos_sb=nPos; break;
case SB_THUMBTRACK: pos_sb=nPos; break;
default: return 0l;
}
if(pos_sb<min_sb) pos_sb=min_sb;
if(pos_sb>max_sb) pos_sb=max_sb;
if(old_pos_sb!=pos_sb)
SetScrollPos(hWndScroll,SB_CTL,pos_sb,TRUE);
}; return 0l;
Список рекомендуемой литературы
1. Гордеев, А.В. Операционные системы : учебник для вузов / А. В. Гордеев ; А.В. Гордеев. - 2-е изд. - СПб. : Питер, 2007. - 416с. : ил. - (Учебник для вузов).
2. Синицын, С.В. Операционные системы : учебник для вузов / С. В. Синицын, А. В. Батаев, Н. Ю. Налютин ; С.В. Синицын, А.В. Батаев, Н.Ю. Налютин. - М. : ИЦ "Академия", 2010. - 304с. -
3. Столлингс, В. Операционные системы : внутреннее устройство и принципы проектирования / В. Столлингс ; В.Столлингс ; пер. с англ.: Д.Я. Иваненко и др. - 4-е изд. - М. ; СПб. ; К. : Вильямс, 2002. - 848с. : ил. - Перевод изд.: Operating Systems. Internals and Design Principles/ W. Stallings.
4. Таненбаум Э.С. Операционные системы: разработка и реализация / Э. С. Таненбаум, А. С. Вудхалл ; Э.С. Таненбаум, А.С. Вудхалл ; пер. с англ. Д. Шинтяков. - СПб. : Питер, 2006.
5. Олифер В.Г. Сетевые операционные системы : учебное пособие для вузов / В. Г. Олифер, Н. А. Олифер ; В.Г. Олифер, Н.А. Олифер. - СПб. : Питер, 2006. - 539с.
6. Таненбаум Э. Современные операционные системы / Э. Таненбаум ; Э. Таненбаум ; Пер. с англ. А. Леонтьева. - 2-е изд. - СПб. : Питер, 2006. - 1038с.
7. Рихтер, Дж. Windows : создание эффективных Win32-приложений с учетом специфики 64-разрядной версии Windows / Рихтер Дж. ; Дж. Рихтер. - Изд. 4-е. - СПб. : Питер ; М. : Русская редакция, 2003. - 752с.
8. Верма Р.Д. Справочник по функциям Win32 API / Р. Д. Верма ; Р.Д.Верма. - М. : Горячая линия-Телеком, 2002. - 488с.
9. Побегайло А.П. Системное программирование в Windows / А. П. Побегайло ; А.П. Побегайло. - 13 Мб. - СПб. : БХВ-Петербург, 2006.
Примечание. Можно использовать также и другую доступную литературу по указанным языкам и средствам программирования.
Дата добавления: 2019-09-13; просмотров: 187; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!