📄 options.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 + -