IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

gdi: fenetre non redimensionnable


Sujet :

Windows

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Points : 177
    Points
    177
    Par défaut gdi: fenetre non redimensionnable
    j'aimerais savoir comment rendre une fenetre non redimensionnable (et inversement, une fenetre non redimensionnable pouvant etre a nouveau redimensionnee). J'ai regarde les styles des fenetre, mais il ne me semble pas qu'il y en ait un qui le permette.

    merci

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Si une fenêtre possède le style WS_THICKFRAME, elle est redimensionnable. Point.

    (sans compter le bouton "agrandir", qui lui est décidé par le style WS_MAXIMIZEBOX).

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Points : 177
    Points
    177
    Par défaut
    meme apres un appel a MoveWindow ? Ce que je voulais savoir (je n'etais pas assez precis), c'est, meme avec des bords, empecher le redimensionnement.

    peut-etre que je dois utiliser le message WM_GETMINMAXINFO.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Les styles ne changent que la possibilité de redimensionner manuellement.
    Je crois que rien n'empêche de le faire programmatiquement, en fait. Sauf peut-être WM_WINDOWPOSCHANGING...

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Points : 177
    Points
    177
    Par défaut
    ca doit etre possible. Il me semble avoir vu des fenetres ayant des bords et ne pouvant pas etre redimensionnees.

    Je vais regarder avec ces 2 messages

    merci

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Une fenêtre possédant le style WS_BORDER a des bords.
    Une fenêtre possédant le style WS_THICKFRAME a des bords plus épais et est redimensionnable.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    j'avais fait une fenêtre non redimensionnable, pour cela à la création de la fenêtre j'avais apellé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    hMain = CreateWindow("MainClass", "NomDeMaFenetre", WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU,
                             CW_USEDEFAULT, CW_USEDEFAULT, 500, 490,
                             NULL, hMenu, hinst, NULL);
    par contre après pour la rendre de nouveau redimensionnable j'ai pas trop d'idée.... à part créer deux fenêtres et les afficher l'une ou l'autre en fonction de si elle doit être redimensionnable ou pas.... perso je mettrais un truc dans ce genre la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    #include <windows.h>
    
    #define BTN_REDIM 1
    
    HINSTANCE hinst;
    HWND hMain, hMainRedim;
    bool RedimFenetre;
    int x, y;
    
    LRESULT CALLBACK MainProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        MSG msg;
        WNDCLASS MainClass;
    
        hinst = hinstance;
    
        MainClass.style = 0;
        MainClass.lpfnWndProc = MainProc;
        MainClass.cbClsExtra = 0;
        MainClass.cbWndExtra = 0;
        MainClass.hInstance = NULL;
        MainClass.hIcon = NULL;
        MainClass.hCursor = LoadCursor(NULL, IDC_ARROW);
        MainClass.hbrBackground = (HBRUSH)1;
        MainClass.lpszMenuName =  NULL;
        MainClass.lpszClassName = "MainClass";
        if(!RegisterClass(&MainClass)) return FALSE;
    
        hMain = CreateWindow("MainClass", "Fenêtre non redimensionnable :(", WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU,
                             50, 50, 270, 200,
                             NULL, NULL, hinst, NULL);
        if (!hMain)  return FALSE;
        
        hMainRedim = CreateWindow("MainClass", "Fenêtre redimensionnable :)", WS_OVERLAPPEDWINDOW,
                             50, 50, 270, 200,
                             NULL, NULL, hinst, NULL);
        if (!hMainRedim)  return FALSE;
    
    	RedimFenetre = false;
    
        ShowWindow(hMain, 1);
        ShowWindow(hMainRedim, 0);
    
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    
    /******************************************************************************/
    
    LRESULT CALLBACK MainProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch(uMsg)
        {
            case WM_CREATE:
                {
                    CreateWindowEx((DWORD)NULL, "BUTTON", "Modifier fenetre",
    									   WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_MULTILINE,
    									   60, 50, 150, 60, hwnd, (HMENU)BTN_REDIM, hinst, NULL);
    				return 0;
                }
    
    		case WM_MOVE:
    			{
    				//on récupère les coordonnées de la zone client dans x et y
    				x = (int)(short) LOWORD(lParam);
    				y = (int)(short) HIWORD(lParam);
    
    				return 0;
    			}
    
            case WM_CLOSE:
    			SendMessage(hwnd, WM_DESTROY, NULL, NULL);
                return 0;
    
            case WM_COMMAND:
    			{
    				//lors du clic sur le bouton
    				if(LOWORD(wParam) == BTN_REDIM)
    				{
    					//si on doit afficher la fenetre NON redimensionnable
    					if(RedimFenetre == true)
    					{
    						/*on replace la fenetre non redimensionnable a la place
    						de la fenêtre redimensionnable*/
    						MoveWindow(hMain, x, y, 270, 200, TRUE);
    						//on masque la fenetre redimensionnable et on affiche l'autre
    						ShowWindow(hMainRedim, 0);
    						ShowWindow(hMain, 1);
    						//fenêtre non redimensionnable donc :
    						RedimFenetre = false;
    					}
    
    					//si on doit afficher la fenetre redimensionnable
    					else
    					{
    						/*on replace la fenetre redimensionnable a la place
    						de la fenêtre non redimensionnable*/
    						MoveWindow(hMainRedim, x, y, 270, 200, TRUE);
    						//on masque la fenetre non redimensionnable et on affiche l'autre
    						ShowWindow(hMainRedim, 1);
    						ShowWindow(hMain, 0);
    						//fenêtre redimensionnable donc :
    						RedimFenetre = true;
    					}
    				}
    			}
                return 0;         
    
            case WM_DESTROY:
                 PostQuitMessage(0);
                 return 0;
    
            default:
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
        }
    }

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    TLDR.

    SetWindowLong() avec le paramètre GWL_STYLE, et tu lui rajoutes ou retire le style WS_THICKFRAME.

Discussions similaires

  1. Fenetre non redimensionnable
    Par jmeuf dans le forum Windows XP
    Réponses: 3
    Dernier message: 18/07/2007, 09h25
  2. Ouvrir une popup non redimensionnable sur clique
    Par magic8392 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/09/2005, 10h44
  3. Fenêtre fille non redimensionnable
    Par Beleim dans le forum Windows
    Réponses: 6
    Dernier message: 08/08/2005, 16h55
  4. [JLabel] Non redimensionné
    Par Charlinecha dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 21/06/2005, 14h14
  5. [Kylix] Fenêtres non redimensionnables
    Par fred78 dans le forum EDI
    Réponses: 2
    Dernier message: 01/12/2002, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo