Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3038 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Afficher une toolbar quand on est en plein écran via DirectX

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Afficher une toolbar quand on est en plein écran via DirectX

n°447870
rufo
Pas me confondre avec Lycos!
Posté le 03-07-2003 à 17:31:25  profilanswer
 

  Voilà, je suis actuellement en train de développer un petit jeu et pour la partie graphique, j'utilise DirectX sous Win98.
J'affiche un tapis de jeu (un bmp) en plein écran; voici une partie de mon code qui initialise ma fenêtre plein écran :
 

Code :
  1. HWND               hwnd, hwndToolbar;
  2.     WNDCLASS            wc;
  3.     DDSURFACEDESC       ddsd, ddsdTapis;
  4.     DDSCAPS  ddscaps;
  5.     HDC                 hdc;
  6.     WORD  i;
  7.     /*
  8.      * crée et déclare la classe de fenêtre
  9.      */
  10.     wc.style = CS_HREDRAW | CS_VREDRAW;
  11.     wc.lpfnWndProc = WindowProc;
  12.     wc.cbClsExtra = 0;
  13.     wc.cbWndExtra = 0;
  14.     wc.hInstance = hInstance;
  15.     wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );
  16.     wc.hCursor = LoadCursor( NULL, IDC_ARROW );
  17.     wc.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
  18.     wc.lpszMenuName = NAME;
  19.     wc.lpszClassName = NAME;
  20.     RegisterClass( &wc );
  21.    
  22.     /*
  23.      * Crée une fenêtre
  24.      */
  25.     hwnd = CreateWindowEx(
  26.         WS_EX_TOPMOST,
  27.         NAME,
  28.         TITLE,
  29.         WS_POPUP,
  30.         0, 0,
  31.         GetSystemMetrics( SM_CXSCREEN ),
  32.         GetSystemMetrics( SM_CYSCREEN ),
  33.         NULL,
  34.         NULL,
  35.         hInstance,
  36.         NULL );
  37.     if ( !hwnd )
  38.     {
  39.         return FALSE;
  40.     }
  41.     ShowWindow( hwnd, nCmdShow );
  42.     UpdateWindow( hwnd );
  43.     /*
  44.      * Crée l'objet DirectDraw
  45.      */
  46.     if FAILED( DirectDrawCreate( NULL, &lpDD, NULL ) )
  47.     {
  48.         return Fail( hwnd, "Impossible de créer l'objet
  49.                      DirectDraw.\n" );
  50.     }
  51.     // Obtient mode exclusif
  52.     if FAILED( lpDD->SetCooperativeLevel( hwnd,
  53.                DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN ) )
  54.     {
  55.         return Fail( hwnd, "Impossible de définir le niveau 
  56.                      coopératif.\n" );
  57.     }


 
Je précise que j'utilise un backbuffer.
 
Je voudrais savoir comment je dois m'y prendre pour pouvoir afficher une toolbar (le même genre que celle de Photoshop). Merci :)
 
Sinon, je voudrais savoir comment je peux faire aussi pour afficher un menu de la même manière que celui de Bryce 4 (ou 5), c'est-à-dire que le menu n'apparaît pas en temps normal, mais que dès que l'utilisateur approche la souris du haut de l'écran, le menu apparaît, puis lorsque l'utilisateur a cliqué sur un item de menu, ce dernier disparaît...

mood
Publicité
Posté le 03-07-2003 à 17:31:25  profilanswer
 

n°447873
rufo
Pas me confondre avec Lycos!
Posté le 03-07-2003 à 17:32:33  profilanswer
 

J'ajoute que je suis sous VC++ 5...

n°447979
HelloWorld
Salut tout le monde!
Posté le 03-07-2003 à 18:50:48  profilanswer
 

Du temps où j'avais touché à DirectDraw, y'avait un exemple du SDK qui montrait le mixage de DirectX avec le GDI.
T'as essayé de créer une toolbar directement dans ta fenêtre ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°448349
rufo
Pas me confondre avec Lycos!
Posté le 04-07-2003 à 08:52:48  profilanswer
 

HelloWorld a écrit :

Du temps où j'avais touché à DirectDraw, y'avait un exemple du SDK qui montrait le mixage de DirectX avec le GDI.
T'as essayé de créer une toolbar directement dans ta fenêtre ?


 
oui, mais la fenêtre ne se crée pas. Je pense que c'est à cause des flags que j'ai mis dans ma fonction CreateWindowEx.

n°448370
HelloWorld
Salut tout le monde!
Posté le 04-07-2003 à 09:31:56  profilanswer
 

Citation :

wc.lpszMenuName = NAME;


T'es sûr de cette ligne ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°448408
rufo
Pas me confondre avec Lycos!
Posté le 04-07-2003 à 10:09:52  profilanswer
 

J'ai repris ça d'un exemple, mais je sais qu'on peut mettre l'ID d'une resource MENU et dans CreateWindowEx, au 10ème paramètre, je dois mettre aussi l'ID de ma resource MENU. J'ai testé, mais le menu ne s'affiche pas :(... Jusqu'à présent, vu que j'avais pas mis de menu à mon appli, j'avais laissé NAME comme valeur...

n°448605
rufo
Pas me confondre avec Lycos!
Posté le 04-07-2003 à 12:22:45  profilanswer
 

Bon, j'ai réussi à afficher ma toolbar via CreateDialog, mais j'ai un nouveau pb : quand je clique sur un contrôle (un bouton par ex) de cette toolbar, ma "fenêtre" (c'en n'est pas vraiment une vu qu'elle est en plein écran) n'arrive pas à reprendre l'interceoption des messages qui lui sont destinés :(
 
En +, je n'arrive même pas à déplacer ma toolbar via la souris.

n°448889
rufo
Pas me confondre avec Lycos!
Posté le 04-07-2003 à 16:32:56  profilanswer
 

Personne en peut m'aider, svp? Parce que je suis vraiment coincer :(

n°449475
rufo
Pas me confondre avec Lycos!
Posté le 05-07-2003 à 20:16:25  profilanswer
 

up:)

n°449973
rufo
Pas me confondre avec Lycos!
Posté le 07-07-2003 à 10:00:06  profilanswer
 

help, svp! :hello:

mood
Publicité
Posté le 07-07-2003 à 10:00:06  profilanswer
 

n°450030
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-07-2003 à 11:32:00  profilanswer
 

Essaie de faire un SetFocus() sur ta fenêtre principale une fois que t'as fini d'utiliser ta toolbar.


---------------
J'ai un string dans l'array (Paris Hilton)
n°451056
rufo
Pas me confondre avec Lycos!
Posté le 08-07-2003 à 13:50:29  profilanswer
 

Harkonnen a écrit :

Essaie de faire un SetFocus() sur ta fenêtre principale une fois que t'as fini d'utiliser ta toolbar.


 
ah, ça se fait pas automatiquement dès que le clique dans la fenêtre?
 
Je commence à me demander si je ne devrais pas faire ma toolbar via une image qui représenterait une fenêtre Windows et des boutons et que je programmerais tous les événements moi-même (reprogrammer en qq sorte la classe CWND). C'est brutal comme solution, mais vu que personne ne me propose rien d'autre, faut bien que je trouve un moyen d'avancer...

n°451070
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-07-2003 à 13:56:22  profilanswer
 

De toute façon, mélanger GDI et DirectX ça pue et c'est batard. Autant effectivement faire ta toolbar à la main !


---------------
J'ai un string dans l'array (Paris Hilton)
n°451108
rufo
Pas me confondre avec Lycos!
Posté le 08-07-2003 à 14:17:08  profilanswer
 

Harkonnen a écrit :

De toute façon, mélanger GDI et DirectX ça pue et c'est batard. Autant effectivement faire ta toolbar à la main !


 
Petite question en passant : comment je fais pour afficher du texte à l'écran (en DirectX ou GDI) avec une police de caractères que je choisis (Times New Roman, Vernada, etc.)?
 
Sinon, pour la gestion du clavier et de la souris : je garde ma fonction qui intercepte les messages Windows avec un switch ou j'utilise DirectInput?
 
Je précise que je débute en DirectX... :)

n°451160
HelloWorld
Salut tout le monde!
Posté le 08-07-2003 à 14:50:46  profilanswer
 

Citation :

De toute façon, mélanger GDI et DirectX ça pue et c'est batard. Autant effectivement faire ta toolbar à la main !


 
Ah bon ?
Moi j'ai toujours cru que ça se mixait sans problème (une fenêtre DirectX s'utilise comme une fenêtre classique). En tous cas les exemples du SDK m'ont pas choqué.
rufo > tu as regardé dans le SDK ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°451937
rufo
Pas me confondre avec Lycos!
Posté le 09-07-2003 à 11:07:08  profilanswer
 

HelloWorld a écrit :

Citation :

De toute façon, mélanger GDI et DirectX ça pue et c'est batard. Autant effectivement faire ta toolbar à la main !


 
Ah bon ?
Moi j'ai toujours cru que ça se mixait sans problème (une fenêtre DirectX s'utilise comme une fenêtre classique). En tous cas les exemples du SDK m'ont pas choqué.
rufo > tu as regardé dans le SDK ?


 
oui, j'ai même regardé dans les ex du bouquin MS Press qui traite de DirectX 5 mais j'ai rien trouvé qui mixe fenêtres enfants et une fenêtre principale plein écran qui fait du DirectX...:(
 
ps: je vous pas non plus le pb de mixer du GDI et du DirectX vu que dans mes ex du bouquin, ils le font. Par contre, peut-être que c'est plus propre de faire tout en DirectX. Mais j'ai aps encore trouvé comment afficher du texte avec DirectX.
 
ps2: pourquoi TextOut du GDI ne prend pas en compte le '\n' dans une chaîne de caractères???

n°451959
HelloWorld
Salut tout le monde!
Posté le 09-07-2003 à 11:36:48  profilanswer
 

TextOut affiche du text, c'est tout. Il affiche un après un des caractères...
Si tu veux le formatter, utilises GDI+.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°452195
rufo
Pas me confondre avec Lycos!
Posté le 09-07-2003 à 15:18:20  profilanswer
 

HelloWorld a écrit :

TextOut affiche du text, c'est tout. Il affiche un après un des caractères...
Si tu veux le formatter, utilises GDI+.


 
Merci, je vais regarder ça. Je connaissais pas.

n°452268
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 09-07-2003 à 15:48:37  profilanswer
 

HelloWorld a écrit :

Ah bon ?
Moi j'ai toujours cru que ça se mixait sans problème (une fenêtre DirectX s'utilise comme une fenêtre classique). En tous cas les exemples du SDK m'ont pas choqué.
rufo > tu as regardé dans le SDK ?


Ben moi j'ai tjs eu des merdes [:sinclaire]
Entre les messages qui n'étaient pas interceptés par la toolbar, la focalisation aléatoire, etc... c'est pas vraiment byzance :/


Message édité par Harkonnen le 09-07-2003 à 15:49:00

---------------
J'ai un string dans l'array (Paris Hilton)
n°452270
HelloWorld
Salut tout le monde!
Posté le 09-07-2003 à 15:50:43  profilanswer
 

En même temps j'ai pas bcp testé ... ça s'est limité à une boite de dialogue avec des radio button dedans.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°453919
rufo
Pas me confondre avec Lycos!
Posté le 10-07-2003 à 17:14:15  profilanswer
 

Harkonnen a écrit :


Ben moi j'ai tjs eu des merdes [:sinclaire]
Entre les messages qui n'étaient pas interceptés par la toolbar, la focalisation aléatoire, etc... c'est pas vraiment byzance :/


 
Si j'ai bien compris, le fait que ma toolbar reste figée (entre autre), ça peut être dû à la présence de fcts du GDI?

n°453921
rufo
Pas me confondre avec Lycos!
Posté le 10-07-2003 à 17:16:22  profilanswer
 

au fait, j'ai  pas trouvé GDI+. J'ai juste trouvé une fct qui me plaît : DrawText. Elle me permet d'afficher du texte de plusieurs manières (centré, justifié, etc.) dans une zone rectangulaire. :)

n°453924
rufo
Pas me confondre avec Lycos!
Posté le 10-07-2003 à 17:18:45  profilanswer
 

J'ai regardé un ex du SDK où y'a un mixage de fenêtres enfants avec une fenêtre principale DirectX plein écran. J'ai repris ce qu'ils avait fait, mais ça marche pas plus dans mon appli (du reste, j'ai pas pu vérifier que eux, ça marchait, mais je pense que oui)... :( Je dois être un boulet...

n°454012
rufo
Pas me confondre avec Lycos!
Posté le 10-07-2003 à 18:27:13  profilanswer
 

c'est marrant, dans l'ex du SDK, pour accéder à une fct de DirctDraw, ils font lpDD->lpVtbl->Fonction() alors que moi, je fais directement lpMaSurface->Fonction(). Est-ce-que ça pourrait venir de là?
 
Bon, ça y est, j'arrive à créer ma toolbar et à la déplacer à l'aide de la souris sans pour autant perdre définitivement le focus de ma fichie principale.
 
Mais quand je mets à jour le contenu graphique de ma fenêtre principale via DirectX, ma toolbar disparaît (elle est recouverte) : normal. Mais j'arrive plus à la faire réapparaître!!! J'ai essayé ShowWindow, UpdateWindow, SetWindowPos (mais là, y'a pleins d'infos à mettre et je me trompe peut-être), MoveWindow et rien n'y fait. :( Au fait, pour récuppérer dans une structure RECT la zone occupée par ma toolbar, c'est bien GetWindowRect, non?


Message édité par rufo le 10-07-2003 à 18:32:02
n°455482
rufo
Pas me confondre avec Lycos!
Posté le 11-07-2003 à 16:26:07  profilanswer
 

up:)

n°455910
rufo
Pas me confondre avec Lycos!
Posté le 12-07-2003 à 09:47:22  profilanswer
 

re-up...

n°461224
rufo
Pas me confondre avec Lycos!
Posté le 18-07-2003 à 09:17:17  profilanswer
 

Help, svp ;)

n°463249
rufo
Pas me confondre avec Lycos!
Posté le 21-07-2003 à 13:09:18  profilanswer
 

Bon, ben juste pour dire que j'ai toujours mon pb et que j'ai plus trop d'idées (et pleins de questions en suspend) pour le résoudre :(

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Afficher une toolbar quand on est en plein écran via DirectX

 

Sujets relatifs
afficher le nb de connectés sur une page[Delphi 6] : Afficher les infos de versions
afficher ipRafraîchir l'écran
Rafraîchir l'écran[JAVA] Mode plein écran
Impossible d'afficher un bitmap transparent dans un DC memoire...afficher un menu
[Delphi] pb avec directx et createfont 
Plus de sujets relatifs à : Afficher une toolbar quand on est en plein écran via DirectX


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR