Utilisation de WM_MDIGETACTIVE

Le
Laura Martignas
Bonjour,

Je suis en train de réaliser un programme de capture de fenêtres. J'arrive
à capturer des fenêtres "normales" via un GetForegroundWindow() et un
BitBlt() adapté, mais je ne parviens pas à capturer des fenêtres faisant
partie d'une application MDI.

J'ai bien trouvé le message WM_MDIGETACTIVE, mais je ne vois vraiment pas
comment l'utiliser dans le cadre de mon application, vu qu'il a besoin du
hWnd de la fenêtre client, que je ne vois pas comment récupérer.

Auriez vous une idée ou un bout de code pour m'aiguiller ?

Merci par avance
Laura
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #9714041
Laura Martignas a écrit:


J'ai bien trouvé le message WM_MDIGETACTIVE, mais je ne vois vraiment pas
comment l'utiliser dans le cadre de mon application, vu qu'il a besoin du
hWnd de la fenêtre client, que je ne vois pas comment récupérer.

Auriez vous une idée ou un bout de code pour m'aiguiller ?



Comme dit l'aide... "to a multiple-document interface (MDI) client window"
=>
HWND hWndClient = FindWindowEx(hWnd, NULL, "MDIClient", NULL);
Laura Martignas
Le #9714031
Christian ASTOR
Comme dit l'aide... "to a multiple-document interface (MDI) client
window" =>
HWND hWndClient = FindWindowEx(hWnd, NULL, "MDIClient", NULL);



Ok, donc si je veux par exemple récupérer la fenêtre MDI active d'une
application MDI, je dois d'abord récupérer le hWnd de l'application MDI via
GetForegroundWindow() (en supposant que cette application soit active),
puis passer ce handle à FindWindowEx() pour récupérer le hWnd client, et
enfin passer ce hWnd client comme paramètre de WM_MDIGETACTIVE pour obtenir
la fenêtre enfant active, c'est bien ça ?

Merci de ton aide
Laura
Christian ASTOR
Le #9714021
Laura Martignas a écrit:

Ok, donc si je veux par exemple récupérer la fenêtre MDI active d'une
application MDI, je dois d'abord récupérer le hWnd de l'application MDI via
GetForegroundWindow() (en supposant que cette application soit active),
puis passer ce handle à FindWindowEx() pour récupérer le hWnd client, et
enfin passer ce hWnd client comme paramètre de WM_MDIGETACTIVE pour obtenir
la fenêtre enfant active, c'est bien ça ?



Oui, tout-à-fait.
Pour tester, il suffit d'utiliser un timer (5 sec par ex), puis ds le
WM_TIMER =>
{
char sText[256];
HWND hWndMDI = GetForegroundWindow();
HWND hWndClient = FindWindowEx(hWndMDI, NULL, "MDIClient", NULL);
HWND hWndActive = (HWND)SendMessage(hWndClient, WM_MDIGETACTIVE, 0, NULL);
wsprintf(sText, "hWnd = %x", hWndActive);
MessageBox(NULL, sText, "Information", MB_OK | MB_ICONINFORMATION);
}

Tu vérifies alors avec Spy++, que c'est bien la bonne child affichée qd
la MDI est en foreground...
Laura Martignas
Le #9714001
Christian ASTOR
Oui, tout-à-fait.



Merci beaucoup pour ton aide :)
Publicité
Poster une réponse
Anonyme