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?