• Martes 12 de Noviembre de 2024, 21:17

Autor Tema:  capturar resolucion  (Leído 1268 veces)

lair

  • Miembro MUY activo
  • ***
  • Mensajes: 213
  • Nacionalidad: mx
    • Ver Perfil
capturar resolucion
« en: Martes 28 de Julio de 2009, 21:14 »
0
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++
  1. void __fastcall TForm1::FormActivate(TObject *Sender)
  2. {
  3.         int indice=0;
  4.         DEVMODE displaymode;
  5.         displaymode.dmSize=sizeof(DEVMODE);
  6.         while(EnumDisplaySettings(NULL, indice, &displaymode)){
  7.  
  8.                 if(displaymode.dmPelsWidth==1024 && displaymode.dmPelsHeight==768){
  9.                         displaymode.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT;
  10.                         LONG result=ChangeDisplaySettings(&displaymode, CDS_TEST);
  11.                         if(result==DISP_CHANGE_SUCCESSFUL){
  12.                                 ChangeDisplaySettings(&displaymode,0);
  13.                                 break;
  14.                         }
  15.                 }
  16.                 indice++;
  17.         }
  18. }
  19.  

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++
  1. void __fastcall TForm1::FormActivate(TObject *Sender)
  2. {
  3.         int indice=0;
  4.         DEVMODE displaymode;
  5.         displaymode.dmSize=sizeof(DEVMODE);
  6. /*declaro dos variables globales que en teoria almacenan la resolucion actual
  7. que tiene la pantalla
  8. */
  9.         X=displaymode.dmPelsWidth;
  10.         Y=displaymode.dmPelsHeight;
  11.         while(EnumDisplaySettings(NULL, indice, &displaymode)){
  12.  
  13.                 if(displaymode.dmPelsWidth==1024 && displaymode.dmPelsHeight==768){
  14.                         displaymode.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT;
  15.                         LONG result=ChangeDisplaySettings(&displaymode, CDS_TEST);
  16.                         if(result==DISP_CHANGE_SUCCESSFUL){
  17.                                 ChangeDisplaySettings(&displaymode,0);
  18.                                 break;
  19.                         }
  20.                 }
  21.                 indice++;
  22.         }
  23. }
  24.  

y en el evento de close tengo el siguiente codigo en el que intento regresar la resolucion que previamente capture:

Código: C++
  1. int indice=0;
  2.         DEVMODE displaymode;
  3.         displaymode.dmSize=sizeof(DEVMODE);
  4.         while(EnumDisplaySettings(NULL, indice, &displaymode)){
  5.                 if(displaymode.dmPelsWidth==X && displaymode.dmPelsHeight==Y){
  6.                         displaymode.dmFields=DM_PELSWIDTH | DM_PELSHEIGHT;
  7.                         LONG result=ChangeDisplaySettings(&displaymode, CDS_TEST);
  8.                         if(result==DISP_CHANGE_SUCCESSFUL){
  9.                                 ChangeDisplaySettings(&displaymode,0);
  10.                                 break;
  11.                         }
  12.                 }
  13.                 indice++;
  14.         }
  15.  
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

  • Miembro MUY activo
  • ***
  • Mensajes: 213
  • Nacionalidad: mx
    • Ver Perfil
Re: capturar resolucion
« Respuesta #1 en: Miércoles 29 de Julio de 2009, 17:01 »
0
Solucionado  :good:

con esta linea retorna la resolucion en X (El ancho) que tiene actualmente el monitor
Código: C++
  1. GetSystemMetrics(SM_CXSCREEN);
  2.  

espero y algun dia le sea util a alguien mas.  :beer: