Un EXE dans un MDI ? [Résolu]

Signaler
Messages postés
182
Date d'inscription
mardi 8 janvier 2002
Statut
Membre
Dernière intervention
2 octobre 2012
-
Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011
-
Bonjour,

Je voudrais exécuter un petit jeu (en un seul fichier, un tétris, le reste ce place dans les registres... position,scores,config graphik.) dans un MDI.
C'est possible ou non ? si oui comment ? ou plutôt un bout de code qui traine pour injecter mes petits jeux dans un MDI serait cool pour que je puisse monter le reste tout seul.

En fait je voudrais regrouper pleins de petits jeux en une seul fenêtre.

Merci de votre aide.

8 réponses

Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011

Bonjour Nestor,

Oui c'est tout à fait possible
Tu peux utiliser l'API "SetParent" :

<DllImport("user32.dll")> _
Public Shared Function SetParent(hwndChild As IntPtr, hwndNewParent As IntPtr) As IntPtr


Par contre je ne crois qu'il soit possible d'héberger directement la fenêtre externe dans ton conteneur MDI. Mais tu peux très bien héberger le contenu de la fenêtre externe dans un panel, cela revient au même si le panel couvre tout l'espace de la fenêtre

Dim p As Process = Process.Start("calc.exe")

p.WaitForInputIdle() 'Attend que le processus charge sa fenêtre...
SetParent(p.MainWindowHandle, monForm.monPanel.Handle) 'Héberge le contenu de la fenêtre dans un panel.



Simon
Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011

Salut Nestor,

Il faut s'assurer que le programme aie eu le temps de charger sa fenêtre principale avant de faire un SetParent().
Le problème vient peut-être de là. Essaie avec un Sleep(1000) entre le Shell de le SetParent() et dis moi si ça fonctionne

Simon
Messages postés
182
Date d'inscription
mardi 8 janvier 2002
Statut
Membre
Dernière intervention
2 octobre 2012

Merci de ta réponse.
Cette déclaration est en .NET je suppose.
<DllImport("user32.dll")> _
Public Shared Function SetParent(hwndChild As IntPtr, hwndNewParent As IntPtr) As IntPtr

mon VB6 ne comprend pas.
moi non plus tu diras, lol
Messages postés
182
Date d'inscription
mardi 8 janvier 2002
Statut
Membre
Dernière intervention
2 octobre 2012

C'est bon, j'ai trouvé

Cette partie m'a mis sur la bonne voie:
SetParent(p.MainWindowHandle, monForm.monPanel.Handle)

Merci.
Messages postés
182
Date d'inscription
mardi 8 janvier 2002
Statut
Membre
Dernière intervention
2 octobre 2012

Bon j'ai un blém

si je met:
Dim hInst As Long, hWndApp As Long
hInst = Shell("tetris.exe")
hWndApp = GetWinHandle(hInst)
SetParent hWndApp, Me.hwnd

mon jeu se lance bien, mais à l'extérieur de mon Form1.

si le met "calc.exe" la calculette est bien à l’intérieur de mon mon Form1.

j'ai testé avec une PictureBox
SetParent hWndApp, Me.Picture1
Pareil, mon "tetris.exe" est à l’extérieur, et "calc.exe" lui reste bien à l’intérieur de mon Form1.

Chu perdu la.
Messages postés
182
Date d'inscription
mardi 8 janvier 2002
Statut
Membre
Dernière intervention
2 octobre 2012

GAGNÉ !!!
lol

bon j'ai juste ajouté:

Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

et ajouté le Sleep(1000)

C'est un défaut de vb6 ou une " chose " obligatoir de rajouter ce Sleep ?
Merci 1000 fois.
Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011

Non ce n'est pas un défaut du tout, le Sleep() remplace juste le WaitForInputIdle().
En fait, le problème est qu'il faut s'assurer que l'application puisse répondre au moment où on appel le SetParent(). Le Sleep() n'est pas vraiment une solution, si l'application est toujours occupée après 1000ms cela ne fonctionnera pas.

Donc la solution serait de te renseigner sur l'API WaitForInputIdle() en vb6

Declare Function WaitForInputIdle Lib "user32" (ByVal hProcess As Long, ByVal dwMilliseconds As Long) As Long


Je ne sais pas du tout comment l'utiliser, mais tu trouveras sans doute des infos sur le web

A+

Simon
Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011