2009-03-05 36 views
10

He creado una ventana con la función CreateWindowEx(), ahora ¿cómo obtengo el ancho y el alto desde esa ventana que he creado? Esto suena muy básico, pero no pude encontrar ninguna respuesta;¿Cómo obtener ancho y alto desde la ventana CreateWindowEx()? C++

Esto es necesario porque la altura de la ventana se crea automáticamente según la forma en que Windows quiera crearla.

lenguaje C o C++

Respuesta

24

Uso GetWindowRect. Reste la derecha desde la izquierda para obtener el ancho y la parte inferior desde la parte superior para obtener la altura.

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

Como nota al margen, si desea que el área del cliente en lugar de toda la ventana. Puede usar GetClientRect. Para obtener más información acerca de la ventana, puede usar GetWindowInfo.

+1

Gracias! eso funcionó a la perfección! –

1

Creo que usted está buscando GetWindowInfo

Ejemplo:

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

Dado que no hay indicación de por qué necesita el tamaño, y que el tamaño puede cambiar si el estilo de ventana se establece para incluir atributos de tamaño variable [y el usuario cambia el tamaño de la ventana usando minimizar/maximizar/restaurar o arrastra un borde de la ventana], su opción más segura es incluir un manejador de mensajes para WM_SIZE y usar los valores del parámetro wparam y lparam para determinar las dimensiones de la ventana. De esta manera, siempre sabrás el tamaño actual. Se llama a WM_SIZE en la secuencia de creación de la ventana de publicación de mensajes.

Cuestiones relacionadas