Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
43-70_otvety_na_teplogo.docx
Скачиваний:
0
Добавлен:
27.12.2019
Размер:
87.53 Кб
Скачать

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, которые дают возможность менять размер окна списка и перемещать его по рабочей области родительского окна.

Назначение и использование (конспект)

Использование списка диалога для разработки коммандера

SendMessage(hwndlist, LB_DIR, 0x37, “.”)

Выполняется отбор всех элементов оглавления по заданному пути с заданными атрибутами. Имена файлов и каталогов в виде строк заполняет список, появляются строки с именами.

DDL_READWRITE 0x0000-без астриббута DDL_READONLY 0х0001для чтения DDL_DIRECTORY 0х0010 дирректория DDL_DRIVE 0х4000 чтение дисков DDL_EXCLUSIVE 0х8000 по умолчанию

В widows перешло правило из DOS, если задать атрибут только DDL_READ_WRITE, то будут отбираться файлы только для чтения и архивные. Если задать атрибут директории, то будут отбираться обычные, только для чтения, и архивные. Атрибут EXLUSIVE- это правило отменяет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]