![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 13.11.2012
Сообщений: 41
|
![]()
Что нужно: нарисовать окно, карниз. За окном ночь(черный цвет), стены серые, окна белые, карниз зеленый и занавеска голубая. Занавеска по нажатию клавиш влево и вправо должна выдвигаться на 3 пикселя. Толщина сложенной занавески 5 пикселей.
Что сделано: Код:
1. Непонятно, как рисовать через wm_paint? Ну то есть, как отправить сообщение в wm_paint из wm_keydown, что бы что то нарисовать. С помощью чего они вообще обмениваются сообщениями. (хотя бы примеры или литературу) 2. Ну ладно. Я примерно понимаю, как сдвигать занавеску вправо. Но как её сдвигать влево? Что произойдет с картинкой под занавеской? 3. Почему у меня сейчас не реагирует на VK_RIGHT? Сейчас в VK_RIGHT просто попробовал что нибудь нарисовать. Вот в общем, кому не лень прошу помочь ![]() Последний раз редактировалось Sorento2; 02.05.2013 в 23:23. |
![]() |
![]() |
![]() |
#2 | |||||
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
Цитата:
Цитата:
Цитата:
Здесь, правда, может возникнуть такой неприятный эффект как мерцание изображения, т.к. весь цикл рисования повторяется с начала. Если требуется этого избежать - применяют буферизацию. Цитата:
|
|||||
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 13.11.2012
Сообщений: 41
|
![]()
Два вопроса:
Можете привести пример нажатия клавиши и отрисовки соответсвующей этой клавише? Я просто не очень понял этот момент. Обработка нажатия клавиши идет в WM_KEYDOWN, отрисовка в WM_PAINT. Как они ну "общаются" что ли. И второй: я так понял вы говорите о двойной буферизации? |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 13.11.2012
Сообщений: 41
|
![]()
Два вопроса:
Можете привести пример нажатия клавиши и отрисовки соответсвующей этой клавише? Я просто не очень понял этот момент. Обработка нажатия клавиши идет в WM_KEYDOWN, отрисовка в WM_PAINT. Как они ну "общаются" что ли. И второй: я так понял вы говорите о двойной буферизации? Блин второе случайно получилось |
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]() Цитата:
В моем понимании цикл взаимодействия интерактивной программы с человеком включает: - контроль за состоянием органов управления, например, клавиатуры и мыши, - изменения текущего состояния программы, вызванные: а) управляющим воздействием (те самые мышь и клавиатура), б) внутренними процессами программы (например, что-то должно двигаться безотносительно действий пользователя), - отрисовка нового состояния программы. При изменении внутреннего состояния (достаточного для того, чтобы инициировать перерисовку) дается команда InvalidateRect, которая говорит, что данный фрагмент изображения нуждается в перерисовке. Перерисовка, естественно, должга производиться уже по новому состоянию. Мне не нравится термин "двойная буферизация", т.к. это дословный перевод, не учитывающий различий смысла английского слова "buffer" и русского "буфер". По-русски правильно это было бы назвать просто буферизацией, - т.е. Вы рисуете не сразу на экране, а в некотором буфере, а когда изображение готово, целиком перекидываете его на экран. |
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 13.11.2012
Сообщений: 41
|
![]()
Прошу прощения, все понял)
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 13.11.2012
Сообщений: 41
|
![]() Код:
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 13.11.2012
Сообщений: 41
|
![]()
Вот) Наконец то получилось) мерцания не появилось. Вопроса теперь 2:
1. Почему не сразу реагирует на клавишу после нажатия другой, а то и делает функции другой?(на протяжении где-то 2 нажатий) 2. Почему вправо и влево работают с нажатием Ctrl u Shift? Код:
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 13.11.2012
Сообщений: 41
|
![]()
То есть если я нажимаю на левую после нажатия правой клавиши, то она один раз работает как правая. то есть двигает занавеску вправо.
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Честно говоря, не понял Ваших манипуляций с клавиатурой и отрисовкой.
Клавиатура меняет состояние, а отрисовка его не меняет. Не знаю, чего Вы добивались, но присваивать переменным состояния какие-то значения в процессе отрисовки не следует. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Различие кода mfc и WinApi(mfc ручками набили, а WinApi автоматически с генерировался!! нужно явное отличие, не могу найти) | Артём1991 | Помощь студентам | 0 | 25.03.2012 17:13 |
Первое приложение на WinAPI | m9yt | Общие вопросы C/C++ | 1 | 03.09.2010 22:02 |
Задача:в вижуал с++ Разработать приложение-сервер и приложение (смотри дальше сообщение) | Мила777 | Фриланс | 2 | 21.10.2009 11:05 |
WinApi | Necrom | Помощь студентам | 3 | 27.06.2008 14:24 |
WinApi | Andr | Безопасность, Шифрование | 3 | 17.06.2007 13:38 |