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):
Et l�,
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); } } }
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?
Partager