2009-03-05 8 views
10

Zrobiłem okno z funkcją CreateWindowEx(), teraz jak mogę uzyskać szerokość i wysokość z tego okna, które stworzyłem? Brzmi to bardzo podstawowe zadanie, ale po prostu nie mogłem znaleźć żadnej odpowiedzi;Jak uzyskać szerokość i wysokość z okna CreateWindowEx()? C++

Jest to konieczne, ponieważ wysokość okna jest tworzona automatycznie w zależności od tego, jak system Windows chce go utworzyć.

języka C lub C++

Odpowiedz

24

Zastosowanie GetWindowRect. Odejmij prawo od lewej, aby uzyskać szerokość i dół od góry, aby uzyskać wysokość.

RECT rect; 
if(GetWindowRect(hwnd, &rect)) 
{ 
    int width = rect.right - rect.left; 
    int height = rect.bottom - rect.top; 
} 

Jako uwaga dodatkowa, jeśli chcesz obszar klienta zamiast całego okna. Możesz użyć GetClientRect. Aby uzyskać inne informacje o oknie, możesz użyć GetWindowInfo.

+1

Dzięki! to działało idealnie! –

1

wierzę szukasz GetWindowInfo

Przykład:

HWND window = ::CreateWindowEx(...); 
WINDOWINFO info; 
if (::GetWindowInfo(window, &info)) { 
    ... 
} 
0

Podano, że nie ma wskazania, dlaczego potrzebny jest rozmiar, i że rozmiar może się zmienić, jeśli styl okna jest ustawiony na uwzględnianie atrybutów skalowalnych [i użytkownik zmienia rozmiar okna za pomocą zminimalizowania/maksymalizacji/przywrócenia lub przeciągnięcia krawędzi okna], twoim najbezpieczniejszym wyborem jest dołączenie obsługi komunikatów dla WM_SIZE i użycie wartości parametrów wparam i lparam do określenia wymiarów okna. W ten sposób zawsze będziesz znać bieżący rozmiar. WM_SIZE wywoływane jest w sekwencji tworzenia okna wiadomości.