Dialogbox et ddraw

cs_lahache Messages postés 1 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 16 août 2007 - 16 août 2007 à 11:54
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 16 août 2007 à 21:15
bonjour,
j'ai commencé un petit programme utilisant directdraw en mode exclusive, fullscreen, mais je voudrai beneficié des facilitées offertes par les dialogboxs.
probleme, lorsque je crée une dialogbox dans le programme, celle ci ne s'affiche q'une fois sur deux. le reste du temps, elle est en background.
je pense que cela est du au Zorder de la fenetre, mais je n'arrive pas a le modifié, ni par SetForegroundWindow(), ni par SetWindowPos().
(la dialogbox créé est system modal, visible, et set foreground)
est il possible d'utilisé les dialogbox dans ces conditions , et comment ?
merci,
marc

1 réponse

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
16 août 2007 à 21:15
Salut,
en gros, il ne faut pas etre en mode exclusive puis il faut un clipper et ne pas flipper la surface pour le rendu.

hDlg = le dialog 
lpDD = est l'objet directDraw
primarySurface et backSurface ne change pas.

LPDIRECTDRAWCLIPPER lpClipper = NULL;

lpDD->SetCooperativeLevel( hDlg, DDSCL_NORMAL );

lpDD->CreateClipper( 0, &lpClipper, NULL );
lpClipper->SetHWnd( 0, hDlg );
lpDDPrimarySurface->SetClipper( lpClipper );

Il faut blitter la backSurface  sur la primary:

RECT rcRectDest, rcRectSrc;
POINt p={0,0};
ClientToScreen(hDlg, &p);
GetClientRect(hDlg, &rcRectDest);
OffsetRect(&rcRectDest, p.x, p.y);
SetRect(&rcRectSrc, 0, 0, 640, 480);
lpDDPrimarySurface->Blt(&rcRectDest, lpDDBackSurface, 
                                       &rcRectSrc, DDBLT_WAIT, NULL);
0
Rejoignez-nous