[C con Clase] Centrar ventana
Steven Davidson
srd4121 en njit.edu
Mie Ago 13 10:01:18 CEST 2008
Hola Roberto Daniel,
Roberto Daniel Virgili wrote:
> Hola a todos
> Alguien me podria enseñar la sintaxis para centrar una ventana...?
>
> hwnd = CreateWindowEx (
> 0,
> szClassName,
> " Mi Ventana",
> WS_OVERLAPPEDWINDOW,
> 100,150,544,375,
> HWND_DESKTOP,
> NULL,
> hThisInstance,
> NULL
> );
>
> Es probable que mas adelante en el curso esté, pero quiero ir
> practicando un poco con código para tomar mas animo.-
>
Supongo que quieres centrar la ventana con respecto a las dimensiones de
la pantalla (o las del escritorio). Tienes algunas soluciones para
llevar a cabo esto:
1. Consulta las dimensiones del dispositivo gráfico (DC). Para esto,
necesitarás obtener un DC e invocar 'GetDeviceCaps()'. Por ejemplo,
int nAnchuraVentana;
int nAlturaVentana;
HDC hdc = GetDC( hwnd );
int nAnchuraPantalla = GetDeviceCaps( hdc, HORZRES );
int nAlturaPantalla = GetDeviceCaps( hdc, VERTRES );
ReleaseDC( hwnd, hdc );
MoveWindow( hwnd,
nAnchuraPantalla/2 - nAnchuraVentana/2,
nAlturaPantalla/2 - nAlturaVentana/2,
nAnchuraVentana, nAlturaVentana,
TRUE );
2. Consigue las dimensiones de la ventana del escritorio. Por ejemplo,
int nAnchuraVentana;
int nAlturaVentana;
RECT rect;
GetWindowRect( GetDesktopWindow(), &rect );
MoveWindow( hwnd,
rect.right/2 - nAnchuraVentana/2,
rect.bottom/2 - nAlturaVentana/2,
nAnchuraVentana, nAlturaVentana,
TRUE );
En el primer caso, necesitas que tu ventana principal ya esté creada
para poder conseguir un DC a partir de ella y así consultar la
información que nos interesa. Como alternativa, puedes combinar la
solución #1 con la #2: consigue el DC del escritorio. Otra alternativa
es "crear" el DC de la pantalla. Esto sería,
HDC hdc = CreateDC( "DISPLAY", NULL, NULL, NULL );
int nAnchuraPantalla = GetDeviceCaps( hdc, HORZRES );
int nAlturaPantalla = GetDeviceCaps( hdc, VERTRES );
DeleteDC( hdc );
...
En el segundo caso, podemos obviar la función 'MoveWindow()' y
simplemente usar estos cálculos directamente en la función
'CreateWindowEx()'. Por ejemplo,
hwnd = CreateWindowEx( ...,
rect.right/2 - nAnchuraVentana/2,
rect.bottom/2 - nAlturaVentana/2,
nAnchuraVentana, nAlturaVentana,
... );
Espero que todo esto te ayude.
Steven
Más información sobre la lista de distribución Cconclase