Skocz do zawartości

Okno na srodku ekranu


Trust

Recommended Posts

RUF3K napisał:
ale mi to rozwiozanie , na kazdym innym monitorze (z innom rozdzielczosciom oczywiscie)bedzie gdzie indziej !!!!!!!!!!!!!!!!!! hahaha
help me please!

Najwyraźniej nie zrozumiałeś propozycji Piasia (prawdopodobnie dlatego, że nie została napisana w l33t). Na przyszłość dokładniej czytaj posty, bo przez wyśmiewanie dobrych podpowiedzi sam narażasz się na śmieszność.

Link do komentarza
Udostępnij na innych stronach

Najlatwiej to pobrac szerokosc i wysokosc ekranu aby na poczatku wyznaczyc jego srodek. Zeby to osiagnac nalezy pobrana wysokosc i szerokosc podzielic przez 2 (ALE UWAGA!!!) - przez dwa bez reszty, bo liczby zmiennoprzecinkowe nas nie interesuja. Samo pobranie tych parametrow mozemy zrealizowac przez odpwiednie funkcje api, ktora nazwano: GetSystemMetrics. Dodatkowo w nich trzeba wpakowac odpowiednie stale, tj:
SM_CXSCREEN : jak latwo sie domyslic ta stala pozwoli zwrocic szerokosc
SM_CYSCREEN natomiast ta, nie szerokosc jak niektorzy mogli by sie domyslic, ale (i tu niespodzianka) wysokosc.
Po tak skomplikowanej operacji mamy wyznaczony srodek ekranu. Nastepnie pozostaje nam wysokosc i szerokosc samego okna podzielic na pol (i tu niektorzy bystrzaki domysla sie, ze chodzi o dzielenie bez reszty).
No reszta to juz z gorki. Teraz dla polozenia x(x - to zmienna reprezentujaca polozenie horyzontalne) wystarczy od srodka odjac powstala zmienna. I tak samo zachodzi dla polozenia y (y - zmienna reprezentatywna dla polozenia wysokosci). Adam Słodowy.

Link do komentarza
Udostępnij na innych stronach

W message loop:

case WM_SHOWWINDOW:   CenterDialog(hDlg,GetParent(hDlg)); break;

no i implementacja:

void CenterDialog(HWND hDlg, HWND Parent)
{
    RECT ParentRect,DlgRect;

    GetWindowRect(Parent,&ParentRect);
    GetWindowRect(hDlg,&DlgRect);
    SetWindowPos(hDlg,HWND_TOP,
        ParentRect.left+(ParentRect.right-ParentRect.left-(DlgRect.right-DlgRect.left))/2,
        ParentRect.top+(ParentRect.bottom-ParentRect.top-(DlgRect.bottom-DlgRect.top))/2,
        0,0,SWP_NOZORDER | SWP_NOSIZE );
};

Jak chcesz na srodku ekranu to daj jako parent desktop. I wsjo
.

Link do komentarza
Udostępnij na innych stronach

Bez dialogów, nic prostszego:

int cxChar = LOWORD (GetDialogBaseUnits());
int cyChar = HIWORD (GetDialogBaseUnits());

hwnd = CreateWindow(szAppName, szAppName, WS_OVERLAPPEDWINDOW,(GetSystemMetrics(SM_CXFULLSCREEN) - 50 * cxChar)/2,(GetSystemMetrics(SM_CYFULLSCREEN) - 20 * cyChar)/2,
65 * cxChar, 27 * cyChar,NULL, NULL, hInstance, NULL);

Mam nadzieję że to choć trochę jest czytelne ;)

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...