Назначение и использование
По умолчанию создается прямоугольное окно, однострочное. При получении фокуса появляется в окне каретка. В таком применении окно 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|