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

📄 options.cpp

📁 WINCE XAUDIO可播放各种音乐格式内附SOURCE CODE可以再不同CPU 平台编译测试
💻 CPP
字号:
/*****************************************************************
|
|      Xaudio Player for Windows CE      
|
|      (c) 1996-1998 MpegTV, LLC
|      Author: Gilles Boccon-Gibod (gilles@mpegtv.com)
|
 ****************************************************************/

/*----------------------------------------------------------------------
|       includes
+---------------------------------------------------------------------*/
#ifndef STRICT
#define STRICT
#endif

#include <windows.h>
#include <commctrl.h>

#include "xaplayer.h"
#include "ceutils.h"
#include "options.h"

/*----------------------------------------------------------------------
|       constants
+---------------------------------------------------------------------*/
#define OPTIONS_DEFAULT_DEVICE_VALUE            1
#define OPTIONS_DEFAULT_QUALITY_VALUE           1

/*----------------------------------------------------------------------
|       GetDriverCaps
+---------------------------------------------------------------------*/
static void 
GetDriverCaps(HWND window, int index)
{
    MMRESULT    result;
    WAVEOUTCAPS caps;
    TCHAR       text[128];
    HWND        item;
    UINT        device_id;

    if (index == 0) {
        device_id = WAVE_MAPPER;
    } else {
        device_id = index-1;
    }

    result = waveOutGetDevCaps(device_id, 
                               &caps,
                               sizeof(WAVEOUTCAPS));
    if (result != MMSYSERR_NOERROR) {
        //ShowGenericError(TEXT("Cannot Get Device Caps"), result);
        item = GetDlgItem(window, IDC_ID);
        SetWindowText(item, TEXT("N/A"));
        item = GetDlgItem(window, IDC_DRIVER);
        SetWindowText(item, TEXT("N/A"));
        item = GetDlgItem(window, IDC_NAME);
        SetWindowText(item, TEXT("N/A"));
        item = GetDlgItem(window, IDC_LIST);
        SendMessage(item, LB_RESETCONTENT, 0, 0);
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("Info Not Available"));
        return;
    }

    // ID
    item = GetDlgItem(window, IDC_ID);
    swprintf(text, TEXT("%x.%x"), caps.wMid, caps.wPid);
    SetWindowText(item, text);

    // Driver
    item = GetDlgItem(window, IDC_DRIVER);
    swprintf(text, TEXT("%x.%x"), 
            (caps.vDriverVersion >> 16) & 0xFFFF,
            (caps.vDriverVersion      ) & 0xFFFF);
    SetWindowText(item, text);

    // Name
    item = GetDlgItem(window, IDC_NAME);
    SetWindowText(item, caps.szPname);

    // formats
    item = GetDlgItem(window, IDC_LIST);
    SendMessage(item, LB_RESETCONTENT, 0, 0);
    swprintf(text, TEXT("CAPS flags = %x"), caps.dwFormats);
    SendMessage(item, LB_ADDSTRING, 0, (LPARAM)text);
    if (caps.dwFormats & WAVE_FORMAT_4M16) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("44.1 kHz, Mono, 16 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_4S16) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("44.1 kHz, Stereo, 16 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_2M16) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("22.05 kHz, Mono, 16 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_2S16) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("22.05 kHz, Stereo, 16 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_1M16) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("11 kHz, Mono, 16 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_1S16) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("11 kHz, Stereo, 16 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_4M08) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("44.1 kHz, Mono, 8 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_4S08) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("44.1 kHz, Stereo, 8 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_2M08) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("22.05 kHz, Mono, 8 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_2S08) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("22.05 kHz, Stereo, 8 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_1M08) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("11 kHz, Mono, 8 bits"));
    }
    if (caps.dwFormats & WAVE_FORMAT_1S08) {
        SendMessage(item, LB_ADDSTRING, 0, (LPARAM)TEXT("11 kHz, Stereo, 8 bits"));
    } 
}

/*----------------------------------------------------------------------
|       PreferencesOutputPageProc
+---------------------------------------------------------------------*/
static BOOL CALLBACK 
PreferencesOutputPageProc(HWND window, UINT message, 
                          WPARAM wparam, LPARAM lparam)
{
    LPNMHDR pnmh;

    switch (message) {
      case WM_INITDIALOG: {
        unsigned int  i;
        HWND          combo;
        LRESULT       result;    
        PROPSHEETPAGE *page = (PROPSHEETPAGE *)lparam;
        Options       *options = (Options *)page->lParam;

        combo = GetDlgItem(window, IDC_DEVICES_COMBO);
        result = SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)TEXT("WAVE_MAPPER"));
        for (i=0; i<waveOutGetNumDevs(); i++) {
            TCHAR text[64];
            swprintf(text, TEXT("Device %d"), i);
            result = SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)text);
        }
        SendMessage(combo, CB_SETCURSEL, options->m_Output.device, 0);
        GetDriverCaps(window, options->m_Output.device);
      }
      break;

      case WM_COMMAND:
        switch (LOWORD(wparam)) {
          case IDC_DEVICES_COMBO:
            if (HIWORD(wparam) == CBN_SELENDOK) {
                HWND combo = GetDlgItem(window, IDC_DEVICES_COMBO);
                GetDriverCaps(window, SendMessage(combo, CB_GETCURSEL, 0, 0));
              }
        }
        break;

      case WM_NOTIFY:
        pnmh = (LPNMHDR)lparam;
        switch (pnmh->code) {
          case PSN_KILLACTIVE:
            Player->m_Options.m_Output.device = 
                SendMessage(GetDlgItem(window, IDC_DEVICES_COMBO), 
                            CB_GETCURSEL, 0, 0);
            Player->SetOutputDeviceFromOptions();
            break;
        }
        break;
    }

    return FALSE;
}

/*----------------------------------------------------------------------
|       PreferencesCodecPageProc
+---------------------------------------------------------------------*/
static BOOL CALLBACK 
PreferencesCodecPageProc(HWND window, UINT message, 
                         WPARAM wparam, LPARAM lparam)
{
    LPNMHDR pnmh;

    switch (message) {
      case WM_INITDIALOG: {
        HWND          radio[3];
        PROPSHEETPAGE *page = (PROPSHEETPAGE *)lparam;
        Options       *options = (Options *)page->lParam;

        radio[0] = GetDlgItem(window, IDC_RADIO1);
        radio[1] = GetDlgItem(window, IDC_RADIO2);
        radio[2] = GetDlgItem(window, IDC_RADIO3);
        
        SendMessage(radio[options->m_Codec.quality], BM_SETCHECK, 1, 0);
      }
      break;

      case WM_NOTIFY:
        pnmh = (LPNMHDR)lparam;
        switch (pnmh->code) {
          case PSN_KILLACTIVE:
            Player->m_Options.m_Codec.quality =
                SendMessage(GetDlgItem(window, IDC_RADIO1), BM_GETCHECK, 0, 0) * 0 +
                SendMessage(GetDlgItem(window, IDC_RADIO2), BM_GETCHECK, 0, 0) * 1 +
                SendMessage(GetDlgItem(window, IDC_RADIO3), BM_GETCHECK, 0, 0) * 2;
            Player->SetCodecQuality(Player->m_Options.m_Codec.quality);
            break;
        }
        break;
    }

    return FALSE;
}

/*----------------------------------------------------------------------
|       Options constructor
+---------------------------------------------------------------------*/
Options::Options()
{
    // output device
    m_Output.device = OPTIONS_DEFAULT_DEVICE_VALUE;

    // codec quality
    m_Codec.quality = OPTIONS_DEFAULT_QUALITY_VALUE;
}

/*----------------------------------------------------------------------
|       Options desctructor
+---------------------------------------------------------------------*/
Options::~Options()
{
}

/*----------------------------------------------------------------------
|       Options::DoDialog
+---------------------------------------------------------------------*/
void
Options::DoDialog(HINSTANCE instance, HWND parent)
{
    PROPSHEETPAGE   page;
    PROPSHEETHEADER sheet;

    // the codec quality property page
    page.dwSize         = sizeof(PROPSHEETPAGE);
    page.dwFlags        = 0;
    page.hInstance      = instance;
    page.pszTemplate    = ID(IDD_PREFERENCES_CODEC_PAGE);
    page.lParam         = (LPARAM)this;
    page.pfnDlgProc     = (DLGPROC)PreferencesCodecPageProc;
    m_Dialog.handles[0] = CreatePropertySheetPage(&page);

    // the registration property page
    page.dwSize         = sizeof(PROPSHEETPAGE);
    page.dwFlags        = 0;
    page.hInstance      = instance;
    page.pszTemplate    = ID(IDD_OUTPUT_DEVICES_DIALOG);
    page.lParam         = (LPARAM)this;
    page.pfnDlgProc     = (DLGPROC)PreferencesOutputPageProc;
    m_Dialog.handles[1] = CreatePropertySheetPage(&page);

    // create the proprety sheet header
    memset(&sheet, 0, sizeof(PROPSHEETHEADER));
    sheet.dwSize     = sizeof(PROPSHEETHEADER);
    sheet.dwFlags    = PSH_NOAPPLYNOW;
    sheet.hInstance  = instance;
    sheet.hwndParent = parent;
    sheet.nPages     = sizeof(m_Dialog.handles)/sizeof(HPROPSHEETPAGE);
    sheet.phpage     = m_Dialog.handles;
    sheet.pszCaption = TEXT("Xaudio Properties");

    // show the property page and wait for user input
    PropertySheet(&sheet);
}

⌨️ 快捷键说明

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