cs_Vinsininounet
Messages postés25Date d'inscriptionmercredi 11 avril 2007StatutMembreDernière intervention 6 avril 2008
-
14 juil. 2007 à 00:07
cs_Vinsininounet
Messages postés25Date d'inscriptionmercredi 11 avril 2007StatutMembreDernière intervention 6 avril 2008
-
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 +
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20132 14 juil. 2007 à 10:28
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);
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20132 14 juil. 2007 à 11:14
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.
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20132 14 juil. 2007 à 21:55
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.
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20132 14 juil. 2007 à 22:09
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.
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
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,
cs_Vinsininounet
Messages postés25Date d'inscriptionmercredi 11 avril 2007StatutMembreDernière intervention 6 avril 2008 14 juil. 2007 à 11:46
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 .
cs_Vinsininounet
Messages postés25Date d'inscriptionmercredi 11 avril 2007StatutMembreDernière intervention 6 avril 2008 14 juil. 2007 à 11:54
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 !!! )