est-il possible de réserver une zone de l'écran en mode directx(pleine écran)
du style un jeu utilise 1024x700 et la zone 1027x68 en haut affiche autre chose ...
peut-être en modifiant les bibliothèque de directx ... ???
...
merçi de vos réponses
est-il possible de réserver une zone de l'écran en mode directx(pleine écran)
du style un jeu utilise 1024x700 et la zone 1027x68 en haut affiche autre chose ...
peut-être en modifiant les bibliothèque de directx ... ???
...
merçi de vos réponses
je connais pas une fonction qui fasse directement ce que tu veux !
Je te conseilles deux solutions :
1°/ tu gère la séparation toi-même, c'est-à-dire que tu tronques les surfaces à afficher, comme tu le ferais pour les bordures d'écran.
2°/tu crées deux surfaces qui vont représenter les deux zones, à la place de dessiner directement sur la surface secondaire. Comme ça tu peux choisir sur quelle surface tu affiches ton image. Et à la fin tu dessines les deux surfaces à l'écran.
J'espère que ça va t'aider !
je vois ...
mais en fait je ne controle pas le programme en directx, puisque cela peut-etre n'importe quel jeu ...
je devrais certainement intervenir directement au niveau de la couche directx de windows ... ça va pas être simple
l'idée c'est d'afficher des infos sur une parti de l'écran pendant l'éxécution d'un jeu !
#### là d'un coup j'ai une autre idée : si j'envoie un affichage diretx pendant un jeu (par dessus l'écran du jeux) genre en modal comme les fenêtres windows ???
ça peut certainement se faire ???? à moins que le mode directx plein écran soit réservé au programme en cours !!
.......
ah ok j'avais pas compris !
tu veux pour n'importe quel jeu fait en directx pouvoir te réserver un bout de l'écran pour afficher tes propres infos à l'aide d'un programme extérieur, c'est ça?
la solution que t'as trouvée pourrait peut-être marcher, c'est-à-dire d'afficher une fenêtre par dessus le jeu, mais pour ce faire il faut que tu récupère le handle de la fenêtre et que tu fasses en sorte que ta fenêtre soit toujours visible !
je te souhaite bon courage
salut
en fait, je récupère le handle de la fenêtre active (donc le jeux) et je dessine sur le canvas. Ca marche !! mais sur les zones "actives", je doit rafraichir souvent
en fait c'est la guerre entre mon appli et le jeux
mais sur les zones passives c'est bien
je continu ...
existe-il un genre de "showmodal" sous directx ?
ou ne peut-il y avoir qu'un seul écran actif ?
question pour les pros bien sur
Salut,
normal que ca fasse ca.
l'ideal aurait ete de pouvoir appeller la fonction FlipToGDISurface, mais là je doute que ca marche bien.
Sinon tu peux essayer d'ouvrir une interface vers la surface primaire, de recuperer un hdc sur ta fenetre à afficher et de blitter le tout sur la surface primaire.
m'enfin à mon avis il faudra batailler avec des WaitForSync pour pas que ca clignote.
mais bon j'ai pas testé, alors je sais pas si c'est une bonne technique.
(pour plus de details : doc directx6.1 'Displaying a Window in Full-Screen Mode')
ouai c clair.. ou en tout cas si tu y arrives ca m'interesseje devrais certainement intervenir directement au niveau de la couche directx de windows ... ça va pas être simple
Il faudrait regarder la programmation des Overlays ce qui expliqué dans le livre de MS Press sur Direct X . Mais avec Direct X 8 comme il n'y a plus de surfaces Direct Drawest-il possible de réserver une zone de l'écran en mode directx(pleine écran)
du style un jeu utilise 1024x700 et la zone 1027x68 en haut affiche autre chose ...
peut-être en modifiant les bibliothèque de directx ... ???
On m'a soufflé de capturer "WM_PAINT" je fais des essais ... si vous avez des liens ou bout de code en rapport avec mon problème, je suis preneur ...
SURTOUT PAS !!!! ( à moins d'être en mode fenêtré ce qui n'est pas le cas )On m'a soufflé de capturer "WM_PAINT" je fais des essais ... si vous avez des liens ou bout de code en rapport avec mon problème, je suis preneur ...
WM_PAINT est un message émis à une fenêtre classique avec barre de tâche lorsqu'elle est repainte , c.a.d. au démarrage et lorsque la fenêtre reçoit le focus c.a.d. lorsqu'elle est cachée par une autre fenêtre et repainte.
En principe lors d'un message WM_PAINT , on utilise une structure de dessin ou PAINTSTRUCT :
PAINTSTRUCT ps;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
[use GDI functions]
EndPaint (hwnd, &ps) ;
break;
Ceci est valable pour une appli utilisant le GDI , fenêtrée classique.
Hors une appli utilisant Direct Draw c'est RADICALEMENT différent :
on utilise en général des surfaces basculantes avec la méthode Flip() et la mise à jour de l'écran est effectuée dans le WinMain...
en mode directX plein ecran (ddraw ou dgraphics)
tu n'as pas acces a la couche GDI de windows
(sauf sous DirectX9.0 qui n'est pas encore sorti).
Le probleme c'est que tu n'as aucune idee si le backbuffer
cree est compatible avec GDI (verrouillable, backbuffer detruit apres chaque swap, pas d'antialiasing).
Tu peux essayer de modifier les lib DirectX mais je suppose que tu sais ce que tu fais (perso je saurais pas faire ).
Sous les jeux en plein ecran, en general le message WM_PAINT n'est pas
interprete (je parle d'un cas typique de jeu 3D ou l'ecran est rafraichi en permanence).
LeGreg
Mon site web | Mon blog | Mes photos | Groupe USA
> BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
> presse la touche caps lock, stp
> OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA
Je ne sais pas quelle technologie graphique utilise MSN messegner, mais à chaque fois qu'un guguss se connecte la carré bleu qui me le dit s'affiche lorsque je suis sur n'importe quel jeu (quasiment ) et ce en mode FULLSCREEN. Donc je pensais que WM_PAINT était quand meme interprêtéEnvoyé par LeGreg
- http://jeg.developpez.com
- Projet RPGen : Editeur d'environnement de simulation de mondes régis par intelligence artificielle, interagissant avec le joueur. Peut faire office d'éditeur de RPG en 2D. http://jegsbond.free.fr/RPGen/ (Cherche testeurs)
oui pour messenger c'est magique
je n'en sais pas beaucoup plus.
note que messenger = microsoft
LeGreg
Mon site web | Mon blog | Mes photos | Groupe USA
> BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
> presse la touche caps lock, stp
> OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA
faudrait faire des tests pour voir si ca marche sous tous les jeux
avec toutes les configs (antialias, flip, copy, mode ecran 10bits par canal, etc..)
malheureusement je n'ai pas messenger chez moi.
A+
LeGreg
Mon site web | Mon blog | Mes photos | Groupe USA
> BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
> presse la touche caps lock, stp
> OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA
En effet ! une piste à suivre ...Envoyé par JEG
Y'a aussi Virtual Girl qui fait ca.... hum
- http://jeg.developpez.com
- Projet RPGen : Editeur d'environnement de simulation de mondes régis par intelligence artificielle, interagissant avec le joueur. Peut faire office d'éditeur de RPG en 2D. http://jegsbond.free.fr/RPGen/ (Cherche testeurs)
Monsieur le Greg ,
Essayez ceci en mode plein écran:en mode directX plein ecran (ddraw ou dgraphics)
tu n'as pas acces a la couche GDI de windows
LPDIRECTDRAWSURFACE7 lpDDSOFF;
void AfficheRectangle(int x1,int y1,int x2,int y2)
{
HDC hdc;
lpDDSOFF->GetDC( &hdc );
Rectangle(hdc,x1,y1,x2,y2);
lpDDSOFF->ReleaseDC(hdc);
}
Et vous verrez que toutes les fonctions GDI ( TextOut , MoveTo , LineTo....) sont disponibles avec les surfaces DirectDraw.
Dans le livre de Microsoft Press "Atelier Direct X " le sujet est abordé.
oui mais getDC n'existe plus dans DirectGraphics..
Il fera son grand retour dans DirectX9
mais seulement sur les surfaces compatibles..
As-tu essaye de tracer des fenetres style popup dans DirectGraphics?
suivant la carte (ici j'ai une Geforce2), les dialogues sont affichees dans le mauvais buffer, celui qui n'est pas a l'ecran une frame sur deux..
Mon avis c'est que le driver en fera qu'a sa tete jusqu'a ce qu'on
ait le vrai support GDI (et les dev caps associes suivant la carte graphique et le driver) dans DirectGraphics 9.0
A+
LeGreg
Mon site web | Mon blog | Mes photos | Groupe USA
> BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
> presse la touche caps lock, stp
> OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager