Le premier site francophone dédié au développement Pocket PC


Comment rendre un fenêtre toujours visible ?
 
   


Avant de lire cet article, je vous conseille de prendre connaissance de l'article consacré à la manière de créer une fenêtre sur mesure.

Modale, Modeless, et Topmost

Une fenêtre Windows CE est par défaut susceptible d'être cachée par d'autres fenêtres qui passent en avant plan par l'action de l'utilisateur ou par l'action directe des programmes, ces fenêtre sont dites modeless. Il existe aussi des fenêtres qui stoppent le déroulement d'un programme tant qu'elles sont visibles. Ces fenêtres sont dites modales, mais avec eVB il est impossible d'en créer. Il existe enfin une troisième catégorie qui permet à une fenêtre d'être modeless (elle n'est pas bloquante) tout en étant toujours visible. Ces fenêtres sont dites Topmost, et sont parfois très pratiques. Nous allons apprendre à les créer avec eVB.

Comment faire ?

Comme vous devez vous en douter, nous allons utiliser les APIs pour créer une fenêtre Topmost. La fonction qui permet de transformer une fenêtre eVB normale en fenêtre Topmost est "SetWindowPos", qui se trouvent dans la librairie dynamique "Coredll.dll". Cette fonction permet aussi de modifier la position (au sens coordonnées) d'une fenêtre, mais nous n'allons pas ici utiliser ces fonctionnalités là. Pour utiliser cette fonction avec eVB nous avons besoin de la déclarer de la manière suivante :

Public Declare Function SetWindowPos Lib "Coredll" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Et nous avons besoins aussi des constantes suivantes :

Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2

Nous allons aussi créer une procédure eVB qui va prendre en charge l'utilisation de cette fonction. Cette procédure prend en paramètre un objet eVB de type Form (une fenêtre), et une valeur booléenne indiquant si l'on veut rendre notre fenêtre Topmost ou non :

Public Sub SetTopmost(ByVal TheForm As Form, ByVal Topmost As Boolean)
If Topmost Then
Call SetWindowPos(TheForm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
Else
Call SetWindowPos(TheForm.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End If
End Sub

Pour rendre une feuille Topmost, il suffit d'écrire dans sont événement "Load" :

Sub Form_Load()
Call SetTopMost(me, True)
End Sub

Attention, le fait de rendre la fenêtre Topmost, l'affiche. Il en est de même lorsque vous cessez de la rendre Topmost.

Pour quoi faire ?

Cette fonctionnalité peut être extrêmement utile pour garder par exemple une boite à outils de votre application toujours sous la main, même si temporairement vous changez de programme. A vous d'avoir de l'imagination.

 

Stéphane Sibué

 
       
   
 
   
Copyright 2001-2004 - Tous droits réservés
 
   

iPAQ est un produit de COMPAQ.
Visual Tools est un produit de Microsoft Corporation.
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.