[DirectX/C++] Venster on-top vraagje

Pagina: 1
Acties:

  • freaky
  • Registratie: September 2000
  • Laatst online: 29-06 17:11
Hoi hoi,

heb een klein probleempje. Bij een klant van ons draait een presentatie programma (full-screen, is een Direct3D of ander soortig DirectX venster denk ik) waarin presentaties draaien. Helaas is het binnen dit programma niet mogelijk om een nummersysteem applicatie mee te laten draaien. Dit nummersysteem moet mbv een knopje ofzo optellen (zie het als de wachtrij bij de bakker, waar je een bonnetje moet pakken en op je nummer moet wachten).

OK, nou weet ik dat bij iemand anders dezelfde presentatie software draait (full-screen ook) en bij hun word na de presentatie software ook de software van een pinnacle tv kaart gestart, welke rechts bovenin in een klein vensterje boven het venster van de presentatie laat zien waarin bijv. het beeld van SBS6 verschijnt.

Ik ben zelf een techneut en dus niet echt een programmeur. Kan zelf wel uit het schrijven van de code komen, dat is niet zo'n probleem, maar zou even graag wat hulp willen met de goede richting. In principe zou ik graag weten hoe de TV kaart zo'n venstertje over de full-screen direct3d venster oid legt. Zijn daar API's voor oid? Normale vensters springen er volgens mij niet overheen (is mij iig nog nooit gelukt om bijv. winamp met always-on-top boven een spelletje uit te laten komen)

Wat pointers zouden zeer gewaardeerd worden.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

TV-kaarten werken direct via DirectDraw op het scherm en kunnen daardoor over alles heen tekenen. Een fullscreen Direct3D applicatie kan idd niets boven verschijnen buiten andere DirectX toepassingen.

Professionele website nodig?


  • freaky
  • Registratie: September 2000
  • Laatst online: 29-06 17:11
Thx dan ga ik er de DirectX API's eens op naslaan. Heb je nog aanbevelingen? Als in, je kunt beter Direct3D gebruiken in deze situatie dan DirectDraw oid?

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Vanaf DX8 bestaat DirectDraw niet meer en is alles samengevoegd tot DirectX Graphics :) En onder DX7 of ouder zou ik D3D niet proberen zonder programmeerervaring :D

Professionele website nodig?


  • freaky
  • Registratie: September 2000
  • Laatst online: 29-06 17:11
