Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Назначение и использование




По умолчанию создается прямоугольное окно, однострочное. При получении фокуса появляется в окне каретка. В таком применении окно edit используется для ввода текстовой информации. Одним из простейших применений окон редактирования — элементов управления (или управляющих окон редактирования, edit controls) является простое однострочное окно ввода данных. Но окна редактирования не ограничены только одной строкой, могут использоваться так же с целью

использования окон меню, диалога (для открытия и сохранения файлов) и принтеров.

Нам необходимо чтобы окно редактирования при получении сообщения от Еnter послало WM_COMMAND родителю с кодом Enter.

Для решения задачи создается new proc edit. Она будет получать все сообщения от едит, а обрабатывать будет только сообщения от Ентер. Затем все сообщения включая сообщения от едит пересылать на обработку станд. Обработчику edit. Такой подход напоминает перехват под DОS.

 

Сall Back New Proc Edit(HWND, &Msg, wParam, lParam)

If (msg== WM_keydown&&VK_RETURN==wParam)

sendmessage(Get Parent(hwnd)), vm_command

MakeLong(Id_edit, Vk_return, hwnd);

CallWndProc(fnOldEdit, hwnd, Imsg, wParam, lParam)

53. Создание окон редактирования в окне приложения. Основные функции окна редактирования. Сообщения окна родительскому окну и сообщения посылаемые окну редактирования.

В обработке сообщения WM_Create обычно создаются все дочерние окна, в том числе edit. После его создания использует функция

FnOldEdit=GetWindowLong(hwnd, HWL_WNDProc, hedit, NewProc Edit)

Возвтращает указатель на стандартную оконную процедуру edit и перенаправляет сообщение в NewProcEdit.

Окна редактирования посылают оконной процедуре родительского окна сообщения WM_COMMAND(EN_SETFOCUS, EN_KILLFOCUS, EN_ERESPASE). Значения переменных lParam и wParam, являющихся параметрами этих сообщений такие же, как и для кнопок управления:

Параметр Описание

LOWORD (wParam) Идентификатор дочернего окна

HIWORD (wParam) Код уведомления

lParam Описатель дочернего окна

 

Расшифровка сообщений WM_COMMAND в оконной процедуре главного окна.

Сase: WM_COMMAND

If Loword(WParam)= =ID_Edit)&&(Hword(WParam)= =VK_RETURN

ILenght= GetWindow(HWND) lParam, sz Bufer, max len.

Вот несколько сообщений, которые мы можем послать управляющему окну редактирования с помощью функции SendMessage

SendMessage(hwndEdit, WM_CUT, 0, 0);

SendMessage(hwndEdit, WM_COPY, 0, 0);

SendMessage(hwndEdit, WM_CLEAR, 0, 0);

Сообщение WM_CUT удаляет выделенный текст из окна редактирования и посылает его в папку обмена. Сообщение WM_COPY копирует выделенный текст в папку обмена, оставляя его неизменным в Окне редактирования

Сообщение WM_CLEAR удаляет выделенный текст из окна редактирования без копирования егов папку обмена. И другие…

Еще список команд, но не думаю что он особо нужен, но пусть будет.

Вы также можете вставить текст из папки обмена в месте, соответствующем позиции курсора в окне редактирования:

SendMessage(hwndEdit, WM_PASTE, 0, 0);

Вы можете получить начальное и конечное положения текущего выделения:

SendMessage(hwndEdit, EM_GETSEL,(WPARAM) &iStart,(LPARAM) &iEnd);

Конечным положением фактически является положение последнего выделенного символа плюс 1.

Вы можете выделить текст: SendMessage(hwndEdit, EM_SETSEL, iStart, iEnd);

Вы также можете заменить текущий выделенный текст другим текстом:

SendMessage(hwndEdit, EM_REPLACESEL, 0,(LPARAM) szString);

Для многострочных окон редактирования вы можете получить число строк:

iCount = SendMessage(hwndEdit, EM_GETLINECOUNT, 0, 0);

Для любой отдельной строки вы можете получить смещение текста от начала буфера редактирования: iOffset = SendMessage(hwndEdit, EM_LINEINDEX, iLine, 0);

Строки нумеруются, начиная с 0. При значении iLine равном —1 функция возвращает смещение строки, содержащей курсор. Длину строки можно получить из:

iLength = SendMessage(hwndEdit, EM_LINELENGTH, iLine, 0);

и копировать саму строку в буфер можно таким образом:

iLength = SendMessage(hwndEdit, EM_GETLINE, iLine,(LPARAM) szBuffer);

 

54. Класс окна списка(list-box). Основные стили класса, назначение и использование окна списка диалога.

Стили класса(Питзольд)

Дочернее окно списка вы создаете с помощью вызова функции CreateWindow, используя имя "listbox" в качестве имени класса окна и WS_CHILD в качестве идентификатора стиля. Однако при этом задаваемом по умолчанию стиле сообщения WM_COMMAND родительскому окну не посылаются. Это означает, что программе следует опрашивать окно списка (посредством сообщений к нему) относительно выбранных в списке пунктов. Поэтому

окно списка почти всегда включает идентификатор стиля окна LBS_NOTIFY, что позволяет родительскому окну получать от окна списка сообщения WM_COMMAND. Если вы хотите получить возможность сортировки элементов списка, вам необходимо использовать в окне списка и другой часто используемый идентификатор стиля — LBS_SORT.

По умолчанию, в списке допускается выбор только одного пункта. Если вы хотите создать список с возможностью выборки сразу нескольких пунктов, вам необходимо использовать идентификатор стиля LBS_MULTIPLESEL.

Обычно, если к списку добавляется новый элемент, то окно списка обновляется. Вы можете предотвратить это, если включите стиль LBS_NOREDRAW. Скорее всего вы не захотите использовать этот стиль. Вы можете временно запретить перерисовку окна списка, используя сообщение WM_SETREDRAW, о котором будет рассказано чуть позже.

По умолчанию, оконная процедура окна списка выводит на экран только список элементов без какой-либо рамки вокруг него. Рамку окна вы можете добавить с помощью идентификатора стиля окна WS_BORDER. Для прокрутки содержимого списка с помощью мыши и вертикальной полосы прокрутки используйте идентификатор стиля окна WS_VSCROLL.

В заголовочных файлах Windows определяется стиль окна списка, который называется LBS_STANDART и включает в себя наиболее часто употребляемые стили. Он определяется следующим образом:

(LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)

Вы также можете пользоваться идентификаторами WS_SIZEBOX и WS_CAPTION, которые дают возможность менять размер окна списка и перемещать его по рабочей области родительского окна.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...