about.c
上传用户:xmgzy123
上传日期:2007-01-07
资源大小:373k
文件大小:7k
源码类别:

SCSI/ASPI

开发平台:

WINDOWS

  1. /*
  2.  * about.c - Copyright (C) 1999,2000 Jay A. Key
  3.  *
  4.  * "About" dialog for CD-DA X-Tractor
  5.  *
  6.  **********************************************************************
  7.  *
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2 of the License, or
  11.  * (at your option) any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; if not, write to the Free Software
  20.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21.  *
  22.  */
  23. #include <windows.h>
  24. #include "resources.h"
  25. #include "globals.h"
  26. #include "bladedll.h"
  27. LRESULT CALLBACK BmpPanelProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  28. void PaintBmpPanel( HWND hWnd );
  29. LPWORD lpwAlign( LPWORD lpIn );
  30. void SetAboutDlgText( HWND hWnd );
  31. BOOL CALLBACK AboutDialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
  32. {
  33.   lParam = lParam;
  34.   switch( uMsg )
  35.     {
  36.     case WM_INITDIALOG:
  37.       CreateWindowEx( WS_EX_CLIENTEDGE, szBmpPanel, "",
  38.       WS_CHILD | WS_VISIBLE, 8, 8, 124, 164,
  39.       hWnd, (HMENU)ID_BMPPANEL, ghInstance, "AboutBmp" );
  40.       SetAboutDlgText( hWnd );
  41.       break;
  42.     case WM_COMMAND:
  43.       switch( LOWORD(wParam) )
  44. {
  45. case IDCANCEL:
  46. case IDBN_ABOUTOK:
  47.   EndDialog( hWnd, 0 );
  48.   break;
  49. }
  50.       break;
  51.     default:
  52.       return FALSE;
  53.     }
  54.   return TRUE;
  55. }
  56. void InitBmpPanel( void )
  57. {
  58.   WNDCLASSEX wc;
  59.   if ( !atomBmpPanel )
  60.     {
  61.       ZeroMemory( &wc, sizeof(wc) );
  62.       wc.cbSize      = sizeof(wc);
  63.       wc.style       = CS_HREDRAW | CS_VREDRAW;
  64.       wc.lpfnWndProc = BmpPanelProc;
  65.       wc.hInstance   = ghInstance;
  66.       wc.hCursor     = LoadCursor( NULL, IDC_ARROW );
  67.       wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  68.       wc.lpszClassName = szBmpPanel;
  69.       atomBmpPanel = RegisterClassEx( &wc );
  70.     }
  71. }
  72. LRESULT CALLBACK BmpPanelProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
  73. {
  74.   HBITMAP hBmp;
  75.   LPBYTE lpb;
  76.   switch( uMsg )
  77.     {
  78.     case WM_CREATE:
  79.       lpb = (LPBYTE)((LPCREATESTRUCT)lParam)->lpCreateParams;
  80.       hBmp = LoadBitmap( ghInstance, (char *)lpb );
  81.       if ( hBmp )
  82. {
  83.   SetWindowLong( hWnd, GWL_USERDATA, (LONG)hBmp );
  84. }
  85.       break;
  86.     case WM_PAINT:
  87.       PaintBmpPanel( hWnd );
  88.       break;
  89.     case WM_DESTROY:
  90.       return DefWindowProc( hWnd, uMsg, wParam, lParam );
  91.     }
  92.   return DefWindowProc( hWnd, uMsg, wParam, lParam );
  93. }
  94. void PaintBmpPanel( HWND hWnd )
  95. {
  96.   HDC hDC, hCompDC;
  97.   HBITMAP hBmp;
  98.   PAINTSTRUCT ps;
  99.   RECT rc;
  100.   hDC = BeginPaint( hWnd, &ps );
  101.   hBmp = (HBITMAP)GetWindowLong( hWnd, GWL_USERDATA );
  102.   if ( hBmp )
  103.     {
  104.       hCompDC = CreateCompatibleDC( hDC );
  105.       SelectObject( hCompDC, hBmp );
  106.       GetClientRect( hWnd, &rc );
  107.       BitBlt( hDC, 0, 0, rc.right, rc.bottom, hCompDC, 0, 0, SRCCOPY );
  108.       DeleteDC( hCompDC );
  109.     }
  110.   EndPaint( hWnd, &ps );
  111. }
  112. /*
  113.  * Create dialog that is 320x200 pixels, centered.
  114.  */
  115. void DynamicAboutDialog( HWND hParent )
  116. {
  117.   LPDLGTEMPLATE lpDlg;
  118.   LPDLGITEMTEMPLATE lpDlgItem;
  119.   LPBYTE lpMem;
  120.   LONG dlgbase;
  121.   int n;
  122.   dlgbase = GetDialogBaseUnits();
  123.   lpMem = GlobalAlloc( GPTR, 2048 );
  124.   lpDlg = (LPDLGTEMPLATE)lpMem;
  125.   lpDlg->style     = DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_CHILD | WS_POPUP | WS_OVERLAPPED | DS_SETFOREGROUND;
  126.   lpDlg->cdit      = 2;
  127.   lpDlg->x         = 0;
  128.   lpDlg->y         = 0;
  129.   lpDlg->cx        = 320 * 4 / LOWORD( dlgbase );
  130.   lpDlg->cy        = 210 * 8 / HIWORD( dlgbase );
  131.   lpMem += sizeof(DLGTEMPLATE);
  132.   lpMem += 4;   // dialog has no menu and uses the default class
  133.   n = MultiByteToWideChar( CP_ACP, 0, "About CD-DA X-Tractor", -1, (LPWSTR)lpMem, 256 );
  134.   lpMem += (n * 2);
  135.   lpMem = (LPBYTE)lpwAlign( (LPWORD)lpMem );
  136.   /*
  137.    * Add a push button control
  138.    */
  139.   // add the pushbutton
  140.   lpDlgItem = (LPDLGITEMTEMPLATE)lpMem;
  141.   lpDlgItem->style  = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON;
  142.   lpDlgItem->x      = 34 * 4 / LOWORD( dlgbase );
  143.   lpDlgItem->y      = 180 * 8 / HIWORD( dlgbase );
  144.   lpDlgItem->cx     = 60 * 4 / LOWORD( dlgbase );
  145.   lpDlgItem->cy     = 24 * 8 / HIWORD( dlgbase );
  146.   lpDlgItem->id     = IDBN_ABOUTOK;
  147.   lpMem += sizeof(DLGITEMTEMPLATE);
  148.   // class
  149.   lpMem[0] = 0xFF;
  150.   lpMem[1] = 0xFF;
  151.   lpMem[2] = 0x80;
  152.   lpMem[3] = 0x00;
  153.   // unicode string
  154.   lpMem[4] = 'O';
  155.   lpMem[5] = 0;
  156.   lpMem[6] = 'K';
  157.   lpMem[7] = 0;
  158.   lpMem[8] = 0;
  159.   lpMem[9] = 0;
  160.   // creation data
  161.   lpMem[10] = 0;
  162.   lpMem[11] = 0;
  163.   lpMem += 12;
  164.   lpMem = (LPBYTE)lpwAlign( (LPWORD)lpMem );
  165.   /*
  166.    * Add another control
  167.    */
  168.   lpDlgItem = (LPDLGITEMTEMPLATE)lpMem;
  169.   lpDlgItem->style  = WS_CHILD | WS_VISIBLE;
  170.   lpDlgItem->x      = 160 * 4 / LOWORD( dlgbase );
  171.   lpDlgItem->y      = 28 * 8 / HIWORD( dlgbase );
  172.   lpDlgItem->cx     = 150 * 4 / LOWORD( dlgbase );
  173.   lpDlgItem->cy     = 156 * 8 / HIWORD( dlgbase );
  174.   lpDlgItem->id     = IDT_ABOUTTXT;
  175.   lpMem += sizeof(DLGITEMTEMPLATE);
  176.   lpMem[0] = 0xFF;
  177.   lpMem[1] = 0xFF;
  178.   lpMem[2] = 0x82;
  179.   lpMem[3] = 0x00;
  180.   lpMem[4] = 0;
  181.   lpMem[5] = 0;
  182.   lpMem[6] = 0;
  183.   lpMem[7] = 0;
  184.   if ( DialogBoxIndirect( ghInstance, lpDlg, hParent, AboutDialogProc ) == -1 )
  185.     {
  186.       //wsprintf( (char *)lpDlg, "DialogBoxIndirect() == -1, GetLastError() == %d", GetLastError() );
  187.       //OutputDebugString( (char *)lpDlg );
  188.     }
  189.   GlobalFree( lpDlg );
  190. }
  191. LPWORD lpwAlign( LPWORD lpIn )
  192. {
  193.   ULONG ul;
  194.   ul = (ULONG)lpIn;
  195.   ul += 3;
  196.   ul >>= 2;
  197.   ul <<= 2;
  198.   return (LPWORD)ul;
  199. }
  200. void SetAboutDlgText( HWND hWnd )
  201. {
  202.   char buf[256];
  203.   char *p;
  204.   BE_VERSION bev;
  205.   wsprintf( buf, "CD-DA X-Tractor v%d.%02dnnReleased under the GNU Public License.nn", iMajorVer, iMinorVer );
  206.   p = buf + lstrlen(buf);
  207.   if ( (iEncoder==BLADE_ENC_DLL) && hBladeDll )
  208.     {
  209.       beVersion( &bev );
  210.       wsprintf( p, "MP3 encoder:nBladeEnc DLL v%d.%02d (engine v%d.%02d).nn", bev.byDLLMajorVersion, bev.byDLLMinorVersion, bev.byMajorVersion, bev.byMinorVersion );
  211.     }
  212.   else if ( (iEncoder==LAME_ENC_DLL) && hLameDll )
  213.     {
  214.       beVersion( &bev );
  215.       wsprintf( p, "MP3 encoder:nLame_Enc DLL v%d.%02d (engine v%d.%02d).nn", bev.byDLLMajorVersion, bev.byDLLMinorVersion, bev.byMajorVersion, bev.byMinorVersion );
  216.     }
  217.   else
  218.     wsprintf( p, "No supported MP3 encoder detected.n" );
  219.   p += lstrlen( p );
  220.   SetDlgItemText( hWnd, IDT_ABOUTTXT, buf );
  221. }
  222. BOOL CALLBACK CDPropertiesDlgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
  223. {
  224.   lParam = lParam;
  225.   switch( uMsg )
  226.     {
  227.     case WM_INITDIALOG:
  228.       break;
  229.     case WM_DESTROY:
  230.       break;
  231.     case WM_COMMAND:
  232.       switch( LOWORD(wParam) )
  233. {
  234. case IDCANCEL:
  235. case IDBN_ABOUTOK:
  236.   EndDialog( hWnd, 0 );
  237.   break;
  238. }
  239.       break;
  240.     default:
  241.       return FALSE;
  242.     }
  243.   return TRUE;
  244. }