Отвечает: Зенченко Константин Николаевич
Здравствуйте, Жлукто Александр/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 Комментарий оценки: Спасибо.
Отправить вопрос экспертам этой рассылки
Приложение (если необходимо):
* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.
Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!
Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.
Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.