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 :

[WIN32][C++] Probleme de resize


Sujet :

Windows

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Points : 28
    Points
    28
    Par défaut [WIN32][C++] Probleme de resize
    Bonjour,

    Je refais une fenetre moi meme pour virer tt les styles window et donc du coup je dois refaire le resize.

    Mon resize marche quand ma fenetre est en 0,0 cest a dire en haut à gauche mais des que je la decolle de quelques pixel le resize marche beaucoup moins bien, la fenetre ne suis plus mon curseur ...

    Quelqu'un aurait il une piste ou une solution ?

    Edit : J'ai trouvé cest la movewindow qui est different avec les windows child.

  2. #2
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    J'ai un peu galéré pour faire ça, moi aussi, et j'ai trouvé une solution qui marche très bien :

    Création de la fenetre : WS_EX_TOOLWINDOW + WS_POPUP = pas de titre, pas de bordure, rien, quoi !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    m_HWND = CreateWindowEx(WS_EX_TOOLWINDOW,"maWndClass","monTitre",WS_POPUP,m_positionX,m_positionY,m_surface.largeur,m_surface.hauteur,NULL,NULL,(HINSTANCE) hInstance,(void *)this);
    ShowWindow(m_HWND, SW_SHOW);
    Ensuite, dans le traitement du message WM_NCHITTEST :

    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
      case WM_NCHITTEST:
    	coords.x = GET_X_LPARAM(lParam);
    	coords.y = GET_Y_LPARAM(lParam);
    	ScreenToClient(hwnd,&coords);
    
            if (coords est dans une zone qui peut deplacer la fenetre)
                    return HTCAPTION;
    
            if (coords est dans un coin pour redimensionner la fenetre)
                    return HTTOPLEFT;
                    ou
                    return HTTOPRIGHT;
                    ou
                    return HTBOTTOMLEFT;
                    ou
                    return HTBOTTOMRIGHT;
    
            if (coords est dans une bordure pour redimensionner la fenetre)
                    return HTTOP;
                    ou
                    return HTBOTTOM;
                    ou
                    return HTLEFT;
                    ou
                    return HTRIGHT;
    
            if (coords est dans une zone "normale" de la fenetre)
                    return HTCLIENT;
    
            // Sinon on n'est nul part
            return HTNOWHERE;

    Et c'est tout !

    Pas besoin de toucher à d'autres message, pas d'appel de fonction, windows gère la fenetre tout seul comme un grand.

    La bordure, le titre, les boutons (fermer, reduire...) à toi de les dessiner où tu veux comme tu veux.

    Les tests, à toi de les faire en fonction de ta fenetre (qui n'est pas forcement carrée...)

    Quand la fenetre a été deplacée, tu recois un WM_MOVE avec les nouvelles coordonnées.

    Quand la fenetre a été "re-sizée", tu recois un WM_SIZE avec les nouvelles tailles.


    EDIT :
    La doc :
    http://msdn2.microsoft.com/EN-US/library/ms645618.aspx
    http://msdn2.microsoft.com/en-us/library/ms632631.aspx
    http://msdn2.microsoft.com/en-us/library/ms632646.aspx

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Merci bien, je garde ton idée de coté car en faite la ca marche nikel et j'ai pas envie de refaire une partie de mon code.
    Car j'ai un bouton en bas a droite qui permet de resize, et je recalcule tout par rapport au WM_MOUSEMOVE de mon bouton et je modifie le reste par rapport a ca. Un peu galere mais ca marche.

    Mon probleme maintenant c'est d'arreter le clignotement de mes bitmap qui sont sur mes boutons

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

Discussions similaires

  1. [PERL] Win32::Ole 'probleme'
    Par Diabolikjo dans le forum Modules
    Réponses: 6
    Dernier message: 03/10/2008, 14h25
  2. [Win32][2005perso]Probleme d'affectation sur variable Typée
    Par Qwazerty dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/08/2007, 23h55
  3. Probleme de resizing pour mon JFrame
    Par CaptnB dans le forum NetBeans
    Réponses: 2
    Dernier message: 21/11/2006, 17h36
  4. [Win32] [D7] Probleme install BE
    Par JCDC dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/08/2006, 14h44
  5. Probleme de Resize "proportionnel" d'une fenetre
    Par biloute2121 dans le forum MFC
    Réponses: 3
    Dernier message: 24/11/2005, 10h20

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