Hmm k thx, dit roept additionele problemen op... Of overal upgraden naar >=DX8 of functies vinden die in 5 en hoger zitten.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Onder DX7 en lager is DirectDraw afaik goed te doen zonder al te veel inhoudelijke kennis. Het wordt juist stukken moeilijker om iets simpels te tekenen als je DX8 opentrekt (3d veel simpeler tegenover 2d hoogdrempeliger.

Ik ken zelf alleen DX8 en 9 inhoudelijk dus kan er niet teveel specifieks over vertellen.

Professionele website nodig?


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:56
Waarom zou dat een probleem zijn?

  • freaky
  • Registratie: September 2000
  • Laatst online: 29-06 17:11
ben bezig bij klanten van klanten... een aantal van die mensen houden er helaas nogal eens rare policies danwel ideeen op na :/

curry684: Hmm niet echt nee... en moet alleen maar DX gebruiken om over een DX venster heen te komen en het enige wat ik hoef te doen is een stom nummertje weergeven (dat gaat in Visual C++ met MFC toch wel ff iets simpeler hehe). Oh well, nog zoekende... hoop dat ik die nummers niet zelf hoef te gaan tekenen hehe.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

curry684 schreef op 18 August 2003 @ 12:59:
Een fullscreen Direct3D applicatie kan idd niets boven verschijnen buiten andere DirectX toepassingen.
Sterker nog, een fullscreen d3d app draait in exclusive mode, wat dus wil zeggen dat alleen jouw app via een instantie van IDirect3DDevice iets met het videodevice waar de fullscreen app op draait kan doen. Andere DirectX apps of GDI apps kunnen er niets meer mee



(.edit: hier volgt een niet relevant verhaal, ik begreep je probleem even niet helemaal)

Als je echt iets wil laten zien boven jouw fullscreen app zul je het of zelf moeten tekenen, of je app in windowed mode draaien met een window zonder border en dat het hele scherm vult, en als windowstyle WS_EX_TOPMOST heeft. Een andere window met WS_EX_TOPMOST kan er dan overheen geplaatst worden.




Technisch gezien zou je de juiste call naar de DirectX functie die de schermmodus initializeert kunnen onderscheppen, en dan er windowed mode van maken ipv fullscreen. Vervolgens initializeer je de presentatiewindow zoals hierboven beschreven, en daarna kun je gewoon GDI objecten (andere windootjes) er overheen plaatsen

[ Voor 17% gewijzigd door .oisyn op 19-08-2003 00:52 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • freaky
  • Registratie: September 2000
  • Laatst online: 29-06 17:11
Hmm is dat het... had al een aantal van die DX demos gecompiled en die d'r in gehangen maar die failen allemaal idd met een general fault welke ik niet kan traceren. (zou niet weten hoe te debuggen, aangezien de applicatie die full-screen gaat de app start...)

Probleem is dat ik niet aan de code van het presentatie programma kan, en ik heb zelf geen tv-kaart dus kan ook niet echt kijken naar wat die pinnacle software danwel niet doet.

wat bedoel je met zelf tekenen?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat ging dus niet op, ik dacht even dat je de presentatiesoftware ook zelf geschreven had. Met zelf tekenen bedoelde ik dan ook dat je zelf die dingen over de presentatie heen ging tekenen met de DirectX functies. Maar dat kan dus alleen vanuit de presentatiesoftware.

M'n 2e voorstel zou nog wel kunnen, maar dat heeft misschien nogal wat voeten in aarde

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
.oisyn schreef op 19 August 2003 @ 00:48:
[...]
Technisch gezien zou je de juiste call naar de DirectX functie die de schermmodus initializeert kunnen onderscheppen, en dan er windowed mode van maken ipv fullscreen. Vervolgens initializeer je de presentatiewindow zoals hierboven beschreven, en daarna kun je gewoon GDI objecten (andere windootjes) er overheen plaatsen
Kun je eens uitleggen hoe je je dit voorstelt?

Mocht je 'die call kunnen onderscheppen', dan vraag ik alsnog af of het wel lukt, want volgens mij kun je de beeldscherminstellingen pas aanpassen nadat je de exclusieve modus hebt gekregen.

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

kasper_vk schreef op 19 augustus 2003 @ 15:39:
[...]
Mocht je 'die call kunnen onderscheppen', dan vraag ik alsnog af of het wel lukt, want volgens mij kun je de beeldscherminstellingen pas aanpassen nadat je de exclusieve modus hebt gekregen.
Heb het net met unreal geprobeerd, door SetCooperateLevel te onderscheppen en de fullscreen & exclusive flags weg te halen.. Hij komt wel in een window dan waar je alles overheen kan zetten maar het wordt ook zo traag als ik weet niet wat en de kleuren/textures worden ook wat gaar; als je ergens dichtbij staat zie je pixels van 20 bij 20, maar sommige dingen zijn weer wel gewoon gedetaileerd, de 'wereld' in de verte ziet er meer uit als doom 8)7. Misschien is dat evengoed wel te fixen en een presentatie zal niet zo zwaar zijn als unreal lijkt me maar het kan dus wel, je zorgt gewoon dat je niet in exclusive mode gaat. De performance zal wel een stuk slechter zijn..
Een klein tutorial-progje voor directX 8 ging wel prima, al tekende die alleen maar willekeurige lijnen dus daar valt weinig aan te zien verder.

www.madwizard.org


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

madwizard: dat lijkt me meer een probleem van jouw videokaart / drivers, waardoor windowed mode niet goed gaat. Mag ik vragen wat voor videokaart het is? Ik had het probleem op mijn stage ook (Engine Software, gamedev bedrijf in doetinchem) op een bepaalde PC (Matrox G450 dacht ik). Windowed mode draaide gewoon enorm brak en verkeerd. En heb je het over Unreal 1? Da's nogal een oud spel natuurlijk :)

Overigens heeft Direct3D 8+ geen cooperative level meer. Je kunt kiezen voor windowed of fullscreen, en fullscreen impliceert dan ook gelijk exclusive mode.


kasper_vk: Heb je de DirectX 9 SDK? Daarbij zit een tooltje waarmee je alle DirectX calls kunt analyseren. DirectX is gebaseerd op COM, waarbij je dus werkt met zogenaamde interfaces. Er zitten een aantal vaste functies in de DLL, zoals bijvoorbeeld CreateDirect3D9 (), wat een IDirect3D9 object retourneert. Als je zelf een DLL maakt met deze functie, en je plaatst 'm in de directory van de applicatie en geeft 'm de naam d3d9.dll, dan wordt jouw dll geladen ipv de originele DirectX9 dll. In de functie CreateDirect3D9 roep je dan de echte CreateDirect3D9 aan, en instantieer je een eigen IDirect3D9 implementatie die alle calls doorsluist naar de originele IDirect3D9 implementatie. Op die manier kun je dus alle calls onderscheppen, en zelfs de parameters wijzigen. En dat is dan wat je moet doen bij de call naar IDirect3D9::CreateDevice ()

En beeldscherminstellingen wijzigen kan altijd, met ChangeDisplaySettings () bijvoorbeeld

[ Voor 4% gewijzigd door .oisyn op 20-08-2003 14:29 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

.oisyn schreef op 20 augustus 2003 @ 14:27:
madwizard: dat lijkt me meer een probleem van jouw videokaart / drivers, waardoor windowed mode niet goed gaat. Mag ik vragen wat voor videokaart het is? Ik had het probleem op mijn stage ook (Engine Software, gamedev bedrijf in doetinchem) op een bepaalde PC (Matrox G450 dacht ik). Windowed mode draaide gewoon enorm brak en verkeerd. En heb je het over Unreal 1? Da's nogal een oud spel natuurlijk :)
Heb een Point of View GF Ti4200 64MB, en het was unreal tournament, niet unreal 1. Trouwens het moet wel kunnen in principe want als je 'endfullscreen' intypt in de console werkt het wel naar behoren.. Alleen de exclusive+fullscreen flag weghalen is dus blijkbaar niet genoeg, misschien nog wat andere functies aanroepen ofzo om het goed te krijgen, het was maar even een snelle test met een debugger.

Hier is een voorbeeldje van hoe het eruit ziet (beetje vaag door jpeg):
Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/0103/UTdetail2.jpg
(geweer ziet er wel goed uit)

Water uitvergroot, lijkt een schaakbord-achtig patroon op te zitten:
Afbeeldingslocatie: http://www.theforumisdown.com/uploadfiles/0103/UTdetail.jpg

[ Voor 3% gewijzigd door madwizard op 20-08-2003 17:16 ]

www.madwizard.org


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

UT is ook oud ;)
Het is iig pre-directx 8. Ik heb geen ervaring met Direct3D versies voor 8, maar ik weet wel dat dat exclusive mode gebeuren zoals ik het in mijn vorige post uitlegde nieuw is voor 8. Misschien moest je in oude versies wel moeilijkere capriolen uithalen om bijvoorbeeld een stuk texturegeheugen te locken als het geen exclusive mode betrof, en gaat het daarom fout

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Tja was het enige wat ik hier nog geinstalleerd had dus... ;)
Het is iig pre-directx 8.
DirectX 7 is het ja
Ik heb geen ervaring met Direct3D versies voor 8, maar ik weet wel dat dat exclusive mode gebeuren zoals ik het in mijn vorige post uitlegde nieuw is voor 8. Misschien moest je in oude versies wel moeilijkere capriolen uithalen om bijvoorbeeld een stuk texturegeheugen te locken als het geen exclusive mode betrof, en gaat het daarom fout
Zoiets vermoed ik ook.. Hoewel ik zoiets nooit ben tegengekomen maar gebruik directX ook vrijwel nooit.

www.madwizard.org


  • kasper_vk
  • Registratie: Augustus 2002
  • Laatst online: 08-04-2025
.oisyn schreef op 20 August 2003 @ 14:27:
kasper_vk: Heb je de DirectX 9 SDK? .....
.....
En beeldscherminstellingen wijzigen kan altijd, met ChangeDisplaySettings () bijvoorbeeld
Nee, die heb ik nog niet; ik 'werk' nog met versie 7.... ;( wellicht dat ik toch eens met versie 9 aan de slag moet :9 . (jaja, ik weet dat die al vrij lang bestaat)

Dat truukje met die DLL kende ik niet, dat gaan we eens proberen. Bedankt!

The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny...'

Pagina: 1