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

MFC Discussion :

[MFC] OnResize et Controles


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut [MFC] OnResize et Controles
    Bonjour � tous,

    voil�, j'ai une boite de dialog (qui h�rite de CDialog) qui contient quelques controles (boutons, edits etc.) Et je souhaite organiser ces controles de fa�on dynamique, en fonction de la taille la boite de dialogue.

    Pour ce faire, j'aimerais placer mon code dans le OnSize() de ma dialog. Le principe est le suivant: j'ai un controle qui ne bouge pas (que j'appelerais control1), et la position des autres (control2, control3, etc.) doit �tre calcul�e en fonction de celui-l�. J'ai donc tent� de faire �a (le code suivant est cens� positionner le control2 en dessous de control1):
    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
    void CBEMainDialog::OnSize(UINT nType, int cx, int cy) 
    {
             if (::IsWindow(control1.m_hWnd) && ::IsWindow(control2.m_hWnd))
            {
                // le récupère la position du control1 (mon "repère")
                LPRECT lpRect1;
                control1.GetClientRect(lpRect1);
     
                // je récupère la position du control2 (j'en ai besoin car je souhaite conserver sa hauteur)
                LPRECT lpRect2;
                control2.GetClientRect(lpRect2);
     
                //je positionne contol2 en dessous de control1
                control2.SetWindowPos(  NULL, 
                                        lpRect1->left, 
                                        lpRect1->bottom,
                                        lpRect1->right - lpRect1->left,
                                        lpRect2->bottom - lpRect2->top,
                                        SWP_SHOWWINDOW);
            }
        }
    }
    Et l�,
    1/ �a plante direct lorsque la fen�tre s'affiche, � la ligne control2.GetClientRect(lpRect2); Ce qui est �trange c'est que le GetClientRect pr�c�dent (sur l'autre controle) est pass�.
    2/ le contenu de lpRect1 est totalement erron�.

    Visiblement, le OnSize est appel� alors que les controles ne sont m�me pas encore d�finis ou quelque chose comme �a. Pourquoi les m-hWnd respectifs de mes controles ne sont pas = � 0x0000000 et que �a plante quand m�me? Comment faire pour contourner cela?

  2. #2
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut ,
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    CRect rect; 
    GetClientRect(&rect);
    LPRECT c'est un pointeur tu lui transmets un pointeur pas l'adresse d'un objet ...
    bon ensuite tu as un exemple de layout dans la faq et
    voir ce post parce que ta m�thode n'est pas correcte sur les coordonn�es:
    http://c.developpez.com/faq/vc/?page...ontrolInWindow

  3. #3
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut
    ok

    cependant, il se passe quelque chose d'�trange, voici mon nouveau code:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CRect rect1;
                control1.GetClientRect(&rect1);
     
                control2.SetWindowPos(    NULL, 
                                            rect1.left, 
                                            rect1.bottom + 10,
                                            rect1.Width(),
                                            m_iHeightControl1,
                                            SWP_SHOWWINDOW);
    Et en fait, mes 2 controles ne sont pas vraiment align�s. control2 est quelques pixels plus � gauche que control1 et il est un tout petit peu plus court en largeur. Comment se fais-ce? Est-ce une histoire de "window edge"?

  4. #4
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    possible, de plus tu utilises GetClientRect ,alors que c'est GetWindowRect qu'il faut utiliser et faire le ScreenToClient comme dans la faq..

  5. #5
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 295
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 295
    Billets dans le blog
    2
    Par d�faut
    Aarrrgh, j'avais pas vu que c'�tait GetWindowRect � la place de GetClientRect, du coup je ne voyais pas l'utilit� du ScreenToClient

    Si vous me cherchez, je suis en train de faire 100 pompes et je cherche mes cours de c++...


    encore

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 6
    Dernier message: 02/06/2006, 14h47
  2. [MFC] updater un control sans les updater tous
    Par zzorglub dans le forum MFC
    R�ponses: 4
    Dernier message: 14/02/2006, 17h06
  3. R�ponses: 3
    Dernier message: 22/12/2005, 10h43
  4. [MFC] redimensionner un controle
    Par benahpets dans le forum MFC
    R�ponses: 5
    Dernier message: 01/09/2005, 17h06
  5. [MFC]gestion du controle MaskedEdit
    Par dj_kyl dans le forum MFC
    R�ponses: 2
    Dernier message: 27/11/2003, 19h58

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