Отвечает: Зенченко Константин Николаевич
Здравствуйте, Жлукто Александр/Jeff!
Обратите внимание на очередность параметров передаваемых
в макрос поменяйте их местами.
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Дело в том, что Windows очень чувствительна к адресам передаваемых данных. Поясню: двойные слова (DWORD) ДОЛЖНЫ быть выравнены по границе 4, т.е. находиться по адресу кратному 4; слова (WORD) - по границе 2, т.е. по адресу кратному 2. Иначе начинаются в лучшем случае глюки.
В вашем случае:
1. Для вывода старшего слова нужно было БЫ использовать такой код:
MsgBox "0x%x",word ptr lParam+2,
но...
2. Кроме того, функция wsprintf унаследована из С, но несмотря на это, ВСЕГДА фактически все параметры этой функции - ДВОЙНЫЕ СЛОВА!!!
Таким образом,
MsgBox "0x%x", word ptr lParam - делать нельзя!!!
Надо делать что-то вроде:
mov edx,lParam
and edx,0FFFFH ;оставляем только младшее слово
MsgBox "0x%x",edx ;вот так правильно
а для старшего слова:
mov edx,lParam
shr edx,16 ;оставляем только старшее слово
MsgBox "0x%x",edx ;вот так правильно
Ответ отправил: Xaud (статус: 1-ый класс)
Ответ отправлен: 30.03.2007, 21:03 Оценка за ответ: 5 Комментарий оценки: Спасибо.