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

C++/CLI Discussion :

[C++/CLI] Maintenir une form fixe à l'écran


Sujet :

C++/CLI

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Points : 15
    Points
    15
    Par défaut [C++/CLI] Maintenir une form fixe à l'écran
    Bonjour à tous.

    Je travaille avec visual c++2005 et je voudrais savoir comment faire pour qu'on ne puisse pas déplacer une form à l'écran.
    J'ai déjà joué sur les "border styles" qui évite d'agrandir la form, j'ai aussi modifié la propriété "locked" de false à true et inversement sans succès.
    Quelq'un connaît t'il l'astuce ?

    Merci par avance.

    Francis

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    l'astuce la plus simple, c'est d'enlever les bordures

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Bonjour Nico-pyright(c)

    J'avoue que c'est radical et efficace. Mais sur l'aspect design c'est moins "top".

    Je sais qu'en VB (VB6) il y a la propiété "MOVEABLE" qu'on passe de true à false et qui fonctionne quelle que soit la bordure de la fenêtre. Il y a t'il quelque chose de similaire en VC++ (même s'il faut écrire du code) ?

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Windows envoie le message NCHITTEST à la fenetre pour déterminer où se trouve le curseur de la souris. En traitant ce message, l'application peut tromper Windows en lui faisant croire par exemple que le curseur ne se trouve pas sur la barre de titre mais dans la zone client. Ainsi lorsqu'on voudra déplacer la fenetre en cliquant avec la souris sur la barre titre, rien ne se passera car Windows croira que la souris se trouve au dessus de l'air client.
    Pour obtenir ce comportement il suffit d'écrire la procédure suivante (en C#) dans le code de la Form concernée :
    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
     
    protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case 0x84:    //message WM_NCHITTEST
                        base.WndProc(ref m);
                        if (m.Result == (IntPtr)2)        // 2 =  barre de titre
                                m.Result = (IntPtr)0;     //0 = fond de la fenetre
                        break;
                    default:
                        base.WndProc(ref m);
                        break;
                }        
            }
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Bonjour "the badger man"

    Quand tu écrit que c'est du code C# fonctionne t'il aussi en C++ ?

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    bien sur, il faut juste le traduire

    c'est pas trop compliqué à adapter

    sinon, une autre solution serait d'intercepter WM_SYSCOMMAND et SC_MOVE

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Il y a t'il un crack qui pourrait me traduire en VC++ 2005.NET le code en C# ci dessus ?

    Merci par avance

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    qu'est-ce que tu n'arrives pas à traduire ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Bonjour Nico

    En fait lorsque j'écris le code ci-dessous :
    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
     
    protected: override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case 0x84:    //message WM_NCHITTEST
                        base.WndProc(ref m);
                        if (m.Result == (IntPtr)2)        // 2 =  barre de titre
                                m.Result = (IntPtr)0;     //0 = fond de la fenetre
                        break;
                    default:
                        base.WndProc(ref m);
                        break;
                }        
            }
    J'ai ça en erreur à la compilation:
    d:\pinter\projets\r&d\contacts\contacts\Form1.h(193) : error C2144: erreur de syntaxe*: 'void' doit être précédé de ';'
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(193) : error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(193) : error C2061: erreur de syntaxe*: identificateur 'ref'
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(195) : error C2065: 'm'*: identificateur non déclaré
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(195) : error C2228: la partie gauche de '.Msg' doit avoir un class/struct/union
    1> le type est ''unknown-type''
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(198) : error C2065: 'base'*: identificateur non déclaré
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(198) : error C2228: la partie gauche de '.WndProc' doit avoir un class/struct/union
    1> le type est ''unknown-type''
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(198) : error C2065: 'ref'*: identificateur non déclaré
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(198) : error C2146: erreur de syntaxe*: absence de ')' avant l'identificateur 'm'
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(198) : error C2059: erreur de syntaxe*: ')'
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(199) : error C2228: la partie gauche de '.Result' doit avoir un class/struct/union
    1> le type est ''unknown-type''
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(200) : error C2228: la partie gauche de '.Result' doit avoir un class/struct/union
    1> le type est ''unknown-type''
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(203) : error C2228: la partie gauche de '.WndProc' doit avoir un class/struct/union
    1> le type est ''unknown-type''
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(203) : error C2146: erreur de syntaxe*: absence de ')' avant l'identificateur 'm'
    1>d:\pinter\projets\r&d\contacts\contacts\Form1.h(203) : error C2059: erreur de syntaxe*: ')'
    Je ne sais pas si c'est assez clair pour toi

    merci de faire attention aux balises / nico-pyright(c) modérateur visual c++

  10. #10
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par fpinter
    Je ne sais pas si c'est assez clair pour toi
    Ce qui est clair c'est que tu as besoin de réviser la syntaxe du langage C++ (sans vouloir t'offenser).

    * Enlève déjà les ':' après ton 'protected', ça devrait soulager ton compilo.
    * 'ref' c'est du C#, en C++ pour les passage par référence on utilise des pointeurs.
    * Du coup il faut revoir toute la suite, car la syntaxe avec les pointeurs, c'est pas la même.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Bonjour Mose

    Tu ne m'offense pas du tout et tu as tout à fait raison pour la révision. Pour en rajouter encore plus, je ne connais pas du tout le c# et je suis en train d'apprendre (débutant) le visual C++2005.NET.
    Pour ce qui est des ":" après le protect je les ai rajoutés car le "compilo" me les demandes. (alors, comme pour le moment je suis encore un "nul", je les ai mis)
    Je sais que j'ai tout à apprendre, mais parfois un bon exemple de résolution pour un problème donné, aide à aborder les solutions pour d'autres soucis. En ce qui me concerne personnellement j'arrive mieux à comprendre à travers des exemples qu'avec des cours ultra théoriques. (Personne n'est parfait)
    En fait, je voulais juste savoir si quelqu'un pouvait me donner le bout de code en en m'expliquant comment l'implémenter en VC++.NET 2005 qui permettait de maintenir une form (avec un border) fixe à l'écran (indéplaçable avec la souris)

    Encore merci pour l'intérêt que vous m'accordez.

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    bon, la traduction c'est ca
    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
     
    protected: virtual void WndProc(Message %m) override 
    {
            switch (m.Msg)
            {
                    case 0x84:    //message WM_NCHITTEST
                            Form::WndProc(m);
                            if (m.Result == (IntPtr)2)        // 2 =  barre de titre
                                    m.Result = (IntPtr)0;     //0 = fond de la fenetre
                            break;
                    default:
                            Form::WndProc( m );
                            break;
            }        
    }

  13. #13
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par fpinter
    Bonjour Mose

    Tu ne m'offense pas du tout et tu as tout à fait raison pour la révision. Pour en rajouter encore plus, je ne connais pas du tout le c# et je suis en train d'apprendre (débutant) le visual C++2005.NET.
    Pour ce qui est des ":" après le protect je les ai rajoutés car le "compilo" me les demandes. (alors, comme pour le moment je suis encore un "nul", je les ai mis)
    Je sais que j'ai tout à apprendre, mais parfois un bon exemple de résolution pour un problème donné, aide à aborder les solutions pour d'autres soucis. En ce qui me concerne personnellement j'arrive mieux à comprendre à travers des exemples qu'avec des cours ultra théoriques. (Personne n'est parfait)
    En fait, je voulais juste savoir si quelqu'un pouvait me donner le bout de code en en m'expliquant comment l'implémenter en VC++.NET 2005 qui permettait de maintenir une form (avec un border) fixe à l'écran (indéplaçable avec la souris)

    Encore merci pour l'intérêt que vous m'accordez.
    Bon, désolé pour le ':', je ne connais que le C++ "normal" et pas le C++ managé. (visiblement, je me suis planté).
    Pour les passage par référence, effectivement le '%' est mieux que les pointeurs.
    Dsl, je me tais, ça fait trop longtemps que j'ai pas touché à C++

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Mose, Il n'y a pas de problème !!!

    C'est déjà un honneur pour moi quand les gens du forum me répondent, et je te remercie de tes avis et conseils.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 35
    Points : 15
    Points
    15
    Par défaut
    Bonjour Nico-pyright

    Merci pour la solution je savais très bien que pour toi cela était un jeu d'enfant.

    Encore grands bravos et grands mercis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajuster des composants dans une Form en plein écran
    Par jalalnet dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/06/2011, 10h15
  2. Cherche comment mettre une forme en plein écran
    Par lou_delphdev dans le forum Débuter
    Réponses: 10
    Dernier message: 17/04/2011, 23h28
  3. centrer une form sur l'écran
    Par diam's dans le forum Delphi
    Réponses: 10
    Dernier message: 31/07/2006, 15h52
  4. dimension centimètrique d'une forme, d'un écran
    Par Patrice Henrio dans le forum Graphisme
    Réponses: 4
    Dernier message: 23/02/2006, 18h38

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