home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 October / Chip_2001-10_cd1.bin / zkuste / delphi / nastroje / d23456 / NSIS.EXE / Source / Splash / splash.c next >
C/C++ Source or Header  |  2001-05-19  |  3KB  |  127 lines

  1. #include <windows.h>
  2.  
  3. HBITMAP g_hbm;
  4. int sleep_val;
  5. int g_rv;
  6.  
  7. static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  8. {
  9.   if (uMsg == WM_CREATE)
  10.   {
  11.        BITMAP bm;
  12.     RECT vp;
  13.     GetObject(g_hbm, sizeof(bm), (LPSTR)&bm);
  14.     SystemParametersInfo(SPI_GETWORKAREA, 0, &vp, 0);
  15.     SetWindowLong(hwnd,GWL_STYLE,0);
  16.     SetWindowPos(hwnd,NULL,
  17.       vp.left+(vp.right-vp.left-bm.bmWidth)/2,
  18.       vp.top+(vp.bottom-vp.top-bm.bmHeight)/2,
  19.       bm.bmWidth,bm.bmHeight,
  20.       SWP_NOZORDER);
  21.     ShowWindow(hwnd,SW_SHOW);
  22.     SetTimer(hwnd,1,sleep_val,NULL);
  23.     return 0;
  24.   }
  25.   if (uMsg == WM_PAINT)
  26.   {
  27.     PAINTSTRUCT ps;
  28.     RECT r;
  29.     HDC curdc=BeginPaint(hwnd,&ps);
  30.     HDC hdc=CreateCompatibleDC(curdc);
  31.     HBITMAP oldbm;
  32.     GetClientRect(hwnd,&r);
  33.     oldbm=(HBITMAP)SelectObject(hdc,g_hbm);
  34.     BitBlt(curdc,r.left,r.top,r.right-r.left,r.bottom-r.top,hdc,0,0,SRCCOPY);
  35.     SelectObject(hdc,oldbm);
  36.     DeleteDC(hdc);
  37.     EndPaint(hwnd,&ps);
  38.     return 0;
  39.   }
  40.   if (uMsg == WM_CLOSE) return 0;
  41.   if (uMsg == WM_DESTROY)
  42.   {
  43.     PostQuitMessage(0);
  44.     return 0;
  45.   }
  46.   if (uMsg == WM_TIMER || uMsg == WM_LBUTTONDOWN)
  47.   {
  48.     g_rv=(uMsg == WM_LBUTTONDOWN);
  49.     DestroyWindow(hwnd);
  50.   }
  51.   return DefWindowProc(hwnd,uMsg,wParam,lParam);
  52. }
  53.  
  54. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdParam, int nCmdShow)
  55. {
  56.   char fn[MAX_PATH];
  57.   int hwndParent;
  58.   char *o=fn;
  59.  
  60.   hInstance=GetModuleHandle(NULL);
  61.   lpszCmdParam=GetCommandLine();
  62.   if (*lpszCmdParam == '\"')
  63.   {
  64.     do
  65.     {
  66.       lpszCmdParam++; 
  67.     } while (*lpszCmdParam != '\"' && *lpszCmdParam);
  68.     if (*lpszCmdParam) lpszCmdParam++;
  69.   }
  70.   else 
  71.   {
  72.     do
  73.     {
  74.       lpszCmdParam++; 
  75.     } while (*lpszCmdParam != ' ' && *lpszCmdParam);
  76.   }
  77.   while (*lpszCmdParam == ' ') lpszCmdParam++;
  78.   sleep_val=0;
  79.   while (*lpszCmdParam >= '0' && *lpszCmdParam <= '9')
  80.   {
  81.     sleep_val*=10;
  82.     sleep_val += *lpszCmdParam++-'0';
  83.   }
  84.  
  85.   while (*lpszCmdParam == ' ') lpszCmdParam++;
  86.   hwndParent=0;
  87.   while (*lpszCmdParam >= '0' && *lpszCmdParam <= '9')
  88.   {
  89.     hwndParent*=10;
  90.     hwndParent += *lpszCmdParam++-'0';
  91.   }
  92.  
  93.   while (*lpszCmdParam == ' ') lpszCmdParam++;
  94.   while (*lpszCmdParam)
  95.   {
  96.     *o++=*lpszCmdParam++;
  97.   }
  98.   *o=0;
  99.  
  100.   if (fn[0] && sleep_val>0)
  101.   {
  102.     MSG msg;
  103.     char classname[4]="_sp";
  104.     static WNDCLASS wc;
  105.       wc.lpfnWndProc = WndProc;
  106.       wc.hInstance = hInstance;
  107.       wc.hCursor = LoadCursor(NULL,IDC_ARROW);
  108.       wc.lpszClassName = classname;
  109.     if (RegisterClass(&wc)) 
  110.     {
  111.       g_hbm=LoadImage(NULL,fn,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
  112.       if (g_hbm) 
  113.       {
  114.         CreateWindow(classname,classname,
  115.           0,0,0,0,0,(HWND)hwndParent,NULL,hInstance,NULL);
  116.  
  117.         while (GetMessage(&msg,NULL,0,0))
  118.         {
  119.           DispatchMessage(&msg);
  120.         }
  121.  
  122.         DeleteObject(g_hbm);
  123.       }
  124.     }
  125.   }
  126.   ExitProcess(g_rv);
  127. }