Skocz do zawartości

Rozmieszczanie kontrolek na oknie


Alpha

Recommended Posts

8) Witam

Czy istnieje jakiś inny (od tego poniżej) sposób na rozmieszczanie kontrolek na oknie? Chodzi mi o coś w stylu właściwości Align z Delphi, czyli o jakąś cudowną funkcję, która sprawi że taka kontrolka będzie np. przylegać do lewej krawędzi okna głównego i się od niego nie oderwie nawet jeżeli zmienię jego rozmiar :D

Do tej pory robiłem to tak, ale i tak nie działa tak jak bym chciał :(

case WM_SIZE:
             MoveWindow(StatusBar,0,0,0,0,true);
             RECT RectA, RectB, RectC, RectD;
             
             GetClientRect(hwnd,&RectA);
             GetClientRect(StatusBar,&RectB);
             MoveWindow(LewyPanel,0,0,150,RectA.bottom-RectB.bottom,true);
             MoveWindow(PrawyPanel,RectA.right-150,0,150,RectA.bottom-RectB.bottom,true);
             
             GetClientRect(hwnd,&RectA);
             GetClientRect(LewyPanel,&RectB);
             GetClientRect(PrawyPanel,&RectC);
             GetClientRect(StatusBar,&RectD);
             MoveWindow(PageControl, RectB.right+10, 0, RectA.right-RectB.right-(RectC.right-RectC.left)-20,RectA.bottom-RectD.bottom,true);
             
             GetClientRect(LewyPanel,&RectA);
             MoveWindow(TreeView1,0,18,RectA.right,100,true);
             break;   
Link do komentarza
Udostępnij na innych stronach

Niestety na Delphi się nie znam i nie wiem za bardzo do czego służy Align. Jednak z Twego opisu wnioskuje iż chodzi Ci o to aby kontrolki zachowywały swoje proporcje (położenie) w stosunku do rozmiaru okna. Jeżeli tak to może spróbuj w ten sposób (przykład z przyciskiem):

double xPrawy; 
double yPrawy;
double xLewy;
double yLewy;

//....
//....

case WM_CREATE:
hButton=CreateWindow("button","Przycisk",WS_CHILD|WS_VISIBLE,(int)xLewy,(int)yLewy,(int)xPrawy,(int)yPrawy,hWnd,(HMENU)100,GetModuleHandle(NULL),NULL);
break;

//....
//....


case WM_SIZE:
        xPrawy=(LOWORD(lParam))*0.225;
        yPrawy=(HIWORD(lParam))/20;
        xLewy=LOWORD(lParam)/40;
        yLewy=HIWORD(lParam)/40;
        MoveWindow(hButton,(int)xLewy,(int)yLewy,(int)xPrawy,(int)yPrawy,TRUE);
        break;

Ok co się tam dzieje. W LOWORD(lParam) masz szerokość okna a w HIWORD(lParam) wysokość.
Przy założeniu że okno główne ma rozmiary 400x400 przycisk będzie się znajdował w pozycji 10x10 bo xLewy=LOWORD(lParam)/40 (co daje 400/40=10) i yLewy=HIWORD(lParam)/40. Będzie miał rozmiar 90x100 bo xPrawy=(LOWORD(lParam))*0.225 (co daje 400*0.225=90) i yPrawy=(HIWORD(lParam))/20 (co daje 400/20=20). Po zmianie rozmiarów okna głównego wyniki tych działań ulegną zmianie a co za tym idzie zmieni się rozmiar i położenie przycisku jednak proporcje względem okna zostaną zachowane. Nie wiem jednak czy o to ci chodziło, jeżeli nie to napisz. Może pomyśli się coś innego.

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...