![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
IvanG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 3.11.2009 Репутация: нет Всего: нет |
Решил разобраться с устройством Скринмейтов (программок бегающих по экрану
![]() Скринмейтом полученное творение назвать нельзя, т.к. форма окна и картинка меняется по нажатию клавишь ВВЕРХ, ВНИЗ, выход на Escape. Ну естественно анимации нет. Картинку выдрал из другого скринмейта ![]() Так вот, теперь собственно о проблеме: При нажатии клавиш вызывается функция RePaint, которая выводит на окошко другую картинку и устанавливает новую форум окна посредством SetWindowRgn, но тут не все просто, у меня почему то она не всегда меняет форму окна. И тут нет проблем с неправильно заданым регионом и т.д. Получается что когда мотаешь картинки и форму окна на кнопки ВВЕРХ/ВНИЗ, картинки меняются всегда, а вот форма иногда подтупливает и остается прежняя Картинки и формы(регионы) заданы в двух разных массивах. Прикрепляю архив с компиленным бинарником и исходниками Код функции RePaint (может в ней проблема?)
Присоединённый файл ( Кол-во скачиваний: 9 ) ![]() |
|||
|
||||
mekhanikus |
|
|||
Вольноопределяющийся ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 16.6.2008 Где: Спасск-Дальний Репутация: 1 Всего: 1 |
Для начала я бы попробовал в WM_KEYDOWN посылать InvalidateRgn.
В RePaint заменил бы InvalidateRect на ValidateRgn. Хотя, если есть EndPaint, последнее может быть лишнее. |
|||
|
||||
IvanG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 3.11.2009 Репутация: нет Всего: нет |
Я не очень силен в винапи, но насколько я успел понять, когда листал справку, ValidateRgn - наоборот устанавливает область которую не надо обновлять.
И сейчас я уже поточнее могу сказать: SetWindowRgn не устанавливает второй раз форму окна по одному и тому же региону, т.е. у меня в программе из массива (170 эл-тов) по очереди (по нажатию клавишь) ставятся разные формы окна и заливаются разными картинками, и по проходу всего этого массива ставится последняя уникальная форма и после не меняется. Тоже самое наблюдается и если прокрутить 5 форм вперед и попробовать вернутся назад, то есть те формы, которые уже ставились, повторно ставится не будут. Кажется мне надо поусиленне покурить хелпы по этой функции... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
при нажатии кнопки рисовать ничего не надо, mekhanikus верно подсказывает,
там нужно только сменить регион и вызвать Invalidate, а рисовать нужно в WM_PAINT повторно использовать регион для этих нужд и не получится:
как вариант - делай копию региона через CombineRgn и RGN_COPY и уже эту копию передавай в SetWindowRgn Это сообщение отредактировал(а) GremlinProg - 3.11.2009, 18:10 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |