Determiner taille d'un controle avec la souris [Résolu]

Signaler
Messages postés
37
Date d'inscription
samedi 20 novembre 2004
Statut
Membre
Dernière intervention
20 décembre 2006
-
Messages postés
37
Date d'inscription
samedi 20 novembre 2004
Statut
Membre
Dernière intervention
20 décembre 2006
-
Bonjour,

je veux faire en sorte qu'un controle soit créé en cliquant avec la souris puis que la taille de celui ci soit determiné en glissant la souris puis en relachant le bouton, voila ce que j'ai fait:

static bool CreatingControl=false;
static int PosX=0, PosY=0;
static int SizeX=0, SizeY=0;

switch (message)
{
case WM_LBUTTONDOWN:
             CreatingControl=true;
             PosX=LOWORD(lParam);
             PosY=HIWORD(lParam);
            NewControl=CreateWindow("button","",
            WS_VISIBLE|WS_CHILD,PosX,PosY,0,0,hEdit,0,0,0);
             break;

        case WM_LBUTTONUP:
             CreatingControl=false;
             break;

        case WM_MOUSEMOVE:
             if(CreatingControl)
             {
             SizeX=(LOWORD(lParam)-PosX);
             SizeY=(HIWORD(lParam)-PosY);
             SetWindowPos(NewControl,0,PosX,PosY,SizeX,SizeY,0);
             }
             break;
             ...

ca marche, mais malheuresement le redimmensionnement du controle n'est pas fluide du tout, le bouton ne suit pas le deplacement de la souris pour peu qu'on la deplace un peu trop vite
donc voila j'aimerai savoir si quelqu'un à un autre moyen pour que le redimmensionnement du control soit plus fluide
merci d'avance

2 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,
Pour un redimensionnement fluide, il est préférable de ne créer le controle qu'après relachement du bouton de la souris. Pendant le redimensionnement, un simple rectangle de pointillés suffit pour montrer les dimensions et la position du contrle. C'est la solution utilisé par Windows et tous les éditeurs de ressources.

case WM_LBUTTONDOWN:
             CreatingControl=true;
             PosX=LOWORD(lParam);
             PosY=HIWORD(lParam);
             // Début dessin du rectangle avec SetPixel() par exemple. 
             break;

        case WM_MOUSEMOVE:
             if(CreatingControl)
             {
             SizeX=(LOWORD(lParam)-PosX);
             SizeY=(HIWORD(lParam)-PosY);
             //Redimmensionnement du rectangle (avec SetPixel)
             }
             break;

        case WM_LBUTTONUP:
             CreatingControl=false;
             NewControl=CreateWindow,.......
             break;

Pour la technique du rectangle avec SetPixel(), tu peux regarder ce code source:
Impimeur d'images BMP
Messages postés
37
Date d'inscription
samedi 20 novembre 2004
Statut
Membre
Dernière intervention
20 décembre 2006

merci je vais essayer ca
au passage, ta source est très interessante