Конференция "WinAPI" » Видимо ли окно? [D7, WinXP]
 
  • QAZ (10.03.11 19:06) [0]
    как определить что окно невидимо в данный момент
    не свернуто,не скрыто а просто закрыто другим окном, полностью, либо частично?
  • clickmaker © (10.03.11 19:07) [1]
    WindowHandle <> GetForegroundWindow()
  • QAZ (10.03.11 19:09) [2]

    > clickmaker

    неее так не пойдет Ж)
    я про видимость а не про активность\вводу
  • clickmaker © (10.03.11 19:36) [3]
    тогда только проверкой пересечения регионов
    а зачем это надо?
  • QAZ (10.03.11 19:55) [4]

    > а зачем это надо?

    люблю задавать хитрые вопросы :)
  • Rouse_ © (10.03.11 19:59) [5]
    Пересечение регионов + проверка ZOrder + проверка а на том ли десктопе окно? Ну и до кучи проверка позиции, окно легко может оказаться по отрицательным координатам. А вообще задача глуповатая, бо применение не понятно - а нафига?
  • QAZ (10.03.11 20:26) [6]
    ну как зачем?
    например если не видно, то остановить например процесс отвечающий за визуализацию например
    или показать очень важную инфу например :)))
  • clickmaker © (10.03.11 20:33) [7]
    > остановить например процесс отвечающий за визуализацию например

    даже если скрыто частично? Ну дык для этого достаточно проверить на foregroundwindow

    > показать очень важную инфу например
  • QAZ (10.03.11 20:46) [8]

    > даже если скрыто частично?

    ну это опция "докучи"

    > Ну дык для этого достаточно проверить на foregroundwindow

    штожты уперся в этот foreground :))
    реши тогда задачку:
    имеем 2 блокнота расположеные рядом на голом десктопе
    в одном из них набираем текст
    вопрос:
    кто из них foreground и сколько блокнотов видно?
  • Rouse_ © (10.03.11 21:18) [9]

    > QAZ   (10.03.11 20:26) [6]
    >
    > ну как зачем?
    > например если не видно, то остановить например процесс отвечающий
    > за визуализацию например

    Хм, все чудесатей и чудесатей, а зачем делать это за систему? WM_PAINT тебе придет в случае если регион инвалидирован, если он не виден система не обрабатывает валидацию DC в любом случае, поэтому WM_PAINT ты не получишь, отседа следует - самостоятельно отслеживать это не имеет смысла в такой постановке задачи.
    Если же регион виден, то инвалидация произвойдет тогда, когда это реально необходимо и ты получишь уведомление о необходимости перерисовки DC.
  • QAZ (10.03.11 22:23) [10]

    > Rouse_

    с WM_PAINT вы предсказуемы как то, что после зимы наступит весна, даже было интересно кто первый про него вспомнит :))

    проблема в том, что под "визуализацией" я например подразумеваю не перерисовку окна дабы вернуть ему прежнюю красоту Ж)
    а вывод например неких данных,например с частотой кадров этак 15 в секунду
    и ясен перец что система сама мне не пошлет 15 раз WM_PAINT если я ее сам об этом не попрошу какимнибуть invalidate ,а прям даже лучше btblt на окно из буфера в памяти, логично?
    кроме того что кроме непосредственого отображения данных ,полюбому есть процесс их сбора и конвертации который может, и скорей всего будет тратить горааааздо больше "энергии" чем непосредственно вывод этих самых данных на обозрение :)
    соответственно даже если окно скрыто другим и винда отсекает автоматом все попытки рисования, то другие связанные с этим процессы не остановяца сами по себе ,а хотелось бы :))
  • Rouse_ © (10.03.11 22:55) [11]
    Ну раз уж сам ты подтвердил, что перехват положения окна для отрисовки не нужен, то повторяю вопрос - нафига?
    Обьясни задачу то, явно-ж будут тогда другие ответы.
  • QAZ (10.03.11 23:06) [12]

    > Ну раз уж сам ты подтвердил, что перехват положения окна
    > для отрисовки не нужен, то повторяю вопрос - нафига?
    > Обьясни задачу то, явно-ж будут тогда другие ответы.

    так яж в [10]  вроде понятно (как смог) объяснил :(
    короче, если например "визуализатор" жрет например 15% процессора ,то почемубы его не отключать пока не видно области вывода
    по крайне мере пользы от этого больше, чем от иконок в трее :)
  • clickmaker © (10.03.11 23:12) [13]
    > почемубы его не отключать пока не видно области вывода

    а если она видна наполовину? чтобы жрал 7% вместо 15%?
  • Rouse_ © (10.03.11 23:24) [14]

    > то почемубы его не отключать пока не видно области вывода

    Плин, так чтож это за виртуализатор такой, который без команды выводит чегой-то на невидимую канву? :))))
    Если у тебя проблема тупо с таймером, по которому обновляется канва и который ты не знаешь как отключить при невидимом окне, то ответ прост - врубай таймер на WM_PAINT с необходимой дискретностью, в обработчике отрисовывай что надо и вырубай до следующего сообщения.
  • QAZ (11.03.11 11:47) [15]

    > ответ прост - врубай таймер на WM_PAINT с необходимой дискретностью,
    >  в обработчике отрисовывай что надо и вырубай до следующего
    > сообщения.

    это не простой ответ, а не рабочий в принципе :)

    > Плин, так чтож это за виртуализатор такой, который без команды
    > выводит чегой-то на невидимую канву? :))))

    да абсолютно любой возьми, и он будет именно таким :) буть то винамп или диспетчер задач или даулоадменеджер Ж)
 
Конференция "WinAPI" » Видимо ли окно? [D7, WinXP]
Есть новые Нет новых   [134431   +12][b:0][p:0]