во первых структура которой представлен примитив пользовательского интерфейса (далее UI примитив)
(структура данного UI примитива представлена на состояние в ревизии 7906, в последствии она может измениться/расширится)
Code: Select all
struct EDIT_BOX
width dd ?
left dd ?
top dd ?
color dd ?
shift_color dd ?
focus_border_color dd ?
blur_border_color dd ?
text_color dd ?
max dd ?
text dd ?
mouse_variable dd ?
flags dd ?
size dd ?
pos dd ?
offset dd ?
cl_curs_x dw ?
cl_curs_y dw ?
shift dw ?
shift_old dw ?
height dd ?
char_width dd ?
ends
color, shift_color, focus_border_color, blur_border_color, text_color - это цвета UI примитива
- - color - цвет для заливки фона клиентской области (когда UI примитив в состоянии отличном от ED_DISABLED, о состояниях ниже)
- - shift_color - цвет для заливки фона части клиентской области (фона выделения). Выделение представляет собой область ограниченную символами в позиции каретки (pos) с одной стороны и позиции выделения (shift) с другой.
(СКОРРЕКТИРУЙТЕ МЕНЯ ЕСЛИ Я НЕ ПРАВ: возможно выделение ограничено shift и shift_old, а я сделал поспешный вывод).
- - focus_border_color, blur_border_color - соответственно цвета 1 пиксельной границы для UI примитива когда он в фокусе(т.е. установлен ED_FOCUS) или наоборот не в фокусе (сброшен ED_FOCUS)
- - text_color - комплексное поле, 3 младших байта которого представляют цвет шрифта UI примитива, в то время как в старшем байте закодирован размер этого шрифта.
Если в байте размера установлен бит $10 - то используется большой шрифт (соотношением 8х16), иначе малый шрифт (соотношением 6х9).
Биты 1,2,4 в байте размера - представляют собой множитель от 1 до 8 (множитель на 1 больше, чем число закодированное этими битами)
text - указатель на строку текста обрабатываемую UI примитивом
mouse_variable - какая то фигня непонятной природы выполняющая роль идентификатора UI примитива (то ли для идентификации его в списке других сходных примитивов родительского окна, то ли для идентификации его относительно того, в каком именно потоке того же самого приложения он запущен)
flags - флаги текущего сотстояния UI примитива:
- - ED_PASS - используется для ввода пароля (т.е. каждый введенный символ скрывается сразу после того как он был отображен при вводе)
Code: Select all
ED_PASS = $0001
- - ED_FOCUS - находится в фокусе
Code: Select all
ED_FOCUS = $0002
- - ED_SHIFT - флаг соответствует состоянию клавиши SHIFT (если установлен - клавиша нажата, иначе - не нажата)
Code: Select all
ED_SHIFT = $0004
- - ED_SHIFT_ON (он же ED_SHIFT_HOLDING) - флаг информирует удерживается ли клавиша SHIFT (если установлен - клавиша удерживалась, иначе - нет)
Code: Select all
ED_SHIFT_ON = $0008
- - ED_SHIFT_BAC - флаг информирует есть ли выделение (непонятно флаг информирует о любом выделении или только о выделении с помощью клавиши SHIFT)
Code: Select all
ED_SHIFT_BAC = $0010
- - ED_LEFT_FL - флаг неизвестной природы, если он установлен то что-то слева, иначе - это что-то справа
Code: Select all
ED_LEFT_FL = $0020
- - ED_OFFSET_FL - флаг информирует о том, включает ли отображаемый диапазон символов текста позицию каретки (если сброшен - каретка за пределами отображаемой области)
Code: Select all
ED_OFFSET_FL = $0040
- - ED_INSERT - флаг неизвестной природы, требуется дальнейшее изучение исходников
Code: Select all
ED_INSERT = $0080
- - ED_MOUSE_ON (он же ED_LMB_HOLDING) - флаг информирует удерживается ли левая клавиша мыши (если установлен - клавиша удерживалась, иначе - нет)
Code: Select all
ED_MOUSE_ON = $0100
- - ED_CTRL_ON (он же ED_CTRL_HOLDING) - флаг информирует удерживается ли клавиша CTRL (если установлен - клавиша удерживалась, иначе - нет)
Code: Select all
ED_CTRL_ON = $0200
- - ED_ALT_ON (он же ED_ALT_HOLDING) - флаг информирует удерживается ли клавиша ALT (если установлен - клавиша удерживалась, иначе - нет)
Code: Select all
ED_ALT_ON = $0400
- - ED_DISABLED - отключена обработка взаимодействия с пользователем, вся кроме отображения самого UI примитива (если флаг сброшен - наоборот взаимодействует с пользователем)
Code: Select all
ED_DISABLED= $0800
- - ED_ALWAYS_FOCUS - флаг информирует о том, что UI примитив не теряет фокус, т.е. при потере фокуса его внутренние состояния (позиция каретки, позиция диапазона отображения, позиция выделения) не сбрасываются в состояния по умолчанию
Code: Select all
ED_ALWAYS_FOCUS= $4000
- - ED_FIGURE_ONLY - для ввода допускаются только цифры (допущение при копировании и вставке также должны допускаться только цифры)
Code: Select all
ED_FIGURE_ONLY= $8000
pos - текущая позиция каретки в символах относительно начала текста
offset - текущая позиция диапазона отображения (позиция крайнего левого отображаемого символа) в символах относительно начала текста. Необходима для случаев когда длина текста больше, чем длина текста который может быть отображен
cl_curs_x - х координата в пикселях вдоль которой проходит линия каретки
cl_curs_y - верхняя координата в пикселях линии каретки
shift - текущая позиция выделения в символах относительно начала текста
shift_old - какая то ахинея для внутренних нужд (выделение издавна это диапазон символов между позицией каретки и позицией выделения, но тут зачем то еще это незнамо-что.
char_width - ширина шрифта в пикселях
чтобы у тех, кто будет читать и разбираться во внутренностях исходников box_lib в голове не образовалось каши (а вернее с точностью до наоборот) доблестные разработчики box_lib обозначили поля вышеописанной структуры через приставку "ed_", а флаги тоже обозначили в малом регистре - так чтобы они выглядели как близнецы братья и сам черт сломал ногу.