На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Allocating a Text Buffer



When Windows creates an edit control, it automatically creates a text buffer, sets its initial size, and increases the size as necessary. The size can be up to a predefined limit of approximately 32 kilobytes for single-line edit controls. Because this limit can change, it is called a soft limit. An application can set a hard limit to the buffer size by sending an EM_SETLIMITTEXT message to the edit control. If the buffer exceeds either limit, Windows sends the application an EN_ERRSPACE message. An application can retrieve the current text limit by sending an EM_GETLIMITTEXT message.

Windows typically creates an edit control buffer in a dialog box, using memory outside the application's data segment. An application can suppress this default allocation behavior and create the buffer from its local heap by using the DS_LOCALEDIT style when creating the edit control. An application that uses the DS_LOCALEDIT style is responsible for all buffer allocations. To make the initial allocation, an application can call the LocalAlloc function and pass the returned buffer handle to the edit control by sending it an EM_SETHANDLE message. To make subsequent allocations (in response to an EN_ERRSPACE message, for example), an application should save the current buffer content (if necessary) and obtain a new buffer as follows:

1. Retrieve the handle of the memory currently allocated for the text in a multiline edit control by sending the control an EM_GETHANDLE message.
2. Free the buffer by calling the LocalFree function.
3. Obtain a new buffer (and buffer handle) by calling LocalAlloc.
4. Give the buffer handle to Windows by sending the control an EM_SETHANDLE message.



The EM_SETHANDLE and EM_GETHANDLE messages apply only to multiline edit controls.
An application that uses the default allocation behavior (that is, does not use the DS_LOCALEDIT style) must not send EM_SETHANDLE and EM_GETHANDLE messages to the edit control.
Sending an EM_SETHANDLE message has several side effects: it clears the undo flag (making the EM_CANUNDO message return zero), it clears the modify flag (making the EM_GETMODIFY message return zero), and it redraws the edit control window.


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Распределение Текстового Буфера



Когда Окно создает управление редактирования, оно автоматически создает текстовый буфер, устанавливает свой начальный размер, и увеличивает размер как необходимый. Размер может быть вплоть до встроенного предела приблизительно 32 килобайтов для линейных элементов управления редактирования. Поскольку этот предел может измениться, он назван мягкий предел. Приложение может установить жесткий предел в буферный размер посылая сообщение EM_SETLIMITTEXT на управление редактирования. Если буфер превышает также предел, Окно посылает приложению сообщение EN_ERRSPACE. Приложение может извлечь текущий текстовый предел посылая сообщение EM_GETLIMITTEXT.

Windows обычно создает управляющему буферу редактирования в диалоговом блоке, использовании памяти за пределами прикладного сегмента данных. Приложение может подавить это по умолчанию поведение распределения и создавать буфер из своей локальной кучи используя стиль DS_LOCALEDIT при создании управления редактирования. Приложение, которое использует стиль DS_LOCALEDIT ответственное за все буферные распределения. Чтобы делать начальным распределением, приложение может вызвать функцию LocalAlloc и передавать возвращанную буферную ручку на управление редактирования посылая этому сообщение EM_SETHANDLE. Для того, чтобы делать последующими распределениями (в ответ на сообщение EN_ERRSPACE, например), приложение должно сохранять текущее буферное содержимое (если необходимый) и получать новый буфер следующим образом:

1. Извлеките ручку памяти к настоящему времени распределенной для текста на управлении редактирования multiline посылая управление сообщение EM_GETHANDLE.
2. Освободите буфер вызывая функцию LocalFree.
3. Получите новый буфер (и буферная ручка) вызывая LocalAlloc.
4. Дайте буферную ручку на Windows посылая управление сообщение EM_SETHANDLE.



EM_SETHANDLE И сообщения EM_GETHANDLE относятся только, чтобы multiline элементы управления редактирования.
Приложение, которое использует по умолчанию поведение распределения (то есть, не использует стиль DS_LOCALEDIT), не должно посылать EM_SETHANDLE и сообщения EM_GETHANDLE на управление редактирования.
Посылка сообщения EM_SETHANDLE имеет несколько побочных эффектов: это очищает флаг отмены (получение сообщения EM_CANUNDO обратного нуля), она очищает модифицировать флаг (получение сообщения EM_GETMODIFY обратного нуля), и это перерисовывает управляющее окно редактирования.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz