Рассмотрим, как окна редактирования уведомляют родительское окно о тех изменениях, которые с ними происходят
Поля редактирования посылают оконной процедуре родительского окна сообщения WM_COMMAND. Значения параметров сообщения wParam и lParam такие же, как и для кнопок. Ниже представлены коды уведомления управляющих окон редактирования:
- EN_SETFOCUS – окно получило фокус ввода.
- EN_KILLFOCUS – окно потеряло фокус ввода.
- EN_CHANGE – содержимое окна будет меняться.
- EN_UPDATE – содержимое окна изменилось.
- EN_ERRSPACE – произошло переполнение буфера редактирования.
- EN_MAXTEXT – произошло переполнение буфера редактирования при вставке.
- EN_HSCROLL – на горизонтальной полосе прокрутки был щелчок мышью.
- EN_VSCROLL – на вертикальной полосе прокрутки был щелчок мышью.
Для обработки сообщения от поля редактирования оконная функция родительского окна может содержать код следующего вида:
case WM_COMMAND:
{ UINT idCtl=LOWORD(wParam); // идентификатор дочер. окна
UINT code=HIWORD(wParam); // код уведомления
HWND hChild=(HWND)lParam; // дескриптор дочер. окна
if(idCtrl==ID_edit&&code==EN_CHANGE)
{
// текст поля сейчас будет меняться
. . .
}
}; return 0;
Родительские окна также могут посылать окнам редактирования сообщения
Специфических сообщений, которые родительское окно может послать окну редактирования при помощи функции SendMessage, достаточно много. Рассмотрим наиболее часто употребляемые:
- WM_CUT - для удаления с пересылкой в буфер обмена;
- WM_COPY - копирования в буфер обмена;
- WM_CLEAR - очищения выделенной части текста из окна редактирования;
- WM_PASTE - для вставки текста из буфера обмена в окно редактирования;
- EM_GETSEL - для получения начальной и конечной позиции текущего выделения текста;
- EM_SETSEL - для выделения некоторого участка текста;
- EM_REPLACESEL - для замены текущего выделенного текста другим текстом;
- EM_GETLINECOUNT - для получения число строк многострочного редактора;
- EM_LINEINDEX - для получения смещения от начала буфера до некоторой строки;
- EM_LINELENGTH - для получения длины некоторой строки;
- EM_GETLINE - для копирования некоторой строки в буфер программы.
|
|
Cписки разных стилей (класс listbox)
С помощью класса “listbox” можно создавать одноколоночные и многоколоночные списки, имеющие вертикальную (для одноколоночных списков) и горизонтальную (для многоколоночных списков) полосу просмотра.
- Список может быть как с одиночным выбором, так и с множественным. Последний позволяет пользователю выбирать более одного пункта списка
Окно списка посылает сообщение WM_COMMAND своему родительскому окну, когда в списке выбирается какой-либо пункт. Родительское окно может определить, какой пункт списка выбран.
Замечание. При необходимости родительское окно может создать список, внешний вид которого определяется пользователем, и само отрисовывать изображения элементов списка.
|
|
Рассмотрим стили окон списков
- При задаваемом по умолчанию стиле окна списка (только стиль WS_CHILD) сообщения WM_COMMAND родительскому окну не посылаются. Это означает, что программе следует опрашивать окно списка посредством передачи ему сообщений относительно выбранных в списке пунктов.
В окна списка почти всегда включают идентификатор стиля LBS_NOTIFY, что позволяет родительскому окну получать от окна списка сообщение WM_COMMAND.
Если приложение желает иметь возможность сортировать элементы списка, ему необходимо использовать в окне списке и другой часто используемый идентификатор стиля – LBS_SORT.
По умолчанию, в списке допускается выбор только одного пункта. Если необходимо создать список с возможностью выборки сразу нескольких пунктов, то следует использовать стиль LBS_MULTIPLESEL.
По умолчанию, оконная процедура окна списка выводит только список элементов без какой-либо рамки вокруг. Рамку можно добавить с помощью стиля WS_BORDER.
Для прокрутки содержимого с помощью мыши и вертикальной полосы прокрутки следует использовать стиль WS_VSCROLL.
|
|
В заголовочных файлах Windows определяется стиль списка, который называется LBS_STANDARD. Стиль LBS_STANDARD включает в себя наиболее часто используемые стили списка. Он определяется как комбинация
(LBS_NOTIFY|LBS_SORT|WS_VSCROLL|WS_BORDER)
Замечание. Также можно пользоваться стилями WS_SIZEBOX и WS_CAPTION, которые дают возможность менять размер окна и перемещать его по рабочей области родительского окна.
Дата добавления: 2019-09-13; просмотров: 153; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!