Newsgroup: it.comp.programmare.win32
Titolo: cambiare risoluzione

Chi mi sa dire in C++ come utilizzare la risoluzione che preferisco (tra le
quali c'è anche la 1024x768 a 16 milioni di colori....)
e come posso impostarla tramite C++ (o anche tramite asm da C++)???
magari a schermo intero???(senza quelle finestracce di windows!!! :-)
tranquilli che scherzo)
mi serve giusto per iniziare con la grafica. grazie a chiunque voglia
rispondere.
#######################################
@@                     @ngyel                                      @@
#######################################
e-mail at 
pro...@mindless.com
or at        
ang...@libero.it

 quali c'è anche la 1024x768 a 16 milioni di colori....)
Prova ChangeDisplaySettings() e ChangeDisplaySettingsEx().
--
Bye! Lorenzo Lutti (
http://www.geocities.com/SiliconValley/Peaks/6258/
)

tranquilli che scherzo)
Cosa intendi per "schermo intero"? Non vuoi vedere la barra delle
applicazioni?
Probabilmente quello che cerchi e' DirectDraw...
Saluti,
    Mardy

esatto....
vorrei ridipingere lo schermo da zero, sempre in ambiente Windows ma in
priorità assoluta rispetto alle altre finestre e senza che addirittura si
veda nulla della finestra corrente (che per l'appunto dovrebbe essere sempre
un'applicazione windows ma non una finestra...
                /\ngyel

...

Allora devi affidarti alle DirectX. La microsoft ha recentemente rilasciato
la versione 7.0. Puoi scaricare il SDK dal loro sito, oppure aspettare un
mesetto perche' venga incluso nel cd di qualche rivista (Dev,
IoProgrammo,...).
Saluti,
    Mardy

Prova qualcosa del genere ...(ho cannibalizzato una mia applicazione DDRAW
FULL SCREEN) ...
Le variabili sono cosě definite:
  HRESULT ddrval;
  DDSURFACEDESC2 ddsd;
  DDSCAPS2 ddscaps;
  DDBLTFX                     ddbltfx;
  LPDIRECTDRAW  lpDDold;
  LPDIRECTDRAW4 lpDD;
  LPDIRECTDRAWSURFACE4 lpDDSPrimary;
  LPDIRECTDRAWSURFACE4 lpDDSBack;
Ho lasciato le chiamate a void InitFail(int errore) : te ne devi scrivere
una simile č la routine di gestione degli errori restituiti dalle fn DDRAW..
....
ddrval = DirectDrawCreate( NULL, &lpDDold, NULL );
if( ddrval != DD_OK )
  {
     InitFail(0);
     return;
  }
  ddrval = lpDDold->SetCooperativeLevel(Application->Handle, DDSCL_EXCLUSIVE
| DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT);
  if( ddrval != DD_OK )
  {
    InitFail(1);
    return;
  }
  ddrval = lpDDold->QueryInterface(IID_IDirectDraw4,(LPVOID *)&lpDD);
  if( ddrval != DD_OK )
  {
    InitFail(2);
    return;
  }
  ddrval = lpDD->SetDisplayMode( 800,600, 8,0,0); // Qui risoluzione e bpp
  if( ddrval != DD_OK )
  {
    InitFail(3);
    return;
  }
  // Create the primary surface with 1 back buffer
  ZeroMemory(&ddsd, sizeof(ddsd));
  ddsd.dwSize = sizeof( ddsd );
  ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
  ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE |
                        DDSCAPS_FLIP |
                        DDSCAPS_COMPLEX;
  ddsd.dwBackBufferCount = 1;
  ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
  if( ddrval != DD_OK )
  {
    InitFail(4);
    return;
  }
  ZeroMemory(&ddscaps, sizeof(ddscaps));
  ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
  ddrval = lpDDSPrimary->GetAttachedSurface(&ddscaps, &lpDDSBack);
  if( ddrval != DD_OK )
  {
    InitFail(5);
    return;
  }
...
Ricordati di includere DDRAW.H versione >=6
il DC su cui scrivere lo ottieni con lpDDSBack->GetDC(...) (ricordati di
rilasciarlo con la corrispondente ReleaseDC...)
cosě scrivi sulla pagina "dietro" poi usa lpDDSPrimary->Flip( NULL, 0 ); per
visualizzare ciň che hai scritto nel backbuffer
Ah , dovresti anche caricare o generare una PALETTE adatta alla tua
applěcazione ...
Chiama per altri chiarimenti....
--
Ciao , Ricardo Antonio Piana
ricard...@tiscalinet.it
http://web.tiscalinet.it/ricardopiana
***