Déplacer une fenetre [Résolu]

cs_Vinsininounet 25 Messages postés mercredi 11 avril 2007Date d'inscription 6 avril 2008 Dernière intervention - 14 juil. 2007 à 00:07 - Dernière réponse : cs_Vinsininounet 25 Messages postés mercredi 11 avril 2007Date d'inscription 6 avril 2008 Dernière intervention
- 18 juil. 2007 à 12:16
Bonjour à tous,

Je suis un petit débutant en C mais j'ai une question qui me trotte dans la tete depuis pas mal de temps :

Je voudrais savoir si il existait un moyen de déplacer une fenetre ouverte avec la SDL sur l'ecran ,
du genre, la centrer ,ou la placer dans un coin ,enfin j'espere que vous m'avez compris ... 

Pour ceux qui m'ont compris et qui penvent m'aider je les remercient d'avance.

Sinon bonne continuation a tout le monde.

// dsl pour les fautes d'orthographe si il y en a , je suis crevé ... j'vais m'coucher . a +
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 14 juil. 2007 à 10:28
3
Merci
Salut !

Il faut récupérer le HANDLE créé par SDL. De mémoire : HWND hWindow = GetWindow(0,0);
Si je me souvient bien, en méttant (0, 0) ca récupère la fenètre principale de l'application appelant la fonction. Sinon il y à aussi les fonctions FindWindow et EnumWindows.

Une fois que tu à le Handle, tu peux faire tout ce que tu veux avec ta fenêre.
BOOL SetWindowPlacement(HWND hWnd, WINDOWPLACEMENT *lpwndpl);

Merci ctx_man 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de ctx_man
Meilleure réponse
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 14 juil. 2007 à 11:14
3
Merci
Alors pour la première question, je peux pas te certifier à 100% que ca va marcher, j'ai pas mon IDE sous la maain ni mon code où j'avais fait ca. Mais l'idée est la. Enfin, il faut que tu corrige une erreur quand même :
HWND fenetre ;
WINDOWPLACEMENT pos; //Pas un pointeur, sinon tu n'a pas la zone mémoire associée
pos.x = 100; //Du coup c'est des points et non des flèches
pos.y = 200;
fenetre = GetWindow(0,0);
SetWindowPlacement(fenetre, &pos); //Et ici tu passe l'adresse de ta variable (retour à un pointeur)

Pour la deuxième question, tu peux récupérer les positions de n'importe quelle fenêtre, il te faut juste trouver le handle de ces fenêtre. Regarde du coté de EnumWindows pour trouver les fenêtre.

La position d'un objet, quel qu'il soit, c'est toujours son coin supérieur gauche. Attention cependant à la parentée de l'objet. Il est frequent que la position obtenue est relative à son parent.

Au fait, je n'ai même pas pensé à te demander avant de répondre mais, les fonctions pré-citée sont présente uniquement sous Windows, donc si tu est sous Mac ou Lunix, ca fonctionnera pas.

Merci ctx_man 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de ctx_man
Meilleure réponse
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 14 juil. 2007 à 21:55
3
Merci
En fait, ce n'est pas la même notion de parentée. Je ne parle pas de l'heritage des classes du C++. Mais de l'objet parent d'un controle. Par exemple, un bouton est un enfant de la fenêtre qui le contient.

Ses coordonées sont relative à celles de cette fenetre.

La fonction EnumWindow est un callback. C'est à dire que tu dois écrire une fonction qui possède le prototype cité dans la documentation. Cette fonction sera appellée par EnumWindow pour chaque fenêtre. Ta fonction dois déterminer si la fenêtre que lui donne EnumWindow, est celle que tu recherche ou non.

Merci ctx_man 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de ctx_man
Meilleure réponse
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 14 juil. 2007 à 22:09
3
Merci
Je rajoute un tit post pour une explication plus précise (j'avais pas ce qu'il me fallait sous la main)

