Что нового

Видимое содержимое невидимого окна

Автор
M

mathem

Новичок
Сообщения
65
Репутация
0
Давайте вернемся к операции BitAND. Вот здесь мне подсказали решение одной из моих проблем. Да, это мне помогло, все нормально, спасибо. Но для меня осталось полной загадкой, как, почему, например, BitAND от тех операндов, которые там используются, возвращает координату х, насколько я понимаю, окна. Не могли бы вы мне прояснить этот момент?
 

InnI

AutoIT Гуру
Сообщения
4,981
Репутация
1,460
WM_MOVE — сообщение, которое отправляется после перемещения окна в новое положение.
Вместе с этим сообщением функция окна получает новые координаты внутренней области окна:
LOWORD(lParam) — новая X-координата верхнего левого угла внутренней области окна.
HIWORD(lParam) — новая Y-координата верхнего левого угла внутренней области окна.


Таким образом, из lParam нужно выделить младшее слово для X и старшее слово для Y.
Код:
$lParam = 0x01B2032B ; HiWord 01B2, LoWord 032B

; =============================================

; HiWord           LoWord
; 0000000110110010 0000001100101011 (0x01B2032B)
; 0000000000000000 1111111111111111 (0xFFFF)
; --------------------------------- (BitAND)
; 0000000000000000 0000001100101011 (0x032B)

$LoWord = BitAND($lParam, 0xFFFF)
ConsoleWrite(Hex($LoWord, 4) & @CRLF) ; 032B

; =============================================

; HiWord           LoWord
; 0000000110110010 0000001100101011 (0x01B2032B)
; --------------------------------- (BitShift 16)
; 0000000000000000 0000000110110010 (0x01B2)

$HiWord = BitShift($lParam, 16)
ConsoleWrite(Hex($HiWord, 4) & @CRLF) ; 01B2
 
Автор
M

mathem

Новичок
Сообщения
65
Репутация
0
Код:
$lParam = 0x01B2032B
Да, но в том-то коде переменная $lParam не определена. А так в части применения битовых операций,по крайней мере, в автоите все стало ясно.
 
Последнее редактирование:

Prog

Продвинутый
Сообщения
638
Репутация
80
Но для меня осталось полной загадкой, как, почему, например, BitAND от тех операндов, которые там используются, возвращает координату х, насколько я понимаю, окна.
Нужно читать документацию чтобы не было загадкой https://learn.microsoft.com/ru-ru/windows/win32/winmsg/wm-move
lParam

Координаты x и y верхнего левого угла клиентской области окна. Слово с низким порядком содержит координату x, а слово высокого порядка содержит координату y.
Слово в данном случае означает 2 байта.
Нужно из переменной выделить 2 первых байта и следующих за ними 2 байта. В коде это сделано функциями BitAND и BitShift.

Да, но в том-то коде переменная $lParam не определена.
14 строка
Код:
func MOVE($hWnd, $Msg, $wParam, $lParam)
Видите переменную $lParam?
 
Верх