[API] SetWindowRgn

SetWindowRgn [API] - VB/VBA/VBS - Programmation

Marsh Posté le 02-05-2002 à 18:03:27    

Pour changer l'apparence d'une fenetre j'utilise l'API windows SetWindowRgn :
 
SetWindowRgn myFeuille.hwnd, myRegion, True
 
où myRegion n'a pas la forme d'un rectangle mais une forme un peu spéciale ( d'où l'interet de cette API : avoir des fenetres qui sortent de l'ordinaire :) )
Ca fonctionne bien , c'est à dire que ma fenetre à bien la forme voulue par contre certaines parties du bord de la fenetre ( voir tout le bord meme suivant la forme désirée )qui servent normalement à resizer ma fenetre ne sont plus visible et ça m'embête , je voudrais bien que tout le contour de ma (nouvelle) fenetre puisse permettre de resizer celle-ci.
 
Merci d'avance pour votre aide  
 
ps : le programme est en  VB (mais peut importe puisqu'il s'agit d'API )

Reply

Marsh Posté le 02-05-2002 à 18:03:27   

Reply

Marsh Posté le 03-05-2002 à 07:46:35    

up du matin

Reply

Marsh Posté le 03-05-2002 à 08:10:47    

A mon avis c'est à toi de refaire un bouton et d'y associer le message WM_SIZE, et après tu gère dans la boucle des messages ce message pour redimensionner ta fenêtre. Mais bon ça c'est en C++, mais VB je connais pas, désolé !
a+
    ANT

Reply

Marsh Posté le 03-05-2002 à 08:57:55    

Si la feuille est ronde, c'est normal que les boutons soient inaccesibles....
 
Faut en "dessiner" dans un "coin" visible de la feuille, autant qu'on veut, avec la bonne "apparence" (on peut récupérer les boutons normaux en copiant l'écran, puis en découpant ce qu'on désire). Il faut alors gérer sous VB le _Click sur l(es)'image(s) et gérer le "resizing".
 
Pour tirer sur le bord pour changer la taille de façon continue, c'est plus difficile (!).

Reply

Marsh Posté le 03-05-2002 à 10:15:20    

vi, faut faire tout ca et regarde du cote de l'API StretchBlt, qui etirera ta surface.

Reply

Marsh Posté le 03-05-2002 à 13:55:25    

d'abord merci pour vos réponses.
 
Mon probleme c'est pas d'avoir des boutons pour fermer/minimiser/maximiser ma fenetre (mettre d'autres controle c'est pas un soucis ) mais c'est de pouvoir attraper le bord de ma fenetre pour pouvoir la redimension.
 
Je veux par exemple avoir une fenetre dans le style de media player 7 si vous voyez ce que je veux dire (une fenetre toute ronde par exemple) et attraper ses bords pour pouvoir motiver ça taille.

Reply

Marsh Posté le 03-05-2002 à 14:03:37    

Peut-être en explorant le message WM_NCHITTEST et DefWindowProc (=> one of the following values, indicating the position of the cursor hot spot). Il me semble avoir fait des essais (pr feuille rectangulaire) mais ai pas de souvenirs.
 
Les feuilles "rigolotes", on peut le resizer graduellement ??? Si c'est pas possible généralement, c'est peut-être que c'est extrêmement compliqué (faut connaître les coordonnées du contour) car c'est pas un messageWindows qui risque d'arriver, mais faut comparer à tout moment : ma souris est-elle au bord de la courbe de ma feuille ? Si oui, on transforme le curseur, et mesure le deéplacement...
 
Y a peut-être plus simple ?

Reply

Marsh Posté le 03-05-2002 à 14:04:27    

a oki !
Bein tu récuperes la position de la souris par rapport aux bords ( API GetClientRect), tu définis évidemment la zone "propice" au redimensionnement ( API SetCursorPos ), tout ca dans un message WM_MOUSEMOVE.

Reply

Marsh Posté le 03-05-2002 à 14:30:26    

KarLKoX a écrit a écrit :

a oki !
Bein tu récuperes la position de la souris par rapport aux bords ( API GetClientRect), tu définis évidemment la zone "propice" au redimensionnement ( API SetCursorPos ), tout ca dans un message WM_MOUSEMOVE.  




 
GetClientRect(), il doit être assez tortueux si le bord de fenêtre est ovale, circonvolutionné....
 
Sinon, faut mettre un bouton + et - pour gérer la taille "à la main". Ou menu "plus grand", "plus petit".

Reply

Marsh Posté le 03-05-2002 à 15:28:34    

carbon_14 a écrit a écrit :

 
 
GetClientRect(), il doit être assez tortueux si le bord de fenêtre est ovale, circonvolutionné....
 
Sinon, faut mettre un bouton + et - pour gérer la taille "à la main". Ou menu "plus grand", "plus petit".  




 
ouaip en fait dans ma fenetre y a une ellipse  :D  
 
j'ai une idée en tête , que ça marche je post pour vour dire comment j'ai fait
 
merci pour les réponses , a tout à l'heure (enfin j'espere  :D )

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed