⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 about.c

📁 读取音乐光盘磁道为磁盘文件的DLL源码
💻 C
字号:
/*
 * about.c - Copyright (C) 1999,2000 Jay A. Key
 *
 * "About" dialog for CD-DA X-Tractor
 *
 **********************************************************************
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 *
 */

#include <windows.h>
#include "resources.h"
#include "globals.h"
#include "bladedll.h"

LRESULT CALLBACK BmpPanelProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
void PaintBmpPanel( HWND hWnd );
LPWORD lpwAlign( LPWORD lpIn );
void SetAboutDlgText( HWND hWnd );

BOOL CALLBACK AboutDialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
  lParam = lParam;
  switch( uMsg )
    {
    case WM_INITDIALOG:
      CreateWindowEx( WS_EX_CLIENTEDGE, szBmpPanel, "",
		      WS_CHILD | WS_VISIBLE, 8, 8, 124, 164,
		      hWnd, (HMENU)ID_BMPPANEL, ghInstance, "AboutBmp" );
      SetAboutDlgText( hWnd );
      break;

    case WM_COMMAND:
      switch( LOWORD(wParam) )
	{
	case IDCANCEL:
	case IDBN_ABOUTOK:
	  EndDialog( hWnd, 0 );
	  break;
	}
      break;

    default:
      return FALSE;
    }

  return TRUE;
}


void InitBmpPanel( void )
{
  WNDCLASSEX wc;

  if ( !atomBmpPanel )
    {
      ZeroMemory( &wc, sizeof(wc) );
      wc.cbSize      = sizeof(wc);
      wc.style       = CS_HREDRAW | CS_VREDRAW;
      wc.lpfnWndProc = BmpPanelProc;
      wc.hInstance   = ghInstance;
      wc.hCursor     = LoadCursor( NULL, IDC_ARROW );
      wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
      wc.lpszClassName = szBmpPanel;

      atomBmpPanel = RegisterClassEx( &wc );
    }
}


LRESULT CALLBACK BmpPanelProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
  HBITMAP hBmp;
  LPBYTE lpb;

  switch( uMsg )
    {
    case WM_CREATE:
      lpb = (LPBYTE)((LPCREATESTRUCT)lParam)->lpCreateParams;
      hBmp = LoadBitmap( ghInstance, (char *)lpb );
      if ( hBmp )
	{
	  SetWindowLong( hWnd, GWL_USERDATA, (LONG)hBmp );
	}
      break;

    case WM_PAINT:
      PaintBmpPanel( hWnd );
      break;

    case WM_DESTROY:
      return DefWindowProc( hWnd, uMsg, wParam, lParam );
    }
  return DefWindowProc( hWnd, uMsg, wParam, lParam );
}


void PaintBmpPanel( HWND hWnd )
{
  HDC hDC, hCompDC;
  HBITMAP hBmp;
  PAINTSTRUCT ps;
  RECT rc;

  hDC = BeginPaint( hWnd, &ps );

  hBmp = (HBITMAP)GetWindowLong( hWnd, GWL_USERDATA );
  if ( hBmp )
    {
      hCompDC = CreateCompatibleDC( hDC );
      SelectObject( hCompDC, hBmp );
      GetClientRect( hWnd, &rc );
      BitBlt( hDC, 0, 0, rc.right, rc.bottom, hCompDC, 0, 0, SRCCOPY );
      DeleteDC( hCompDC );
    }
  EndPaint( hWnd, &ps );
}


/*
 * Create dialog that is 320x200 pixels, centered.
 */
