Newsgroup: it.comp.programmare.win32
Titolo: Splash screen

Salve,
 avrei voglia di inserire uno spash screen all'avvio delle mie applicazioni
(applicazioni, nome grosso per quelle cosette che faccio io :/) e vorrei
un consiglio.
Avrei pensato ad un Dialogo non modale con sopra appiccicata una
bella bitmap che sarebbe lo splash, ma purtroppo la bitmap (static) non
vuole coprirmi tutto il dialogo, lasciando un bordino grigio che e' brutto
da vedere.
Avevo pensato ad una window, ma mi sembra un lavoro troppo lungo
per realizzare "solo" uno splash.
Mi date qualche consiglio?
Grazie
Killer

Killer ha scritto:

SI... Sei veramente molto pigro... hai provato a creare la Dialog Specificando Nessun Bordo
e bordo leggero? In alternativa puoi modificare il colore di sfondo della classe della
Dialog (ok... non č molto bello).... o intercettare WM_CTLCOLORDLG....
Comunque gestire tu una window con una Bitmap non č un lavoro ne lungo ne difficile...
--
+----------- PMSoftware -------------------------+
# Tutorial:  
http://pmsoftware.tripod.com
        #
# Download:  
http://digilander.iol.it/pmsoftware
 #
°e prossimamente un tutorial su come fare la Firma....

 Comunque gestire tu una window con una Bitmap non è un lavoro ne lungo ne difficile...
Ok, faccio una windows :D
Ma se poi lo splash lo metto in una ModalDialog, devo fare lo stesso il loop
dei messaggi dell Windows/Splash o la fa' gia' la Dialog per conto suo?
Bow-wow
Killer


wrote:

Io in una mia applicazione ho creato una Windows Class solo per aprire
la finestra dello splash screen (senza bordi e di dimensioni uguali
alla bitmap), nel messaggio WM_CREATE chiamo una funzione per
disegnare la bitmap e attivo un timer. Al primo messaggio WM_TIMER
distruggo timer & finestra. 
Ciao
Stefano "HappyMan"
IABLA Sezione Lago Maggiore (NO)
Foto salseri/e & I.A.B.L.A. Ring
http://happyman.freeweb.org

Eccoti un file header per quello:
// ViewSplash.h
#ifndef __WINDOWS_H
#define __WINDOWS_H
#endif
//extern
extern LPCTSTR imm;
//Window Procedure for MSG
LRESULT CALLBACK StartupProc(HWND, UINT, WPARAM, LPARAM);
//Window Creation
int CreaStartup(char Nome[], HWND hParent, int x, int y, int w, int h){
     HWND hWnd;
     MSG msg;
     WNDCLASS wc;
     char stClName[] = "Start";
     wc.style = CS_DBLCLKS;
     wc.lpfnWndProc = StartupProc;
     wc.cbClsExtra = 0;
     wc.cbWndExtra = 0;
     wc.hInstance = (HINSTANCE) GetWindowLong(hParent, GWL_HINSTANCE);
     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
     wc.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
     wc.lpszMenuName = NULL;
     wc.lpszClassName = stClName;
     if(!RegisterClass(&wc)) return 0;
     hWnd = CreateWindow(stClName, Nome, WS_POPUP | WS_VISIBLE |
WS_DLGFRAME,
                         x, y, w, h, NULL, NULL,
                         (HINSTANCE) GetWindowLong(hParent, GWL_HINSTANCE),
                         NULL);
     ShowWindow(hWnd, SW_SHOWNORMAL);
     while(GetMessage(&msg, NULL, 0, 0)){
          TranslateMessage(&msg);
          DispatchMessage(&msg);
     }
     return msg.wParam;
}
LRESULT CALLBACK StartupProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM
lParam)
{
        PAINTSTRUCT ps;
        HDC     hDC, hMemDC;
        HBITMAP hBitmap;
        BITMAP  bm;
        RECT    rect;
        int     x,y;
        switch (message){
               case WM_PAINT:
                    hBitmap = (HBITMAP) LoadImage( NULL, imm,
                                IMAGE_BITMAP,
                                0, 0,
                                LR_CREATEDIBSECTION |
                                LR_DEFAULTCOLOR |
                                LR_DEFAULTSIZE |
                                LR_LOADFROMFILE );
                    GetObject( hBitmap, sizeof( BITMAP ), &bm );
                    hDC = BeginPaint( hwnd, &ps );
                    hMemDC = CreateCompatibleDC( hDC );
                    SelectObject( hMemDC, hBitmap );
                    GetClientRect( hwnd, &rect );
                    for ( y=0; y < rect.bottom; y += bm.bmHeight )
                        for ( x=0; x < rect.right; x += bm.bmWidth ){
                             BitBlt( hDC, x, y, bm.bmWidth,
                             bm.bmHeight,
                             hMemDC,
                             0, 0,
                             SRCCOPY );
                        }
                    DeleteDC( hMemDC );
                    ReleaseDC( hwnd, hDC );
                    DeleteObject( hBitmap );
                    EndPaint( hwnd, &ps );
               break;
               case WM_CREATE:
                    SetTimer(hwnd, 12345, 3000, 0);
               break;
               case WM_TIMER:
                    KillTimer(hwnd, 12345);
                    ShowWindow(hwnd, SW_HIDE);
                    PostQuitMessage(0);
               case WM_DESTROY:
                    PostQuitMessage(0);
               break;
               default:
                    return DefWindowProc(hwnd, message, wParam, lParam);
        }
        return 0;
}
//End ViewSplash
Per usarlo basta che tu nel sorgente scriva:
#include "ViewSplash.h"
LPCTSTR imm = "C:\\Documenti\\MySplash2.bmp";
//codice
//master WindowProcedure
       case WM_CREATE:
            CreaStartup("MySplash", hwnd, 250, 200, 300, 100);
            //...
        //...
//...
Provalo e mi saprai dire. Io l'ho sempre usato e mi è sempre funzionato.

 Killer
