Я не могу поставить просто
InvalidateRect, [wc],0,0,20,20,1
Другие языки программирования и технологии
Как в фасме указать обновляемую область?
Этот вопрос очень яркий пример того как не стоит задавать вопросы. Потому что этот вопрос описывает не саму возникшую проблему ставящую в тупик вопрошающего а глупый и скорее всего заведомо нерабочий способ ее решения.
Предполагаю что автор вопроса почему то выдумал что вызов "InvalidateRect" должен вызывать перерисовку указанного региона.
А на самом деле эта функция ведет себя так как описано в документации и просто вызывает у зарегистрированной оконной процедуры (hwnd) сообщение WM_NCPAINT через wParam передает регион но в 99.9% оконные процедуры игнорируют это сообщение и оно попадает в стандартный системный обработчик DefWindowProc который просто вызывает WM_PAINT но уже без указания региона для отрисовки.
Т. е. объясняя на пальцах вызывать InvalidateRect это правильно и хороший тон, но в подавляющем большинстве случает он ничем не отличается от полной перерисовки окна и поведение зависит от того как принимающее окно обрабатывает сообщение WM_NCPAINT.
Предполагаю что автор вопроса почему то выдумал что вызов "InvalidateRect" должен вызывать перерисовку указанного региона.
А на самом деле эта функция ведет себя так как описано в документации и просто вызывает у зарегистрированной оконной процедуры (hwnd) сообщение WM_NCPAINT через wParam передает регион но в 99.9% оконные процедуры игнорируют это сообщение и оно попадает в стандартный системный обработчик DefWindowProc который просто вызывает WM_PAINT но уже без указания региона для отрисовки.
Т. е. объясняя на пальцах вызывать InvalidateRect это правильно и хороший тон, но в подавляющем большинстве случает он ничем не отличается от полной перерисовки окна и поведение зависит от того как принимающее окно обрабатывает сообщение WM_NCPAINT.
Что значит не можете? В вопросе хорошо бы указывать что происходит и что конкретно не получилось и/или написал компилятор.
А так - есс-но у InvalidateRect немного другие параметры
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-invalidaterect
HWND, _УКАЗАТЕЛЬ_ на структуру с координатами, признак.
Вы-же похоже пытаетесь передать координаты в стеке вместо адреса структуры. + где invoke?
На MASM это бы могло выглядеть так:
WndProc refresh
LOCAL rct:RECT
mov [rct.left], 0
mov [rct.top], 0
mov [rct.right], 20
mov [rct.bottom], 20
mov hwnd, ..; или без mov - я не знаю как Вы передаёте дескриптор
; может норм и [wc] как параметр - тут смотрите сами.
invoke InvalidateRect, hwnd, addr rct, 1
А так - есс-но у InvalidateRect немного другие параметры
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-invalidaterect
HWND, _УКАЗАТЕЛЬ_ на структуру с координатами, признак.
Вы-же похоже пытаетесь передать координаты в стеке вместо адреса структуры. + где invoke?
На MASM это бы могло выглядеть так:
WndProc refresh
LOCAL rct:RECT
mov [rct.left], 0
mov [rct.top], 0
mov [rct.right], 20
mov [rct.bottom], 20
mov hwnd, ..; или без mov - я не знаю как Вы передаёте дескриптор
; может норм и [wc] как параметр - тут смотрите сами.
invoke InvalidateRect, hwnd, addr rct, 1
Похожие вопросы
- Добрый день. Подскажите пожалуйста плюсы и минусы ассемблера тасм, а так же его преимущества, например перед фасмом?
- как обновлять не типовую конфигурацию 1с 7.7?
- Посдкажите как сохранить выделенную область в фотошоп кс4 в качестве jpeg файла.
- Попадает ли точка в область
- В будущем хочу стать программистом, ныне лишь новичок в области, кто может помочь встать на путь истинный?
- Какие существуют области программирования?
- Вопрос программистам - на работе вам дают задание сделать что-то из другой области, вы это делаете или нет?
- скрипт php обновляет переменную. как с помошью JS каждую секунду запускать этот скрипт?
- Надо ли обновлять фотошоп и как?А то что-то глючить начал.
- что такое драйверы устройств? зачем они нужны? как их обновлять ?
Но если отрисовку окна выполняет твой код (оконная процедура) то необходимо обработать сообщение WM_NCPAINT из параметра wParam получить регион, перерисовать его и прервать процедуру что бы не допустить обработку сообщения WM_NCPAINT стандартной системной процедурой DefWindowProc.