void DynamicAboutDialog( HWND hParent )
{
  LPDLGTEMPLATE lpDlg;
  LPDLGITEMTEMPLATE lpDlgItem;
  LPBYTE lpMem;
  LONG dlgbase;
  int n;

  dlgbase = GetDialogBaseUnits();

  lpMem = GlobalAlloc( GPTR, 2048 );
  lpDlg = (LPDLGTEMPLATE)lpMem;

  lpDlg->style     = DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_CHILD | WS_POPUP | WS_OVERLAPPED | DS_SETFOREGROUND;
  lpDlg->cdit      = 2;
  lpDlg->x         = 0;
  lpDlg->y         = 0;
  lpDlg->cx        = 320 * 4 / LOWORD( dlgbase );
  lpDlg->cy        = 210 * 8 / HIWORD( dlgbase );

  lpMem += sizeof(DLGTEMPLATE);
  lpMem += 4;   // dialog has no menu and uses the default class
  n = MultiByteToWideChar( CP_ACP, 0, "About CD-DA X-Tractor", -1, (LPWSTR)lpMem, 256 );
  lpMem += (n * 2);

  lpMem = (LPBYTE)lpwAlign( (LPWORD)lpMem );

  /*
   * Add a push button control
   */
  // add the pushbutton
  lpDlgItem = (LPDLGITEMTEMPLATE)lpMem;
  lpDlgItem->style  = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON;
  lpDlgItem->x      = 34 * 4 / LOWORD( dlgbase );
  lpDlgItem->y      = 180 * 8 / HIWORD( dlgbase );
  lpDlgItem->cx     = 60 * 4 / LOWORD( dlgbase );
  lpDlgItem->cy     = 24 * 8 / HIWORD( dlgbase );
  lpDlgItem->id     = IDBN_ABOUTOK;

  lpMem += sizeof(DLGITEMTEMPLATE);
  // class
  lpMem[0] = 0xFF;
  lpMem[1] = 0xFF;
  lpMem[2] = 0x80;
  lpMem[3] = 0x00;
  // unicode string
  lpMem[4] = 'O';
  lpMem[5] = 0;
  lpMem[6] = 'K';
  lpMem[7] = 0;
  lpMem[8] = 0;
  lpMem[9] = 0;
  // creation data
  lpMem[10] = 0;
  lpMem[11] = 0;
  lpMem += 12;

  lpMem = (LPBYTE)lpwAlign( (LPWORD)lpMem );

  /*
   * Add another control
   */
  lpDlgItem = (LPDLGITEMTEMPLATE)lpMem;
  lpDlgItem->style  = WS_CHILD | WS_VISIBLE;
  lpDlgItem->x      = 160 * 4 / LOWORD( dlgbase );
  lpDlgItem->y      = 28 * 8 / HIWORD( dlgbase );
  lpDlgItem->cx     = 150 * 4 / LOWORD( dlgbase );
  lpDlgItem->cy     = 156 * 8 / HIWORD( dlgbase );
  lpDlgItem->id     = IDT_ABOUTTXT;

  lpMem += sizeof(DLGITEMTEMPLATE);
  lpMem[0] = 0xFF;
  lpMem[1] = 0xFF;
  lpMem[2] = 0x82;
  lpMem[3] = 0x00;
  lpMem[4] = 0;
  lpMem[5] = 0;
  lpMem[6] = 0;
  lpMem[7] = 0;

  if ( DialogBoxIndirect( ghInstance, lpDlg, hParent, AboutDialogProc ) == -1 )
    {
      //wsprintf( (char *)lpDlg, "DialogBoxIndirect() == -1, GetLastError() == %d", GetLastError() );
      //OutputDebugString( (char *)lpDlg );
    }

  GlobalFree( lpDlg );
}


LPWORD lpwAlign( LPWORD lpIn )
{
  ULONG ul;

  ul = (ULONG)lpIn;
  ul += 3;
  ul >>= 2;
  ul <<= 2;
  return (LPWORD)ul;
}


void SetAboutDlgText( HWND hWnd )
{
  char buf[256];
  char *p;
  BE_VERSION bev;

  wsprintf( buf, "CD-DA X-Tractor v%d.%02d\n\nReleased under the GNU Public License.\n\n", iMajorVer, iMinorVer );
  p = buf + lstrlen(buf);
  if ( (iEncoder==BLADE_ENC_DLL) && hBladeDll )
    {
      beVersion( &bev );
      wsprintf( p, "MP3 encoder:\nBladeEnc DLL v%d.%02d (engine v%d.%02d).\n\n", bev.byDLLMajorVersion, bev.byDLLMinorVersion, bev.byMajorVersion, bev.byMinorVersion );
    }
  else if ( (iEncoder==LAME_ENC_DLL) && hLameDll )
    {
      beVersion( &bev );
      wsprintf( p, "MP3 encoder:\nLame_Enc DLL v%d.%02d (engine v%d.%02d).\n\n", bev.byDLLMajorVersion, bev.byDLLMinorVersion, bev.byMajorVersion, bev.byMinorVersion );
    }
  else
    wsprintf( p, "No supported MP3 encoder detected.\n" );
  p += lstrlen( p );

  SetDlgItemText( hWnd, IDT_ABOUTTXT, buf );
}



BOOL CALLBACK CDPropertiesDlgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
  lParam = lParam;

  switch( uMsg )
    {
    case WM_INITDIALOG:
      break;

    case WM_DESTROY:
      break;

    case WM_COMMAND:
      switch( LOWORD(wParam) )
	{
	case IDCANCEL:
	case IDBN_ABOUTOK:
	  EndDialog( hWnd, 0 );
	  break;
	}
      break;

    default:
      return FALSE;
    }

  return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -