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



Поля редактирования посылают оконной процедуре родительского окна сообщения 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!