Difference between revisions of "SysFn37/ru"
Jump to navigation
Jump to search
Punk Joker (talk | contribs) |
m |
||
(7 intermediate revisions by 4 users not shown) | |||
Line 3: | Line 3: | ||
---- | ---- | ||
− | + | ===Подфункция 0 - экранные координаты мыши=== | |
− | === | ||
Параметры: | Параметры: | ||
− | + | * eax = 37 - номер функции | |
− | + | * ebx = 0 - номер подфункции | |
Возвращаемое значение: | Возвращаемое значение: | ||
− | + | * eax = x*65536 + y, (x,y)=координаты курсора мыши (считая от 0) (как посчитать? - http://board.kolibrios.org/viewtopic.php?f=2&t=684&p=69834#p69834) | |
+ | |||
+ | '''Константы для регистров:''' | ||
+ | ::eax - SF_MOUSE_GET (37) | ||
+ | ::ebx - SSF_SCREEN_POSITION (0) | ||
− | === Подфункция 1 - координаты мыши относительно окна === | + | ===Подфункция 1 - координаты мыши относительно окна=== |
Параметры: | Параметры: | ||
* eax = 37 - номер функции | * eax = 37 - номер функции | ||
* ebx = 1 - номер подфункции | * ebx = 1 - номер подфункции | ||
Возвращаемое значение: | Возвращаемое значение: | ||
− | * eax = x*65536 + y, (x,y)=координаты курсора мыши относительно окна приложения (считая от 0) | + | * eax = x*65536 + y, (x,y)=координаты курсора мыши относительно окна приложения (считая от 0) (как посчитать? - http://board.kolibrios.org/viewtopic.php?f=2&t=684&p=69834#p69834) |
Замечания: | Замечания: | ||
* Значение вычисляется по формуле (x-xwnd)*65536 + (y-ywnd). | * Значение вычисляется по формуле (x-xwnd)*65536 + (y-ywnd). | ||
:Если y>=ywnd, то младшее слово неотрицательно и содержит относительную y-координату, а старшее - относительную x-координату (правильного знака). В противном случае младшее слово отрицательно и всё равно содержит относительную y-координату, а к старшему слову следует прибавить 1. | :Если y>=ywnd, то младшее слово неотрицательно и содержит относительную y-координату, а старшее - относительную x-координату (правильного знака). В противном случае младшее слово отрицательно и всё равно содержит относительную y-координату, а к старшему слову следует прибавить 1. | ||
− | === Подфункция 2 - нажатые кнопки мыши === | + | '''Константы для регистров:''' |
+ | ::eax - SF_MOUSE_GET (37) | ||
+ | ::ebx - SSF_WINDOW_POSITION (1) | ||
+ | |||
+ | ===Подфункция 2 - нажатые кнопки мыши=== | ||
Параметры: | Параметры: | ||
* eax = 37 - номер функции | * eax = 37 - номер функции | ||
Line 34: | Line 41: | ||
* прочие биты сброшены | * прочие биты сброшены | ||
− | === Подфункция 4 - загрузить курсор === | + | '''Константы для регистров:''' |
+ | ::eax - SF_MOUSE_GET (37) | ||
+ | ::ebx - SSF_BUTTON (2) | ||
+ | |||
+ | ===Подфункция 3 - состояния и события кнопок мыши=== | ||
+ | Параметры: | ||
+ | :* eax = 37 - номер функции | ||
+ | :* ebx = 3 - номер подфункции | ||
+ | Возвращаемое значение: | ||
+ | :* eax содержит следующую информацию: | ||
+ | |||
+ | состояния: | ||
+ | :* бит 0 установлен = удерживается левая кнопка | ||
+ | :* бит 1 установлен = удерживается правая кнопка | ||
+ | :* бит 2 установлен = удерживается средняя кнопка | ||
+ | :* бит 3 установлен = удерживается 4-я кнопка | ||
+ | :* бит 4 установлен = удерживается 5-я кнопка | ||
+ | |||
+ | события: | ||
+ | :* бит 8 установлен = нажата левая кнопка | ||
+ | :* бит 9 установлен = нажата правая кнопка | ||
+ | :* бит 10 установлен = нажата средняя кнопка | ||
+ | |||
+ | :* бит 15 установлен = используется вертикальная прокрутка | ||
+ | |||
+ | :* бит 16 установлен = отпущена левая кнопка | ||
+ | :* бит 17 установлен = отпущена правая кнопка | ||
+ | :* бит 18 установлен = отпущена средняя кнопка | ||
+ | |||
+ | :* бит 23 установлен = используется горизонтальная прокрутка | ||
+ | |||
+ | :* бит 24 установлен = двойной щелчок левой кнопкой | ||
+ | |||
+ | '''Константы для регистров:''' | ||
+ | ::eax - SF_MOUSE_GET (37) | ||
+ | ::ebx - SSF_BUTTON_EXT (3) | ||
+ | ===Подфункция 4 - загрузить курсор=== | ||
Параметры: | Параметры: | ||
* eax = 37 - номер функции | * eax = 37 - номер функции | ||
* ebx = 4 - номер подфункции | * ebx = 4 - номер подфункции | ||
* dx = источник данных: | * dx = источник данных: | ||
− | * dx = LOAD_FROM_FILE = 0 - данные в файле | + | :* dx = LOAD_FROM_FILE = 0 - данные в файле |
− | + | :* ecx = указатель на полный путь к файлу курсора | |
− | + | ::файл курсора должен быть в формате .cur, стандартном для MS Windows, причём размером 32*32 пикселя | |
− | * dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память | + | :* dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память |
− | + | :* ecx = указатель на данные файла курсора | |
− | + | ::формат данных такой же, как и в предыдущем случае | |
− | * dx = LOAD_INDIRECT = 2 - данные в памяти | + | :* dx = LOAD_INDIRECT = 2 - данные в памяти |
− | + | :* ecx = указатель на образ курсора в формате ARGB 32*32 пикселя | |
* edx = 0xXXYY0002, где | * edx = 0xXXYY0002, где | ||
− | + | :* XX = x-координата "горячей точки" курсора | |
− | + | :* YY = y-координата | |
− | + | :* 0 <= XX, YY <= 31 | |
Возвращаемое значение: | Возвращаемое значение: | ||
− | * eax = 0 - неудача | + | * eax = 0 - неудача |
* иначе eax = хэндл курсора | * иначе eax = хэндл курсора | ||
− | === Подфункция 5 - установить курсор === | + | '''Константы для регистров:''' |
+ | ::eax - SF_MOUSE_GET (37) | ||
+ | ::ebx - SSF_LOAD_CURSOR (4) | ||
+ | |||
+ | ===Подфункция 5 - установить курсор=== | ||
Устанавливает новый курсор для окна текущего потока. | Устанавливает новый курсор для окна текущего потока. | ||
Параметры: | Параметры: | ||
Line 66: | Line 113: | ||
* Если передан некорректный хэндл, то функция восстановит курсор по умолчанию (стандартную стрелку). В частности, к восстановлению курсора по умолчанию приводит передача ecx=0. | * Если передан некорректный хэндл, то функция восстановит курсор по умолчанию (стандартную стрелку). В частности, к восстановлению курсора по умолчанию приводит передача ecx=0. | ||
− | === Подфункция 6 - удалить курсор === | + | '''Константы для регистров:''' |
+ | ::eax - SF_MOUSE_GET (37) | ||
+ | ::ebx - SSF_SET_CURSOR (5) | ||
+ | |||
+ | ===Подфункция 6 - удалить курсор=== | ||
Параметры: | Параметры: | ||
* eax = 37 - номер функции | * eax = 37 - номер функции | ||
Line 77: | Line 128: | ||
* Если удаляется активный (установленный подфункцией 5) курсор, то восстанавливается курсор по умолчанию (стандартная стрелка). | * Если удаляется активный (установленный подфункцией 5) курсор, то восстанавливается курсор по умолчанию (стандартная стрелка). | ||
− | === Подфункция 7 - данные прокрутки === | + | '''Константы для регистров:''' |
+ | ::eax - SF_MOUSE_GET (37) | ||
+ | ::ebx - SSF_DEL_CURSOR (6) | ||
+ | |||
+ | ===Подфункция 7 - данные прокрутки=== | ||
Параметры: | Параметры: | ||
* eax = 37 - номер функции | * eax = 37 - номер функции | ||
Line 87: | Line 142: | ||
* После прочтения значения обнуляются. | * После прочтения значения обнуляются. | ||
* Данные имеют знаковые значения. | * Данные имеют знаковые значения. | ||
+ | |||
+ | '''Константы для регистров:''' | ||
+ | ::eax - SF_MOUSE_GET (37) | ||
+ | ::ebx - SSF_SCROLL_DATA (7) | ||
+ | |||
+ | ===Подфункция 8 - загрузить курсор с указанием кодировки=== | ||
+ | Параметры: | ||
+ | * eax = 37 - номер функции | ||
+ | * ebx = 8 - номер подфункции | ||
+ | * ecx = указатель на строку с путём к файлу курсора | ||
+ | * edx = кодировка строки, подробности указаны в описании функции 80. | ||
+ | Возвращаемое значение: | ||
+ | * eax = хэндл курсора, 0 - неудача | ||
{{System_functions}} | {{System_functions}} | ||
[[Category: SysCalls]] | [[Category: SysCalls]] |
Latest revision as of 10:52, 21 January 2023
Функция 37 - работа с мышью.
Подфункция 0 - экранные координаты мыши
Параметры:
- eax = 37 - номер функции
- ebx = 0 - номер подфункции
Возвращаемое значение:
- eax = x*65536 + y, (x,y)=координаты курсора мыши (считая от 0) (как посчитать? - http://board.kolibrios.org/viewtopic.php?f=2&t=684&p=69834#p69834)
Константы для регистров:
- eax - SF_MOUSE_GET (37)
- ebx - SSF_SCREEN_POSITION (0)
Подфункция 1 - координаты мыши относительно окна
Параметры:
- eax = 37 - номер функции
- ebx = 1 - номер подфункции
Возвращаемое значение:
- eax = x*65536 + y, (x,y)=координаты курсора мыши относительно окна приложения (считая от 0) (как посчитать? - http://board.kolibrios.org/viewtopic.php?f=2&t=684&p=69834#p69834)
Замечания:
- Значение вычисляется по формуле (x-xwnd)*65536 + (y-ywnd).
- Если y>=ywnd, то младшее слово неотрицательно и содержит относительную y-координату, а старшее - относительную x-координату (правильного знака). В противном случае младшее слово отрицательно и всё равно содержит относительную y-координату, а к старшему слову следует прибавить 1.
Константы для регистров:
- eax - SF_MOUSE_GET (37)
- ebx - SSF_WINDOW_POSITION (1)
Подфункция 2 - нажатые кнопки мыши
Параметры:
- eax = 37 - номер функции
- ebx = 2 - номер подфункции
Возвращаемое значение:
- eax содержит информацию о нажатых кнопках мыши:
- бит 0 установлен = левая кнопка нажата
- бит 1 установлен = правая кнопка нажата
- бит 2 установлен = средняя кнопка нажата
- бит 3 установлен = 4-я кнопка нажата
- бит 4 установлен = 5-я кнопка нажата
- прочие биты сброшены
Константы для регистров:
- eax - SF_MOUSE_GET (37)
- ebx - SSF_BUTTON (2)
Подфункция 3 - состояния и события кнопок мыши
Параметры:
- eax = 37 - номер функции
- ebx = 3 - номер подфункции
Возвращаемое значение:
- eax содержит следующую информацию:
состояния:
- бит 0 установлен = удерживается левая кнопка
- бит 1 установлен = удерживается правая кнопка
- бит 2 установлен = удерживается средняя кнопка
- бит 3 установлен = удерживается 4-я кнопка
- бит 4 установлен = удерживается 5-я кнопка
события:
- бит 8 установлен = нажата левая кнопка
- бит 9 установлен = нажата правая кнопка
- бит 10 установлен = нажата средняя кнопка
- бит 15 установлен = используется вертикальная прокрутка
- бит 16 установлен = отпущена левая кнопка
- бит 17 установлен = отпущена правая кнопка
- бит 18 установлен = отпущена средняя кнопка
- бит 23 установлен = используется горизонтальная прокрутка
- бит 24 установлен = двойной щелчок левой кнопкой
Константы для регистров:
- eax - SF_MOUSE_GET (37)
- ebx - SSF_BUTTON_EXT (3)
Подфункция 4 - загрузить курсор
Параметры:
- eax = 37 - номер функции
- ebx = 4 - номер подфункции
- dx = источник данных:
- dx = LOAD_FROM_FILE = 0 - данные в файле
- ecx = указатель на полный путь к файлу курсора
- файл курсора должен быть в формате .cur, стандартном для MS Windows, причём размером 32*32 пикселя
- dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память
- ecx = указатель на данные файла курсора
- формат данных такой же, как и в предыдущем случае
- dx = LOAD_INDIRECT = 2 - данные в памяти
- ecx = указатель на образ курсора в формате ARGB 32*32 пикселя
- edx = 0xXXYY0002, где
- XX = x-координата "горячей точки" курсора
- YY = y-координата
- 0 <= XX, YY <= 31
Возвращаемое значение:
- eax = 0 - неудача
- иначе eax = хэндл курсора
Константы для регистров:
- eax - SF_MOUSE_GET (37)
- ebx - SSF_LOAD_CURSOR (4)
Подфункция 5 - установить курсор
Устанавливает новый курсор для окна текущего потока. Параметры:
- eax = 37 - номер функции
- ebx = 5 - номер подфункции
- ecx = хэндл курсора
Возвращаемое значение:
- eax = хэндл предыдущего установленного курсора
Замечания:
- Если передан некорректный хэндл, то функция восстановит курсор по умолчанию (стандартную стрелку). В частности, к восстановлению курсора по умолчанию приводит передача ecx=0.
Константы для регистров:
- eax - SF_MOUSE_GET (37)
- ebx - SSF_SET_CURSOR (5)
Подфункция 6 - удалить курсор
Параметры:
- eax = 37 - номер функции
- ebx = 6 - номер подфункции
- ecx = хэндл курсора
Возвращаемое значение:
- eax разрушается
Замечания:
- Курсор должен был быть ранее загружен текущим потоком (вызовом подфункции 4). Функция не удаляет системные курсоры и курсоры, загруженные другими приложениями.
- Если удаляется активный (установленный подфункцией 5) курсор, то восстанавливается курсор по умолчанию (стандартная стрелка).
Константы для регистров:
- eax - SF_MOUSE_GET (37)
- ebx - SSF_DEL_CURSOR (6)
Подфункция 7 - данные прокрутки
Параметры:
- eax = 37 - номер функции
- ebx = 7 - номер подфункции
Возвращаемое значение:
- eax = [horizontal offset]*65536 + [vertical offset]
Замечания:
- Данные доступны только активному окну.
- После прочтения значения обнуляются.
- Данные имеют знаковые значения.
Константы для регистров:
- eax - SF_MOUSE_GET (37)
- ebx - SSF_SCROLL_DATA (7)
Подфункция 8 - загрузить курсор с указанием кодировки
Параметры:
- eax = 37 - номер функции
- ebx = 8 - номер подфункции
- ecx = указатель на строку с путём к файлу курсора
- edx = кодировка строки, подробности указаны в описании функции 80.
Возвращаемое значение:
- eax = хэндл курсора, 0 - неудача
|