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
    L'Opus attire les Prélats

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    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).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  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.
    L'Opus attire les Prélats

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    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...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  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
    L'Opus attire les Prélats

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    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.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  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 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    TLDR.

    SetWindowLong() avec le paramètre GWL_STYLE, et tu lui rajoutes ou retire le style WS_THICKFRAME.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Fenetre non redimensionnable
    Par jmeuf dans le forum Windows XP
    Réponses: 3
    Dernier message: 18/07/2007, 08h25
  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, 09h44
  3. Fenêtre fille non redimensionnable
    Par Beleim dans le forum Windows
    Réponses: 6
    Dernier message: 08/08/2005, 15h55
  4. [JLabel] Non redimensionné
    Par Charlinecha dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 21/06/2005, 13h14
  5. [Kylix] Fenêtres non redimensionnables
    Par fred78 dans le forum EDI
    Réponses: 2
    Dernier message: 01/12/2002, 14h08

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