![]() |
|
Модераторы: bsa |
![]()
|
|
| Зверушка |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.3.2012 Где: Калининград Репутация: нет Всего: нет |
Пытаюсь вывести графический приметив на экран. Пусть это будет прямоугольник. Но если я вывожу его в функции WinMain, то нифига не выводится. Даже если я ничего не трогаю, не меняю размер окна и прочее. Выводится только в бесконечном цикле.
Как сделать так, чтобы у меня всегда в одном месте относительно окна была моя "графика"? Я что-то не учитваю? Как-то поработать с WM_PAINT? или что? :(... Сори, но не удалось вручную разобраться с помощью поиска... |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
Рисовать нужно при обработке WM_PAINT на контексте, который вернётся из BeginPaint. По окончании рисования нужно вызвать EndPaint.
Тут полно примеров. Здесь более детальное овервью. Это сообщение отредактировал(а) Cheloveck - 1.3.2012, 22:22 -------------------- ![]() |
|||
|
||||
| Зверушка |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.3.2012 Где: Калининград Репутация: нет Всего: нет |
Большое спасибо.
Неизменные элементы графики нужно перерисовывать в ВМ_пейнт всегда и полностью? |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
Нет, не всегда. Если WM_PAINT был брошен из InvalidateRect, то надо перерисовывать только испорченный прямоугольник. Но это уже детали. Если перерисовывать полностью всегда, то может только лишь чуть больше подтормаживать. Кроме того, чаще всего WM_PAINT кидается из UpdateWindow, то есть для полной перерисовки содержимого.
-------------------- ![]() |
|||
|
||||
| Зверушка |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.3.2012 Где: Калининград Репутация: нет Всего: нет |
Жаль, что нет 100 постов, поставила бы тебе плюсик в репутацию. Спасибо еще раз.
|
|||
|
||||
| Зверушка |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.3.2012 Где: Калининград Репутация: нет Всего: нет |
Скажите еще плз, если я объявляю часть окна недействительным для перерисовки, с помощью функции invalidaterect(), то как потом в WM_PAINT я узнаю, какая область недействительная? И в каких пределах будет идти перерисовка в этом случае? Не могу понять никак... А если я делаю недействительным часть окна. а перерисовываю все окно, так может быть? Где указатель, какая область окна недействительна в WM_PAINT?
|
|||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Может. Ничего страшного, кроме потери произодительности, не будет. PAINTSTRUCT Добавлено через 1 минуту и 19 секунд Вотздесь довольно доходчиво и на русском. |
||||
|
|||||
| Зверушка |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 1.3.2012 Где: Калининград Репутация: нет Всего: нет |
К сожелению будет перерисовываться всегда только указанная область, даже если написан код перерисовки для всего окна. ) Долго не могла понять, почему не работает.
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: нет Всего: 88 |
Зверушка, это потому что есть clipping region, совпадающий с invalid rect. Его можно изменить
-------------------- Обижено школьников: 8 |
|||
|
||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Зверушка, обычно в реальных программах складывается абсолютно противоположная ситуация. В вашем-же случае проблема решается очень просто:
И перересуется вся клиетская область. |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |