PDA

Voir la version complète : Dialog Box sous DirectDraw


amarhys
25/11/2005, 19h25
Bonjour à tous,

J'ai une application sous DirectDraw (je sais, c'est un peu vieillot DirectDraw mais au moins c'est pas trop compliqué alors je comprends :00000023: ) et j'aimerais ouvrir une DialogBox ... et bien vous me croirez si vous voulez mais ça ne marche pas (du moins avec moi).

J'ai crée le device Directdraw avec le code suivant :


HINSTANCE hInst;
LPDIRECTDRAW lpDD;
....
....

HRESULT ddrval ;
ddrval = DirectDrawCreate(NULL, &lpDD, NULL) ;
if ( ddrval != DD_OK )
return false;
ddrval = lpDD->SetCooperativeLevel(hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN ) ;
if ( ddrval != DD_OK )
{
lpDD->Release();
return false;
}
ddrval = lpDD->SetDisplayMode(WnWIDTH, WnHEIGHT, 16);
if ( ddrval != DD_OK )
{
lpDD->Release();
return false;
}

puis une surface primaire et un back buffer (j'ai suivi à la lettre les conseils donnés par Microsoft dans les tutoriaux DirectX7, et d'ailleurs ça marche bien pour tout ce qui est "purement" graphique...)

et ensuite je tente d'ouvrir une boite de dialogue de la manière suivante :


DialogBox(hInst, (LPCTSTR)IDD_CLKAREA, hWnd, (DLGPROC)ClkArea);

sachant que tous les paramètres sont définis et semblent valides : la ressource IDD_CLKAREA, la CALLBACK ClkArea, les handlers hInst et hWnd (l'affichage de la boite de dialogue fonctionne avec le même code sous le GDI WIN32 standard, ça ne fonctionne plus depuis que j'ai activé DirectDraw)

Sous DirectDraw, rien ne s'affiche. Par contre, il semble que la boite de dialogue soit là, présente virtuellement car les raccourcis clavier des touches "OK", "CANCEL" etc.. fonctionnent... mais je ne la voit pas.

Quelqu'un a t'il une idée ? Peut être le mode EXCLUSIVE et FULLSCREEN de directdraw ?

En tous cas, merci d'avance à celui qui pourra m'aider.

Amarhys

Loulou
25/11/2005, 19h44
Il me semble qu'effectivement cela soit impossible en mode fullscreen exclusive.

amarhys
26/11/2005, 14h58
J'ai essayé de travailler avec une fenêtre Directdraw en mode "non exclusif"


ddrval = lpDD->SetCooperativeLevel(hwnd, DDSCL_NORMAL);

mais ça ne fonctionne pas non plus (et en plus je ne dispose pas de backbuffer et de flip de surfaces, je suis obligé de remplir directement la surface primaire).

Comment fait t'on pour travailler en mode fenêtré sous Directdraw ? Je pense que dans ce mode les boîtes de dialogues sont disponibles (reste encore à vérifier)

Si quelqu'un a une idée, même une toute petite .... merci d'avance

Amarhys

Loulou
26/11/2005, 19h43
Tu devrais utiliser DirectGraphics. Les derniers SDK intègrent un module d'interface graphique prêt à l'emploi entièrement en 2D. Ca te rebutera sûrement au début, mais l'effort vaudra le coup.

amarhys
27/11/2005, 11h58
Je veux bien utiliser DirectGraphics mais je ne trouve aucun tutorial sympa du genre "Moteur 2D sous DirectGraphics". Tu parles de quel environnement dans le SDK ? Je possède le SDK DirectX9 de février 2005 et je n'ai rien trouvé de tel (ça ne veut pas dire que ça n'y est pas :00000023: )

Et surtout est-ce que cela résoudra mon problème de Dialog Box ? Je n'en suis pas sûr.

Merci

Amarhys

HanLee
27/11/2005, 13h54
Je veux bien utiliser DirectGraphics mais je ne trouve aucun tutorial sympa du genre "Moteur 2D sous DirectGraphics". Tu parles de quel environnement dans le SDK ? Je possède le SDK DirectX9 de février 2005 et je n'ai rien trouvé de tel (ça ne veut pas dire que ça n'y est pas :00000023: )

Et surtout est-ce que cela résoudra mon problème de Dialog Box ? Je n'en suis pas sûr.

Merci

Amarhys

Ben, yavait justement un tel article, mais de LaurentUSA qui l'a retiré du site.
Sinon, il reste celui là, mais pour DirectX 8 (c'est presque pareil que pour DirectX 9).

http://glinfrench.apinc.org/article.php3?id_article=42

Loulou
27/11/2005, 14h11
Ou encore :

http://www.gamedev.net/reference/articles/article1434.asp