-
как определить что окно невидимо в данный момент
не свернуто,не скрыто а просто закрыто другим окном, полностью, либо частично?
-
WindowHandle <> GetForegroundWindow()
-
> clickmaker
неее так не пойдет Ж)
я про видимость а не про активность\вводу
-
тогда только проверкой пересечения регионов
а зачем это надо?
-
> а зачем это надо?
люблю задавать хитрые вопросы :)
-
Пересечение регионов + проверка ZOrder + проверка а на том ли десктопе окно? Ну и до кучи проверка позиции, окно легко может оказаться по отрицательным координатам. А вообще задача глуповатая, бо применение не понятно - а нафига?
-
ну как зачем?
например если не видно, то остановить например процесс отвечающий за визуализацию например
или показать очень важную инфу например :)))
-
> остановить например процесс отвечающий за визуализацию например
даже если скрыто частично? Ну дык для этого достаточно проверить на foregroundwindow
> показать очень важную инфу например
-
> даже если скрыто частично?
ну это опция "докучи"
> Ну дык для этого достаточно проверить на foregroundwindow
штожты уперся в этот foreground :))
реши тогда задачку:
имеем 2 блокнота расположеные рядом на голом десктопе
в одном из них набираем текст
вопрос:
кто из них foreground и сколько блокнотов видно?
-
> QAZ (10.03.11 20:26) [6]
>
> ну как зачем?
> например если не видно, то остановить например процесс отвечающий
> за визуализацию например
Хм, все чудесатей и чудесатей, а зачем делать это за систему? WM_PAINT тебе придет в случае если регион инвалидирован, если он не виден система не обрабатывает валидацию DC в любом случае, поэтому WM_PAINT ты не получишь, отседа следует - самостоятельно отслеживать это не имеет смысла в такой постановке задачи.
Если же регион виден, то инвалидация произвойдет тогда, когда это реально необходимо и ты получишь уведомление о необходимости перерисовки DC.
-
> Rouse_
с WM_PAINT вы предсказуемы как то, что после зимы наступит весна, даже было интересно кто первый про него вспомнит :))
проблема в том, что под "визуализацией" я например подразумеваю не перерисовку окна дабы вернуть ему прежнюю красоту Ж)
а вывод например неких данных,например с частотой кадров этак 15 в секунду
и ясен перец что система сама мне не пошлет 15 раз WM_PAINT если я ее сам об этом не попрошу какимнибуть invalidate ,а прям даже лучше btblt на окно из буфера в памяти, логично?
кроме того что кроме непосредственого отображения данных ,полюбому есть процесс их сбора и конвертации который может, и скорей всего будет тратить горааааздо больше "энергии" чем непосредственно вывод этих самых данных на обозрение :)
соответственно даже если окно скрыто другим и винда отсекает автоматом все попытки рисования, то другие связанные с этим процессы не остановяца сами по себе ,а хотелось бы :))
-
Ну раз уж сам ты подтвердил, что перехват положения окна для отрисовки не нужен, то повторяю вопрос - нафига?
Обьясни задачу то, явно-ж будут тогда другие ответы.
-
> Ну раз уж сам ты подтвердил, что перехват положения окна
> для отрисовки не нужен, то повторяю вопрос - нафига?
> Обьясни задачу то, явно-ж будут тогда другие ответы.
так яж в [10] вроде понятно (как смог) объяснил :(
короче, если например "визуализатор" жрет например 15% процессора ,то почемубы его не отключать пока не видно области вывода
по крайне мере пользы от этого больше, чем от иконок в трее :)
-
> почемубы его не отключать пока не видно области вывода
а если она видна наполовину? чтобы жрал 7% вместо 15%?
-
> то почемубы его не отключать пока не видно области вывода
Плин, так чтож это за виртуализатор такой, который без команды выводит чегой-то на невидимую канву? :))))
Если у тебя проблема тупо с таймером, по которому обновляется канва и который ты не знаешь как отключить при невидимом окне, то ответ прост - врубай таймер на WM_PAINT с необходимой дискретностью, в обработчике отрисовывай что надо и вырубай до следующего сообщения.
-
> ответ прост - врубай таймер на WM_PAINT с необходимой дискретностью,
> в обработчике отрисовывай что надо и вырубай до следующего
> сообщения.
это не простой ответ, а не рабочий в принципе :)
> Плин, так чтож это за виртуализатор такой, который без команды
> выводит чегой-то на невидимую канву? :))))
да абсолютно любой возьми, и он будет именно таким :) буть то винамп или диспетчер задач или даулоадменеджер Ж)