Programación General > C++ Builder

 capturar resolucion

(1/1)

lair:
Hola a todos.

en esta ocacion tengo el siguiente problema, necesito que mi aplicacion al ejecutarse cambie la resolucion de la pantalla para que se ajuste a las dimenciones en la que la realice, esto lo consigo con el siguiente codigo:


--- Código: C++ ---void __fastcall TForm1::FormActivate(TObject *Sender){        int indice=0;        DEVMODE displaymode;        displaymode.dmSize=sizeof(DEVMODE);        while(EnumDisplaySettings(NULL, indice, &displaymode)){                 if(displaymode.dmPelsWidth==1024 && displaymode.dmPelsHeight==768){                        displaymode.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT;                        LONG result=ChangeDisplaySettings(&displaymode, CDS_TEST);                        if(result==DISP_CHANGE_SUCCESSFUL){                                ChangeDisplaySettings(&displaymode,0);                                break;                        }                }                indice++;        }} 
y lo que quiero es que al cerra la aplicacion regrese la resolicion a la que tenia originalmente, el problema es que no se como hacer para tomar presisamente ese dato, eh intentado capturarlo de la siguiente manera:


--- Código: C++ ---void __fastcall TForm1::FormActivate(TObject *Sender){        int indice=0;        DEVMODE displaymode;        displaymode.dmSize=sizeof(DEVMODE);/*declaro dos variables globales que en teoria almacenan la resolucion actualque tiene la pantalla*/        X=displaymode.dmPelsWidth;        Y=displaymode.dmPelsHeight;        while(EnumDisplaySettings(NULL, indice, &displaymode)){                 if(displaymode.dmPelsWidth==1024 && displaymode.dmPelsHeight==768){                        displaymode.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT;                        LONG result=ChangeDisplaySettings(&displaymode, CDS_TEST);                        if(result==DISP_CHANGE_SUCCESSFUL){                                ChangeDisplaySettings(&displaymode,0);                                break;                        }                }                indice++;        }} 
y en el evento de close tengo el siguiente codigo en el que intento regresar la resolucion que previamente capture:


--- Código: C++ ---int indice=0;        DEVMODE displaymode;        displaymode.dmSize=sizeof(DEVMODE);        while(EnumDisplaySettings(NULL, indice, &displaymode)){                if(displaymode.dmPelsWidth==X && displaymode.dmPelsHeight==Y){                        displaymode.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT;                        LONG result=ChangeDisplaySettings(&displaymode, CDS_TEST);                        if(result==DISP_CHANGE_SUCCESSFUL){                                ChangeDisplaySettings(&displaymode,0);                                break;                        }                }                indice++;        } el problema es que en las variables X y Y yo esperaba que se almacenara algo como 1024 y 768,pero se almacena un numero muy grando algo como 172859635, alguien sabe como capturar la resolucion actual o que es lo que realmente me representa ese numero que me retorna??

de antemano muchas gracias por su tiempo y ayuda.

lair:
Solucionado  :good:

con esta linea retorna la resolucion en X (El ancho) que tiene actualmente el monitor

--- Código: C++ ---GetSystemMetrics(SM_CXSCREEN); 
espero y algun dia le sea util a alguien mas.  :beer:

Navegación

[0] Índice de Mensajes

Ir a la versión completa