BOOL CALLBACK MonEnumEnumWindowsProc(HWND hwnd, LPARAM lParam)
{
//Tu reçois en paramètre le handle de la fenêtre
//A toi de t'en servir pour savoir si c'est la fenetre que tu cherche.
//Par exemple en comparant le titre de la fenetre.

return TRUE; //Ce n'est pas la bonne fenêtre, on passe à la suivant.
//OU
return FALSE; //C'est la fenêtre que tu cherchais, on s'arrete la.
}

Pour utiliser apres :
int main(int argc, char* argv[])
{
EnumWindow(MonEnumEnumWindowsProc, 0); // Tu peux remplacer le 0 par n'importe quelle valeur numérique y comprit une adresse. Ce nombre sera contenu dans le lParam recu par la fonction décrite plus haut. Ce qui fait que tu peux passe l'adresse d'une structure, objet ou autre. Tu devra juste la caster pour t'en servir.
}

Merci ctx_man 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de ctx_man
cs_Vinsininounet 25 Messages postés mercredi 11 avril 2007Date d'inscription 6 avril 2008 Dernière intervention - 14 juil. 2007 à 11:05
0
Merci
Merci ctx,

Sa répond a ma question, mais je voudrai etre sur d'avoir bien compris ton explication :

si je fais :

HWND fenetre ;
WINDOWPLACEMENT *pos ;
pos->x = 100;
pos->y = 200;
fenetre = GetWindow(0,0);
SetWindowPlacement(fenetre,pos);

Sa vas marcher ?

Et une deuxieme question me vien :

Comment peut on récuperer les position d'autres fenetres non minimisées sur le bureau ?
Si on peut , quel valeur récupere t'on , le haut a gouche , le bas a droite , etc ...

Merci d'avance a vous,
Et bonne continuation a tout les monde,
Commenter la réponse de cs_Vinsininounet
cs_Vinsininounet 25 Messages postés mercredi 11 avril 2007Date d'inscription 6 avril 2008 Dernière intervention - 14 juil. 2007 à 11:46
0
Merci
Dabord merci pour ta réponse,

Non, je suis sous Windows.

Pour la parenté des objet je comprend pas trop parceque je fais du C pas du C++,
Mais j'ai compris que un parent en gros c'était la fenetre qui avait ordonné l'ouverture de l'autre.
donc pour calculer la position de la fenetre "fille" ( pas fils puisque fenetre c au féminin  ) je fais :
posparent + posfille = position fenetre. ( dis moi si je me trompe )

D'accord je vais utiliser la fonction EnumWindows pour trouver les fenetres mais je voudrait juste savoir , Elle prend quoi comme paremetre et elle renvoie quoi ?

Sinon pour l'erreur du pointeur, ouai je sais je pensait a sa dans ma tete mais comme j'était trés fatigué j'ai écrit le contraire a ce que je pensait , enfin bon .

encore merci a toi pour tes réponses.

 
Commenter la réponse de cs_Vinsininounet
cs_Vinsininounet 25 Messages postés mercredi 11 avril 2007Date d'inscription 6 avril 2008 Dernière intervention - 14 juil. 2007 à 11:54
0
Merci
ehh pour la fonction EnumWindows enfait je voudrait juste savoir comment l'utiliser et comment distinguer une fenetre parente d'une fenetre normale ...

sinon bonne continuation a tous ...  ( C'est les vacances !!! )
Commenter la réponse de cs_Vinsininounet
cs_Vinsininounet 25 Messages postés mercredi 11 avril 2007Date d'inscription 6 avril 2008 Dernière intervention - 18 juil. 2007 à 12:16
0
Merci
d'abord merci pour ta réponse .

Grace a toi j'ai compris !!
( c pas une mince a faire )

J'avais déja utilisé des fonctions de callback en SDL mais c'était quand meme asser flou dans ma tete ...

Bon sinon bonne contiuation a tous 
Commenter la réponse de cs_Vinsininounet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.