Window in DX

Тема в разделе "WASM.DirectX", создана пользователем SolidCode, 30 мар 2005.

  1. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    Может ли внешняя программа вставить/разместить своё окно поверх окна в DX с параметрами эксклюзив и фулскрин? Например, проверять у какой-либо проги скорость кадров и выводить это юзеру.

    Точнее можно ли сделать окно, которое будет висеть поверх окна современной DX-ной игрухи?
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Эксклюзив потому так и назван, что только _одно_ окно может иметь такой статус.

    Когда прога делает SetCooperativeLevel с DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN, то если до этого какая-то другая была в таком режиме, у неё отбирается доступ к полному экрану - все методы начнут возвращать ошибки и TestCooperativeLevel вернёт DDERR_WRONGMODE.



    Всё это как раз и сделано, чтобы никто никаких окон поверх не показывал :)



    Рисовать поверх чужой FULLSCREEN картинки можно с применение хирургических методов - хуки, дополнительные dll и т.п. Общего решения возможно и нет.
     
  3. johnfound

    johnfound New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2003
    Сообщения:
    74
    Адрес:
    Bulgaria
    А как мой firewall открывает диалог, когда некоторой FPS выходит в сеть на мултиплеер впервые? И еще, если у меня есть дополнительной тулбар на десктопе и у него "Auto HIde" и "Always on top", то он тоже стоит поверх полноекранные стрелялки. (Правда, они возможно и OpenGL - я не специалист)
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Ну можно ещё и Ctrl+Alt+Del нажать - окно Task Manager появится.

    Но многое зависит от того, как именно посторено DX приложение, как оно обрабатывает потерю фокуса и т.п.

    Можно сделать так, что его окно в этом случае будет просто сворачивается.

    Тулбары и другие подобные окна - это известная проблема для DX приложений, их специально пытаются обойти - часто можно заметить, что такое окно мелькает, но тут же сверху игрушка рисует свою картинку.



    А firewall - это отдельная история, он же замораживает приложение, пока на его вопрос не ответишь.
     
  5. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    А как можно получить указатель на видеопамять процесса или окна/DX поверхности в эксклюзивном режиме?

    Ведь так можно рисовать в его видео памяти? Например, отслеживать бряком доступ к нужному региону и самому писать туда.

    И совсем ламерский вопрос. Как узнать размер картинки/окна в видеопамяти и глубину цвета, чтобы писать правильно?
     
  6. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Если есть адрес объекта этой поверхности, то можно вызвать метод Lock - в структуре DDSURFACEDESC получишь адрес и остальные характеристики поверхности. Если объекта нет, то перехватывать этот метод в ddraw.dll. Но рисовать имеет смысл только дождавшись, когда прога вызовет Unlock.

    Теоретически, это должно работать и для OGL, поскольку тот работает через поверхности DD. С новыми интерфейсами DXGraphics не знаю как это будет работать - попробуй в САйсе поставить бряки на ddraw!DD_Surface_Lock и посмотри.