Skocz do zawartości

Okno na srodku ekranu


Recommended Posts

Napisano

Eh wystarczy pomsylec. Jak tworzysz okno za pomoac CreateWindows to podajesz X,Y,szeroskoc i wysokosc okna - wiec wystarczy pobrac wielskoc ekranu i okno odpwoeidnio ustawic.

Napisano
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ść.

Napisano

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.

Napisano

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
.

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

Jak juz Bialy wyzej napisal sam narazasz sie na smiesznosc.
Ha ha ha

Napisano

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 ;)

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