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.

Image non trouvée !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.

Image non trouvée !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

Image non trouvée !Cette fonction ne détruiera pas la fenêtre, ne pas confondre avec DestroyWindow ()

 

Détruire une fenêtre:

BOOL DestroyWindow(

HWND hWnd
);

En entrée, le handle de la fenêtre à détruire.

En sortie, FALSE si erreur

Image non trouvée !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:

BOOL SetWindowText(

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:

int GetWindowText(

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:

int GetWindowTextLength(

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.

Image non trouvée !WM_GETTEXTLENGTH sera envoyé sur la fenêtre ou le controle.

Image non trouvée !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