Premessa: se non sai cos'è un DC e come funziona a grandi linee la GDI di Windows dai un'occhiata qui e poi eventualmente chiedi.
Per quanto riguarda il salvataggio in JPEG o PNG, non mi pare che sia possibile a meno di grandi casini; il supporto per questi formati si limita alla possibilità di dare dati JPEG o PNG in input a StretchDIBits e SetDIBitsToDevice (http://msdn.microsoft.com/en-us/libr...08(VS.85).aspx).codice:int MakeScreenShoot(void) { //Ottiene un device context relativo a tutto lo schermo HDC ScreenDC = GetDC(NULL); //Ottiene le dimensioni dello schermo int ResX = GetSystemMetrics(SM_CXSCREEN); int ResY = GetSystemMetrics(SM_CYSCREEN); //Crea un device context in cui verrà selezionata la DIB su cui verrà copiato il contenuto del desktop HDC DestDC = CreateCompatibleDC(NULL); //Crea una DIB in memoria con la stessa profondità di colori del desktop HBITMAP DestBitmap = CreateCompatibleBitmap(DestDC,ResX,ResY); //Salva la bitmap attualmente selezionata nel DC per ripristinarla in seguito (per poter poi eliminare DestBitmap) e seleziona nel DC DestDC la DIB appena creata HBITMAP OldBitmap = (HBITMAP)SelectObject(MemDesktop,DestBitmap); //Copia il contenuto del DC del desktop nel DC che contiene la DIB DestBitmap, che quindi ora conterrà una copia del contenuto del desktop BitBlt(DestDC,0,0,ResX,ResY,ScreenDC,0,0,SRCCOPY); //Da qui in poi il codice che hai scritto diventa casinaro e non mi pare molto corretto; rimando a qui per informazioni su come salvare un HBITMAP //... //Deseleziona dal DC DestDC la DIB, selezionando la vecchia bitmap che in esso era prima contenuta SelectObject(DestDC,OldBitmap); //Ora che la DIB è deselezionata la si può cancellare DeleteObject(DestBitmap); //Elimina il DC di destinazione DeleteDC(DestDC); //Rilascia il DC relativo allo schermo ReleaseDC(NULL,ScreenDC); return 0; }

Rispondi quotando