D'autres fonctions pour gérer les fenêtres...
Déplacer une fenêtre:
Il est tout à fait possible de déplacer ou de redimensionner les fenêtres. Evidemment, pour la fenêtre "posée sur l'écran", les positions sont relatives aux coordonnées (0,0) de l'écran (en haut à gauche !). Pour les fenêtres enfants, elle sont relatives aux coordonnées (0,0) de la zone client de leur fenêtre parent.
Syntaxe:
BOOL MoveWindow(
HWND hWnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bRepaint
);
Avec pour Paramètres
hWnd : handle sur la fenêtre à déplacer ou redimensionner
X : La nouvelle position en X
Y : La n,ouvelle position en Y
nWidth : La nouvelle largeur
nHeight : La nouvelle hauteur
bRepaint : Pour indiquer s'il faut redessiner ou non la fenêtre. Si TRUE,
le message WM_PAINT sera envoyé. FALSE, rien ne sera fait...
En sortie, si la return value est NULL, alors il y a un problème.
MoveWindow va envoyer les messages suivant à la fenêtre : WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANGED, WM_MOVE, WM_SIZE, et WM_NCCALCSIZE.
Une fenêtre en premier plan avec focus:
Un autre déplacement est possible : faire passer sa fenêtre en premier plan et lui donner le focus:
SetForegroundWindow(HWND hWnd) avec hWnd, le handle de la fenêtre. La fonction retourne 0 si pb.
Cette fonction
sera souvent utilisée avec ShowWindow()
dans le cas où la fenêtre serait iconisée
Une fenêtre en premier plan:
Cette fonction permet de positionner le Z order (la position suivant l'axe Z) au top, donc la fenêtre devient visible si elle était cachée. s'il s'agit d'une fenêtre principale (top-level), celle-ci sera activée. S'il s'agit d'une fenêtre fille, la fenêtre parent de niveau principale sera activée.
BOOL WINAPI BringWindowToTop(HWND hWnd );
En entrée:
hWnd, le handle de la fenêtre à positionner au top.
En sortie
Si la fonction marche, retourne une valeur différente de 0, 0 sinon et GetLastError précise l'erreur
En fait, cette fonction est similaire à SetWindowPos mais uniquement sur le z-Top.
Donner le focus à la fenêtre:
Donner le focus à une fenêtre (Voir affichage du caret dans celle-ci si fenêtre de type editeur, Voir aussi le chapitre sur la gestion du Caret).
SetFocus(HWND hWnd) avec hWnd, le handle de la fenêtre. La fonction retourne 0 si pb.
Cette fonction
sera souvent utilisée acev ShowWindow()
et SetForegroundWindow()...
Mettre une fenêtre sous forme d'icône:
BOOL CloseWindow(
HWND hWnd
);
En entrée, le handle de la fenêtre à icônifier.
En sortie, FALSE si erreur
Cette fonction
ne détruiera pas la fenêtre, ne pas confondre avec DestroyWindow
()
BOOL DestroyWindow(
HWND hWnd
);
En entrée, le handle de la fenêtre à détruire.
En sortie, FALSE si erreur
Cette fonction
détruiera la fenêtre, ne pas confondre avec CloseWindow
()
Raffraichir le contenu de la zone cliente:
BOOL UpdateWindow(
HWND hWnd
);
Cette fonction va lancer un message WM_PAINT dans la fenêtre.
Ce rafraichissement sera utilisé par exemple lors de l'affichage de la fenêtre afin de visualiser son contenu, mais aussi à chaque fois que vous aurez modifié le contenu de la zone client.
Modification de la barre de titre d'une fenêtre:
HWND hWnd,
LPCTSTR lpString
);
En entrée:
hWnd contient le handle de la fenêtre
lpString pointeur sur une variable qui contient le nouveau texte du titre terminé par \000.
Cette fonction peut aussi servir à modifier le texte d'un controle.
Lecture de la barre de titre d'une fenêtre:
HWND hWnd,
LPTSTR lpString,
int nMaxCount
);
En entrée:
hWnd est le handle de la fenêtre.
lpString pointeur sur une variable qui recevra le texte.
nMaxCount est le nombre maximum de caractères que pourra recevoir votre variable..
En sortie : 0 si erreur, sinon, le nombre de caractères renvoyé sans le caractère de fin de chaîne \000.
Récupérer la taille en caractère du titre de la fenêtre:
HWND hWnd
);
En entrée:
hWnd est le handle de la fenêtre.
En sortie : 0 si erreur, sinon, le nombre de caractères renvoyé sans le caractère de fin de chaîne \000.
WM_GETTEXTLENGTH
sera envoyé sur la fenêtre ou le controle.
La taille peut
paraître plus grande que le nombre de caractères que vous pourriez
compter. Ceci est dû à la codification de certains caractères
qui peut prendre deux octets.
Récupérer plus d'informations sur la barre de titre:
Cf. la fonction GetTitleBarInfo et la structure TITLEBARINFO