Pb avec le plein écran de DirectX que je veux enlever

cs_Diabolus Messages postés 61 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 28 septembre 2007 - 15 févr. 2004 à 18:52
cs_Diabolus Messages postés 61 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 28 septembre 2007 - 16 févr. 2004 à 13:30
Bonjour à tous !

Je souhaiterai créer une fenêtre en mode normal et tout ce que j'arrive à faire c'est du plein écran. J'aimerai enlever le plein écran.
J'aimerai également afficher la souris, qu'elle ne soit pas cachée.

Voici une partie de mon code :

DDraw(HINSTANCE hInstance, int nCmdShow){

//fonction initialisant les objets pour DDraw

WNDCLASS wc; //fenêtre Windows

//Création et déclaration de la classe de la fenêtre.
wc.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = NULL;
wc.lpszMenuName = NAME;
wc.lpszClassName = NAME;
RegisterClass(&wc);

lpDD=NULL;

largeurFenetre=800;
hauteurFenetre=600;
bitsParPixel=16;

// Crée une fenêtre plein-écran.
hwnd = CreateWindowEx(WS_EX_TOPMOST, NAME, TITLE, WS_POPUP, 0, 0, GetSystemMetrics( SM_CXSCREEN ), GetSystemMetrics( SM_CYSCREEN ), NULL, NULL, hInstance, NULL );
ShowWindow( hwnd, nCmdShow );
UpdateWindow( hwnd );
hwndfm=hwnd;

//Création de l'objet DirectDraw;
DirectDrawCreateEx(NULL,(void**)&lpDD,IID_IDirectDraw7,NULL);

//On demande le mode exclusif (priorité au niveau de Windows)
lpDD->SetCooperativeLevel( hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN |DDSCL_ALLOWREBOOT );

//Définition du mode vidéo
lpDD->SetDisplayMode(largeurFenetre, hauteurFenetre, bitsParPixel, 0, 0);

Je pensais que c'était SetCooperativeLevel qui permettait de régler ça mais si je mets DDSCL_NORMAL ça ne me change rien, j'ai encore le plein écran et en plus ça plante. Et si j'enlève l'appel complet ça plante aussi.
Donc je ne sais pas du tout où le plein écran se fait.

Merci

2 réponses

glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
16 févr. 2004 à 00:45
Je ne suis pas sur de comprendre ce que tu veux, la question me parait tres clair, mais si tu connais directX, ce que je vais dire, tu le sais surement deja (moi je ne connais pas directX)... je pense donc que je ne t'aiderais pas, mais bon je le dis quand meme des fois que...
Pourquoi as tu ça dans ton code :

// Crée une fenêtre plein-écran.
hwnd = CreateWindowEx(WS_EX_TOPMOST, NAME, TITLE, WS_POPUP, 0, 0, GetSystemMetrics( SM_CXSCREEN ), GetSystemMetrics( SM_CYSCREEN ), NULL, NULL, hInstance, NULL );

le WS_EX_TOPMOST signifie que la fenetre sera toujours au premier plan, et les coordonnées de le fenetre vont de 0, 0 à l'autre bout de l'ecran. Donc c'est du plein ecran.

Il me semble que ceci serait plus adapté par exemple :

hwnd = CreateWindowEx(NULL, NAME, TITLE, WS_POPUP, 0, 0, 300, 300, NULL, NULL, hInstance, NULL );

Puis pour la souris, je ne connais pas DirectX, mais ShowCursor(TRUE) ne ferait pas l'affaire ?

Glipper
0
cs_Diabolus Messages postés 61 Date d'inscription samedi 20 décembre 2003 Statut Membre Dernière intervention 28 septembre 2007 1
16 févr. 2004 à 13:30
Salut,
Merci de m'avoir répondu,

en fait j'ai testé tout pleins de trucs sur ma façon d'ouvrir ma fenêtre. Ma version actuelle est :

hwnd = CreateWindowEx(WS_EX_TOPMOST, NAME, TITLE, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE,CW_USEDEFAULT, CW_USEDEFAULT,LARGEUR_FENETRE, HAUTEUR_FENETRE, 0,0,hInstance, 0 );

Je peux voir une fenêtre s'ouvrir mais elle passe ensuite en plein écran.

Je pense que le plein écran s'enclanche au moment où je dis :
lpDD->SetCooperativeLevel( hwnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN |DDSCL_ALLOWREBOOT );

Mais si je mets autre chose comme
lpDD->SetCooperativeLevel( hwnd, DDSCL_NORMAL );

ou même si je supprime la ligne, le programme plante quand je le lance.

Sinon pour le curseur le problème est résolu.
Mais le plein écran reste toujours un problème.
0
Rejoignez-nous