Salut,
Lorsque l'on applique le style WS_THICKFRAME (=WS_SIZEBOX) à un control on peut le redimensionner des 4 cotés. Moi je voudrait qu'on ne puisse redimensionner qu'un seul coté.
Quelqu'un sait comment faire ?
Merci d'avance :)
Version imprimable
Salut,
Lorsque l'on applique le style WS_THICKFRAME (=WS_SIZEBOX) à un control on peut le redimensionner des 4 cotés. Moi je voudrait qu'on ne puisse redimensionner qu'un seul coté.
Quelqu'un sait comment faire ?
Merci d'avance :)
Tu ne peux, à moins que le contrôle ait déjà des fonctionalités prévues pour ça. Si tu fais un contrôle toi-même, tu peux faire ainsi: Intercepter le retour de WM_NCHITTEST et censurer les zones de redimensionnement sur certains cotés...
Code:
1
2
3
4
5
6 case WM_NCHITTEST: retour = DefWindowProc(hWnd, WM_NCHITTEST, wParam, lParam); //Exemple: Interdire le redimensionnement gauche if(HTLEFT == retour) retour = HTBORDER; break;
Ton astuce a l'air de marcher. :)
Par contre quant j'applique le style WS_THICKFRAME j'ai une bordure vide (qui n'est pas redessinée) tout le tour de mon control (c'est en fait l'espace ou apparait la flêche de redimensionnement). Cette bordure apparait même sur les cotés ou j'ai bloqué le redimensionnement.
Comment je pourrait enlever cette bordure ?
[EDIT] la bordure prend la couleur de fond de la fenêtre principale
Franchement, là, je ne sais pas trop. Je n'ai jamais eu ce genre de problème (il faut dire qu'on donne rarement une bordure aux contrôles en temps normal).
non je voulait dire que avec WS_THICKFRAME ça me fait une bordure et je veur juste l'enlever.:)Citation:
Envoyé par Médinoc
Je ne crois pas qu'il y ait un moyen de supprimer cette bordure, sauf en faisant tout le dessin toi-même (le contrôle doit pour cela traiter les messages WM_NCHITTEST, WM_NCPAINT et WM_NCCALCSIZE).
Ou bien, tu te fais ton propre style de remplacement de WS_THICKFRAME, et tu joues avec WM_NCHITTEST pour dire que telle partie est une zone de redimensionnement...