亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? volumeinxxx.cpp

?? vc++實現的音量設置代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// VolumeInXXX.cpp : Module interface implementation.
// Developer : Alex Chmut
// Created : 8/11/98
#include "StdAfx.h"
#include "VolumeInXXX.h"

/////////////////////////////////////////////////////////////////////////////
// 		Defines
#define	BAD_DWORD	(DWORD)-1
#define	WND_CLASS_NAME	"Input Volume Msg Wnd Class"
#define	WND_NAME		"Input Volume Msg Wnd"

/////////////////////////////////////////////////////////////////////////////
// 		Globals
PCVolumeInXXX g_pThis = NULL;

////////////////////////////////////////////////////////////

//{{{ Audio specific functions
#define AUDFREQ			22050	// Frequency
#define AUDCHANNELS		1		// Number of channels
#define AUDBITSMPL		16		// Number of bits per sample
inline
void SetDeviceType( WAVEFORMATEX* pwfe )
{
	memset( pwfe, 0, sizeof(WAVEFORMATEX) );
	WORD  nBlockAlign = (AUDCHANNELS*AUDBITSMPL)/8;
	DWORD nSamplesPerSec = AUDFREQ;
	pwfe->wFormatTag = WAVE_FORMAT_PCM;
	pwfe->nChannels = AUDCHANNELS;
	pwfe->nBlockAlign = nBlockAlign;
	pwfe->nSamplesPerSec = nSamplesPerSec;
	pwfe->wBitsPerSample = AUDBITSMPL;
	pwfe->nAvgBytesPerSec = nSamplesPerSec*nBlockAlign;
}
//}}} Audio specific functions

/////////////////////////////////////////////////////////////////////////////
// 		Implementation
//////////////
CVolumeInXXX::CVolumeInXXX( UINT uLineIndex )
	:	m_bOK(false),
		m_bInitialized(false),
		m_bAvailable(false),

		m_uMixerID(0L),
		m_dwMixerHandle(0L),
		m_hWnd(NULL),

		m_uMicrophoneSourceLineIndex(BAD_DWORD),

		m_dwMinimalVolume(BAD_DWORD),
		m_dwMaximalVolume(BAD_DWORD),

		m_pfUserSink(NULL),
		m_dwUserValue(0L)
{
	if ( m_bOK = Init() )
	{
		g_pThis = this;
		if ( !Initialize( uLineIndex ) )
		{
			Done();
			g_pThis = NULL;
		}
	}
}
//////////////
CVolumeInXXX::~CVolumeInXXX()
{
	if ( m_bOK )
		Done();
	g_pThis = NULL;
}
//////////////
bool CVolumeInXXX::Init()
{
	if ( !mixerGetNumDevs() )
		return false;
	// Getting Mixer ID
	HWAVEIN hwaveIn;
	MMRESULT mmResult;
	WAVEFORMATEX WaveFmt;
	SetDeviceType( &WaveFmt );
	mmResult = waveInOpen( &hwaveIn, WAVE_MAPPER, &WaveFmt, 0L, 0L, CALLBACK_NULL );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		TRACE(".InputXxxVolume: FAILURE: Could not open WaveIn Mapper. mmResult=%d\n", mmResult );
		return false;
	} else {
		mmResult = mixerGetID( (HMIXEROBJ)hwaveIn, &m_uMixerID, MIXER_OBJECTF_HWAVEIN );
		waveInClose( hwaveIn );
		if ( mmResult != MMSYSERR_NOERROR )
		{
			TRACE(".InputXxxVolume: FAILURE: WaveIn Mapper in Mixer is not available. mmResult=%d\n", mmResult );
			return false;
		}
	}
	// Exposing Window to Mixer
	WNDCLASSEX wcx;
	memset( &wcx, 0, sizeof(WNDCLASSEX) );	
	wcx.cbSize = sizeof(WNDCLASSEX);
	wcx.lpszClassName = WND_CLASS_NAME;
	wcx.lpfnWndProc = (WNDPROC)MixerWndProc;
	::RegisterClassEx(&wcx);
	m_hWnd = CreateWindow(	WND_CLASS_NAME,
							WND_NAME,
							WS_POPUP | WS_DISABLED,
							0, 0, 0, 0,
							NULL, NULL, NULL, NULL );
	if ( !m_hWnd )
	{
		TRACE(".InputXxxVolume: FAILURE: Could not create internal window.\n" );
		return false;
	}
	::ShowWindow(m_hWnd, SW_HIDE);
	mmResult = mixerOpen( (LPHMIXER)&m_dwMixerHandle, m_uMixerID, (DWORD)m_hWnd, 0L, CALLBACK_WINDOW );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		TRACE(".InputXxxVolume: FAILURE: Could not open Mixer. mmResult=%d\n", mmResult );
		::DestroyWindow( m_hWnd );
		return false;
	}
	return true;
}
//////////////
void CVolumeInXXX::Done()
{
	if ( mixerClose( (HMIXER)m_dwMixerHandle ) != MMSYSERR_NOERROR )
	{
		TRACE(".InputXxxVolume: WARNING: Could not close Mixer.\n" );
	}
	::DestroyWindow( m_hWnd );
	m_bInitialized = false;
	m_bOK = false;
}
//////////////
void CVolumeInXXX::OnControlChanged( DWORD dwControlID )
{
	if ( m_dwVolumeControlID == dwControlID )
	{
		DWORD dwVolume = GetCurrentVolume();
		if ( (dwVolume!=BAD_DWORD) && (m_pfUserSink) )
		{
			(*m_pfUserSink)( dwVolume, m_dwUserValue );
		}
	}
}
//////////////
bool CVolumeInXXX::Initialize( UINT uLineIndex )
{
	MMRESULT mmResult;
	if ( !m_bOK )
		return false;
	TRACE(".InputXxxVolume: Initializing for the Source Line (%d) ..\n", uLineIndex );
	MIXERLINE MixerLine;
	memset( &MixerLine, 0, sizeof(MIXERLINE) );
	MixerLine.cbStruct = sizeof(MIXERLINE);
	MixerLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
	mmResult = mixerGetLineInfo( (HMIXEROBJ)m_dwMixerHandle, &MixerLine, MIXER_GETLINEINFOF_COMPONENTTYPE );
	if ( mmResult != MMSYSERR_NOERROR )
	{
		TRACE(".InputXxxVolume: FAILURE: Could not get WaveIn Destionation Line for the requested source while initilaizing. mmResult=%d\n", mmResult );
		return false;
	}

	MIXERCONTROL Control;
	memset( &Control, 0, sizeof(MIXERCONTROL) );
	Control.cbStruct = sizeof(MIXERCONTROL);

	MIXERLINECONTROLS LineControls;
	memset( &LineControls, 0, sizeof(MIXERLINECONTROLS) );
	LineControls.cbStruct = sizeof(MIXERLINECONTROLS);

	MIXERLINE Line;
	memset( &Line, 0, sizeof(MIXERLINE) );
	Line.cbStruct = sizeof(MIXERLINE);

	if ( ( uLineIndex < MixerLine.cConnections ) )
	{
		Line.dwDestination = MixerLine.dwDestination;
		Line.dwSource = uLineIndex;
		mmResult = mixerGetLineInfo( (HMIXEROBJ)m_dwMixerHandle, &Line, MIXER_GETLINEINFOF_SOURCE );
		if ( mmResult != MMSYSERR_NOERROR )
		{
			TRACE(".InputXxxVolume: FAILURE: Could not get the requested Source Line while initilaizing. mmResult=%d\n", mmResult );
			return false;
		}
		TRACE(".InputXxxVolume: \"%s\" Source Line adopted.\n", Line.szShortName );
		LineControls.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
		LineControls.dwLineID = Line.dwLineID;
		LineControls.cControls = 1;
		LineControls.cbmxctrl = sizeof(MIXERCONTROL);
		LineControls.pamxctrl = &Control;
		mmResult = mixerGetLineControls( (HMIXEROBJ)m_dwMixerHandle, &LineControls, MIXER_GETLINECONTROLSF_ONEBYTYPE );
		if ( mmResult == MMSYSERR_NOERROR )
		{
			if ( !(Control.fdwControl & MIXERCONTROL_CONTROLF_DISABLED) )
			{
				m_bAvailable = true;
				TRACE(".InputXxxVolume: \"%s\" Volume control for the Source Line adopted\n", Control.szShortName );
			} else {
				TRACE(".InputXxxVolume: WARNING: The Volume Control is disabled.\n" );
			}
		} else {
			TRACE(".InputXxxVolume: WARNING: Could not get the requested Source Line Volume Control for the requested line while initilaizing. mmResult=%d\n", mmResult );
		}		
	} else {
		TRACE(".InputXxxVolume: FAILURE: Invalid Source Line index passed.\n" );
		return false;
	}

	// Retrieving Microphone Source Line
	for ( UINT uLine = 0; uLine < MixerLine.cConnections; uLine++ )
	{
		MIXERLINE MicrophoneLine;
		memset( &MicrophoneLine, 0, sizeof(MIXERLINE) );
		MicrophoneLine.cbStruct = sizeof(MIXERLINE);
		MicrophoneLine.dwDestination = MixerLine.dwDestination;
		MicrophoneLine.dwSource = uLine;
		mmResult = mixerGetLineInfo( (HMIXEROBJ)m_dwMixerHandle, &MicrophoneLine, MIXER_GETLINEINFOF_SOURCE );
		if ( mmResult == MMSYSERR_NOERROR )
		{
			if ( MicrophoneLine.dwComponentType == MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE )
			{
				m_uMicrophoneSourceLineIndex = MicrophoneLine.dwSource;
				TRACE(".InputXxxVolume: Microphone Source Line \"%s\" has been found.\n", MicrophoneLine.szShortName );
				break;
			}
		}
	}
	if ( m_uMicrophoneSourceLineIndex == BAD_DWORD )
	{
		TRACE(".InputXxxVolume: WARNING: Could not retrieve Microphone Source Line.\n" );
	}

	m_uSourceLineIndex = uLineIndex;
	m_nChannelCount = Line.cChannels;
	m_dwLineID = LineControls.dwLineID;
	m_dwVolumeControlID = Control.dwControlID;
	m_dwMinimalVolume = Control.Bounds.dwMinimum;
	m_dwMaximalVolume = Control.Bounds.dwMaximum;
	m_dwVolumeStep = Control.Metrics.cSteps;

	m_bInitialized = true;
	return true;
}
//////////////////////////////////////////////
bool CVolumeInXXX::GetMicrophoneSourceLineIndex( UINT* puLineIndex )
{
	if ( !puLineIndex || !m_bInitialized || (m_uMicrophoneSourceLineIndex==BAD_DWORD) )
		return false;
	*puLineIndex = m_uMicrophoneSourceLineIndex;
	return true;
}
//////////////////////////////////////////////
// IVolume interface
//////////////
bool CVolumeInXXX::IsAvailable()
{
	return m_bAvailable;
}
//////////////
void CVolumeInXXX::Enable()
{
	if ( !m_bInitialized )
		return;
	bool bAnyEnabled = false;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内成+人亚洲+欧美+综合在线| 亚洲成av人片观看| 日韩精品一区二区三区中文精品 | 成人动漫一区二区三区| 久久成人综合网| 蜜桃久久av一区| 精品亚洲成a人在线观看 | 狠狠色丁香婷婷综合| 青青青爽久久午夜综合久久午夜| 香蕉久久夜色精品国产使用方法| 亚洲国产人成综合网站| 亚洲国产一二三| 亚洲高清免费一级二级三级| 亚洲午夜免费电影| 日日噜噜夜夜狠狠视频欧美人| 亚洲va韩国va欧美va| 日本欧美久久久久免费播放网| 日本va欧美va瓶| 韩国av一区二区三区| 国产黄人亚洲片| 93久久精品日日躁夜夜躁欧美| 色偷偷88欧美精品久久久| 欧美午夜免费电影| 久久成人久久爱| 一区二区三区在线观看视频| ww亚洲ww在线观看国产| 成人高清av在线| 欧美电影免费观看高清完整版在线 | 久久精品国产澳门| 欧洲国内综合视频| 亚洲人成网站在线| 国产一区在线观看麻豆| 日韩亚洲国产中文字幕欧美| 天天综合网 天天综合色| 日本高清不卡视频| 亚洲人成网站影音先锋播放| 91婷婷韩国欧美一区二区| 国产精品欧美经典| 99久久精品一区| 亚洲欧美日韩人成在线播放| www.成人在线| 亚洲摸摸操操av| 色久综合一二码| 一区二区三区久久久| 色婷婷久久99综合精品jk白丝 | 一区二区激情小说| 欧美无乱码久久久免费午夜一区 | 国产精品不卡在线观看| 99久久亚洲一区二区三区青草| 亚洲欧美一区二区视频| 不卡在线观看av| 伊人婷婷欧美激情| 欧美亚洲一区二区在线观看| 五月天亚洲精品| 欧美一级搡bbbb搡bbbb| 乱一区二区av| 国产精品美女久久久久aⅴ| 91日韩一区二区三区| 亚洲午夜国产一区99re久久| 日韩欧美国产综合在线一区二区三区| 精品影院一区二区久久久| 欧美国产1区2区| 91国产免费观看| 蜜桃久久久久久| 国产精品美女久久久久高潮| 欧美视频中文一区二区三区在线观看| 免费成人在线视频观看| 欧美国产一区在线| 欧美人与禽zozo性伦| 国产一区啦啦啦在线观看| 国产精品理论片| 欧美精品日韩综合在线| 国产精品18久久久久久久久| 亚洲免费视频中文字幕| 日韩欧美一区二区在线视频| 不卡免费追剧大全电视剧网站| 亚洲成a人片综合在线| 国产午夜精品久久久久久久 | 91精品国产色综合久久不卡蜜臀| 国内精品国产成人国产三级粉色| 亚洲欧美日韩国产综合| 日韩视频永久免费| 色综合色综合色综合色综合色综合 | 亚洲在线观看免费| 2020国产精品| 欧美肥妇free| 色综合天天视频在线观看| 国产精品一二三四五| 亚洲成a人在线观看| 国产精品久久久久久久久久久免费看| 日韩欧美亚洲一区二区| 在线观看日韩高清av| 国产高清不卡二三区| 蜜桃视频在线观看一区| 亚洲国产精品影院| 自拍偷拍国产亚洲| 国产日韩欧美不卡在线| 欧美一级高清片在线观看| 色狠狠一区二区| 成人av免费观看| 国产福利91精品一区| 免费在线看一区| 亚洲第一福利视频在线| 亚洲女同一区二区| 国产精品久久久久影院色老大| 欧美电视剧免费全集观看| 欧美老人xxxx18| 欧美高清www午色夜在线视频| 一本一本大道香蕉久在线精品| 国产高清精品在线| 国产精品91xxx| 国产精品影视天天线| 精品一区二区精品| 美女视频一区二区三区| 免费看欧美女人艹b| 午夜精品在线看| 日本少妇一区二区| 日本色综合中文字幕| 亚洲国产中文字幕在线视频综合| 亚洲欧洲日韩av| 亚洲色图欧美激情| 国产欧美精品区一区二区三区 | 欧美亚洲动漫精品| 欧美日韩dvd在线观看| 欧美日韩黄视频| 51午夜精品国产| 欧美一级片在线看| 精品黑人一区二区三区久久| 精品国产一区二区亚洲人成毛片 | 成人网男人的天堂| 成人午夜激情片| 色偷偷久久人人79超碰人人澡| 欧美综合天天夜夜久久| 欧美在线你懂得| 日韩一区二区在线播放| 久久综合色8888| 国产精品每日更新| 亚洲高清久久久| 另类调教123区| 国产精品18久久久久久vr| 99热精品一区二区| 欧美日产国产精品| 日韩视频不卡中文| 中文字幕在线不卡| 一区二区三区91| 麻豆91精品91久久久的内涵| 国产成人在线色| 欧美又粗又大又爽| 精品三级在线看| 一区精品在线播放| 五月天丁香久久| 国产成人三级在线观看| 在线精品视频一区二区| 日韩欧美电影一区| 中文字幕在线播放不卡一区| 视频一区视频二区在线观看| 丁香五精品蜜臀久久久久99网站| 色又黄又爽网站www久久| 欧美一级二级三级乱码| 国产精品久久久久久久裸模| 丝袜诱惑亚洲看片| 国产精品一区二区在线播放 | 丁香激情综合五月| 欧美日韩一区小说| 久久综合九色综合97婷婷| 国产精品国产自产拍高清av王其 | 一区二区三区中文字幕| 美腿丝袜亚洲色图| 91理论电影在线观看| 欧美videossexotv100| 亚洲综合av网| 成人国产精品免费观看视频| 91精品在线免费观看| 国产精品九色蝌蚪自拍| 国产一区二三区| 日韩欧美国产1| 亚洲va欧美va国产va天堂影院| 国产成人亚洲综合色影视| 在线视频国产一区| 久久尤物电影视频在线观看| 五月天婷婷综合| 欧美午夜精品免费| 亚洲欧美日韩小说| 成人app在线观看| 亚洲国产成人私人影院tom| 蜜桃免费网站一区二区三区| 欧美午夜电影在线播放| 亚洲品质自拍视频| 成人国产亚洲欧美成人综合网| 2022国产精品视频| 精品一区中文字幕| 日韩欧美一级二级三级久久久| 天天影视涩香欲综合网| 欧美亚洲动漫精品| 亚洲综合一区二区三区| 91在线无精精品入口| 亚洲欧洲性图库| 成人精品视频网站| 国产精品大尺度| 97国产一区二区|