Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перерисовка окна при переключении на другое приложение / 11 сообщений из 11, страница 1 из 1
02.06.2005, 16:34
    #33097859
Pavel278
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
Visual C++ 6.0
Как сделать так, чтобы при переключении с окна приложения и на возвращение к нему оно не перерисовывалось?

Пробовал через поиск по форуму найти ответ, но конкретно на этот вопрос ответа не нашёл.
...
Рейтинг: 0 / 0
02.06.2005, 17:30
    #33098037
Кодер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
Pavel278Visual C++ 6.0
Как сделать так, чтобы при переключении с окна приложения и на возвращение к нему оно не перерисовывалось?

Пробовал через поиск по форуму найти ответ, но конкретно на этот вопрос ответа не нашёл.

Можно перехватить WM_ACTIVATE и WM_PAINT, организовав необходимую логику перерисовки, взводя и анализируя флаг.
...
Рейтинг: 0 / 0
02.06.2005, 17:40
    #33098068
Pavel278
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
КодерМожно перехватить WM_ACTIVATE и WM_PAINT, организовав необходимую логику перерисовки, взводя и анализируя флаг

Простите, а какой флаг? Может, достаточно будет его установить по умолчанию?
...
Рейтинг: 0 / 0
02.06.2005, 17:58
    #33098118
Кодер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
Pavel278 КодерМожно перехватить WM_ACTIVATE и WM_PAINT, организовав необходимую логику перерисовки, взводя и анализируя флаг

Простите, а какой флаг? Может, достаточно будет его установить по умолчанию?

Флаг - это такая переменная, в которую записывается состояние программы. К примеру, глобальная переменная a=0 изначально. После прихода WM_ACTIVATE c LOWORD(wParam) равным WA_INACTIVE, присвоить а=2. В WM_PAINT не вызывать модуль перерисовки, если a равно 2. После прихода WM_ACTIVATE c LOWORD(wParam) равным WA_ACTIVE или WA_CLICKACTIVE, присвоить a=1, а уже в следующем WM_PAINT сбросить флаг в 0, но не перерисовывать. Это первое, что приходит на ум. В любом случае нужно поэкспериментировать.
...
Рейтинг: 0 / 0
02.06.2005, 19:20
    #33098306
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
Зачем бы это ? Хочешь на мониторе "черную дыру" получить вместо твоего приложения ?
Если хочешь делать оптимизацию прорисовки сложных изображений, то это делается не такими способами.
...
Рейтинг: 0 / 0
02.06.2005, 19:22
    #33098308
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
Ты всяких кодеров не слушай, если ты WM_PAINT не обработаешь, у тебя вместо окна будет дырка черная (или белая) - и все.
...
Рейтинг: 0 / 0
02.06.2005, 22:01
    #33098439
Землекоп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
Кодер Pavel278 КодерМожно перехватить WM_ACTIVATE и WM_PAINT, организовав необходимую логику перерисовки, взводя и анализируя флаг

Простите, а какой флаг? Может, достаточно будет его установить по умолчанию?

Флаг - это такая переменная, в которую записывается состояние программы. К примеру, глобальная переменная a=0 изначально. После прихода WM_ACTIVATE c LOWORD(wParam) равным WA_INACTIVE, присвоить а=2. В WM_PAINT не вызывать модуль перерисовки, если a равно 2. После прихода WM_ACTIVATE c LOWORD(wParam) равным WA_ACTIVE или WA_CLICKACTIVE, присвоить a=1, а уже в следующем WM_PAINT сбросить флаг в 0, но не перерисовывать. Это первое, что приходит на ум. В любом случае нужно поэкспериментировать.

Можно при потере активизации сбросить содержимое окна в bitmap, находящийся в памяти и выводить его при WM_PAINT. Это несколько строк кода и выполняется очень быстро. В принципе, если алгоритм отрисовки очень сложный и длинный, то лучше рисовать все в bitmap или метафайл, находящиеся в памяти, которые потом отрисовывать на экране при WM_PAINT. Тогда перерисовка не будет столь напрягать.
...
Рейтинг: 0 / 0
03.06.2005, 10:36
    #33098949
Pavel278
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
Землекоп
Можно при потере активизации сбросить содержимое окна в bitmap, находящийся в памяти и выводить его при WM_PAINT. Это несколько строк кода и выполняется очень быстро. В принципе, если алгоритм отрисовки очень сложный и длинный, то лучше рисовать все в bitmap или метафайл, находящиеся в памяти, которые потом отрисовывать на экране при WM_PAINT. Тогда перерисовка не будет столь напрягать.

Спасибо за идею. Попробую её реализовать.

Кодер
Флаг - это такая переменная, в которую записывается состояние программы. К примеру, глобальная переменная a=0 изначально. После прихода WM_ACTIVATE c LOWORD(wParam) равным WA_INACTIVE, присвоить а=2. В WM_PAINT не вызывать модуль перерисовки, если a равно 2. После прихода WM_ACTIVATE c LOWORD(wParam) равным WA_ACTIVE или WA_CLICKACTIVE, присвоить a=1, а уже в следующем WM_PAINT сбросить флаг в 0, но не перерисовывать. Это первое, что приходит на ум. В любом случае нужно поэкспериментировать.


Не, что такое флаг я знаю. Я просто думал, что ты имел в виду какую определённую переменную.
...
Рейтинг: 0 / 0
03.06.2005, 10:41
    #33098966
Pavel278
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
MasterZivЗачем бы это ? Хочешь на мониторе "черную дыру" получить вместо твоего приложения ?
Если хочешь делать оптимизацию прорисовки сложных изображений, то это делается не такими способами.

Да, я вообще именно это хотел бы сделать. Если посоветуешь что-нибудь почитать по этому поводу буду рад.
В принципе, пока этот вопрос не так остро стоит, как я понял. Но в принципе, хочется узнать, как это сделать.
...
Рейтинг: 0 / 0
03.06.2005, 10:55
    #33099032
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
А тебе уже сказали - рисовать в bitmap, metafile. Битмап- много памяти но быстро, если сложный алгоритм рисования (поскольку сохнаняется результат), metafile - мало памяти но долго, если сложный рисунок.
...
Рейтинг: 0 / 0
03.06.2005, 15:22
    #33100042
Pavel278
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перерисовка окна при переключении на другое приложение
MasterZiv рисовать в bitmap, metafile. Битмап- много памяти но быстро, если сложный алгоритм рисования (поскольку сохнаняется результат), metafile - мало памяти но долго, если сложный рисунок.

Грубо говоря, идея такая:
при переходе от окна приложения изображение сохраняется в mf или bmp
при возвращении оно оттуда достаётся.

Делается это просто обработкой события WM_ACTIVATE
Правильно?

Какие методы использовать для сохранения. Что мне в хелпе посмотреть, грубо говоря?

Прошу прощения за занудство
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перерисовка окна при переключении на другое приложение / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]