advancedlg.cpp
来自「Visual C++编写的虚拟环绕声系统」· C++ 代码 · 共 2,022 行 · 第 1/5 页
CPP
2,022 行
GetDlgItem(ID_CDTRACK13_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK14_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK15_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK_STATIC)->DestroyWindow();
GetDlgItem(ID_CDMINUTE_STATIC)->DestroyWindow();
GetDlgItem(ID_CDSECOND_STATIC)->DestroyWindow();
GetDlgItem(ID_CDTRACKCOUNTER_STATIC)->DestroyWindow();
GetDlgItem(ID_CDMINUTECOUNTER_STATIC)->DestroyWindow();
GetDlgItem(ID_CDSECONDCOUNTER_STATIC)->DestroyWindow();
// 释放 CD 的工作缓冲区
for (i=0;i<DataBufferNumber;i++)
{
if ((CDDataHDR[i]->lpData)!=NULL)
{
GlobalUnlock(CDDataHDR[i]->lpData);
GlobalFree(CDDataHDR[i]->lpData);
}
waveInReset(hWaveIn);
waveInClose(hWaveIn);
waveOutReset(hWaveOut);
waveOutClose(hWaveOut);
}
}
// 为 WAV 申请工作缓冲区
for (i=0;i<DataBufferNumber;i++)
{
WAVDataHDR[i]=(LPWAVEHDR)GlobalAllocPtr(GMEM_MOVEABLE|GMEM_SHARE,sizeof(WAVEHDR));
WAVDataHDR[i]->lpData=(LPSTR)GlobalAllocPtr(GMEM_MOVEABLE|GMEM_SHARE,DataBufferSize);
ZeroMemory(WAVDataHDR[i]->lpData,DataBufferSize);
WAVDataHDR[i]->dwBufferLength=DataBufferSize;
WAVDataHDR[i]->dwBytesRecorded=0L;
WAVDataHDR[i]->dwFlags=0L;
WAVDataHDR[i]->dwLoops=0L;
}
// 为 WAVDelayData,TempData 分配空间
WAVDelayData=(LPWAVEHDR)GlobalAllocPtr(GMEM_MOVEABLE|GMEM_SHARE,sizeof(WAVEHDR));
WAVDelayData->lpData=(LPSTR)GlobalAllocPtr(GMEM_MOVEABLE|GMEM_SHARE,DataBufferSize);
ZeroMemory(WAVDelayData->lpData,DataBufferSize);
WAVDelayData->dwBufferLength=DataBufferSize;
WAVDelayData->dwBytesRecorded=0L;
WAVDelayData->dwFlags=0L;
WAVDelayData->dwLoops=0L;
TempData=(LPWAVEHDR)GlobalAllocPtr(GMEM_MOVEABLE|GMEM_SHARE,sizeof(WAVEHDR));
TempData->lpData=(LPSTR)GlobalAllocPtr(GMEM_MOVEABLE|GMEM_SHARE,DataBufferSize);
ZeroMemory(TempData->lpData,DataBufferSize);
TempData->dwBufferLength=DataBufferSize;
TempData->dwBytesRecorded=0L;
TempData->dwFlags=0L;
TempData->dwLoops=0L;
// 绘制 WAV 窗口
ScreenToClient(WAVWndRect);
WAVWnd.Create
("WAV",
WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_GROUPBOX,
WAVWndRect,
this,
ID_WAVWND_STATIC
);
// 绘制 WAV 窗口内的各个控件
// 绘制各个按钮控件
int WAVControlButtonNumber=4;
int WAVControlButtonWidth=WAVWndRect.Width()/(WAVControlButtonNumber+2);
int WAVControlButtonHeight=WAVWndRect.Height()/4;
CRect WAVControlButton;
// 绘制 WAV 窗口中的 PLAY 按钮
WAVControlButton.left =WAVWndRect.left+WAVControlButtonWidth;
WAVControlButton.top =WAVWndRect.top+WAVWndRect.Height()/2;
WAVControlButton.right =WAVControlButton.left+WAVControlButtonWidth;
WAVControlButton.bottom=WAVControlButton.top+WAVControlButtonHeight;
WAVPlay.Create
(
"Play",
WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON|BS_ICON,
WAVControlButton,
this,
ID_WAVPLAY_BUTTON
);
((CButton*)GetDlgItem(ID_WAVPLAY_BUTTON))->SetIcon(AfxGetApp()->LoadIcon(IDI_PLAY_ICON));
// 绘制 WAV 窗口中的 STOP 按钮
WAVControlButton.left =WAVControlButton.right;
WAVControlButton.right =WAVControlButton.left+WAVControlButtonWidth;
WAVStop.Create
(
"Stop",
WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON|BS_ICON,
WAVControlButton,
this,
ID_WAVSTOP_BUTTON
);
((CButton*)GetDlgItem(ID_WAVSTOP_BUTTON))->SetIcon(AfxGetApp()->LoadIcon(IDI_STOP_ICON));
// 绘制 WAV 窗口中的 PAUSE 按钮
WAVControlButton.left =WAVControlButton.right;
WAVControlButton.right =WAVControlButton.left+WAVControlButtonWidth;
WAVPause.Create
(
"Pause",
WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON|BS_ICON,
WAVControlButton,
this,
ID_WAVPAUSE_BUTTON
);
((CButton*)GetDlgItem(ID_WAVPAUSE_BUTTON))->SetIcon(AfxGetApp()->LoadIcon(IDI_PAUSE_ICON));
// 绘制 WAV 窗口中的 List 按钮
WAVControlButton.left =WAVControlButton.right;
WAVControlButton.right =WAVControlButton.left+WAVControlButtonWidth;
WAVList.Create
(
"Select Music",
WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON|BS_ICON,
WAVControlButton,
this,
ID_WAVLIST_BUTTON
);
((CButton*)GetDlgItem(ID_WAVLIST_BUTTON))->SetIcon(AfxGetApp()->LoadIcon(IDI_LIST_ICON));
// 绘制各个 静态文本(CStatic)说明框
CRect WAVStaticBox;
// 绘制 WAV 窗口中的 FilenameStatic 静态文本说明框
WAVStaticBox.left =WAVWndRect.left+WAVControlButtonWidth/2;
WAVStaticBox.top =WAVWndRect.top+WAVWndRect.Height()/5;
WAVStaticBox.right =WAVStaticBox.left+WAVControlButtonWidth*3/2;
WAVStaticBox.bottom=WAVStaticBox.top+WAVControlButtonHeight;
WAVFilenameStatic.Create
(
"FileName:",
WS_CHILD|WS_VISIBLE,
WAVStaticBox,
this,
ID_WAVFILENAME_STATIC
);
// 绘制 WAV 窗口中的 FilenameCounter 静态文本说明框
WAVStaticBox.left =WAVStaticBox.right;
WAVStaticBox.right =WAVStaticBox.left+WAVControlButtonWidth*7/2;
WAVFilenameCounter.Create
(
WAVFileName,
WS_CHILD|WS_VISIBLE|SS_LEFTNOWORDWRAP,
WAVStaticBox,
this,
ID_WAVFILENAMECOUNTER_STATIC
);
// 设置状态为 WORKSTATE_WAV
WorkState=WORKSTATE_WAV;
// 单声道延迟数据复位
WAVMonoDelay=44;
for(i=0;i<WAVMonoDelay*2;i++)
{
WAVMonoDelayData[i]=0;
WAVDelayMonoDelayData[i]=0;
}
// 设置 Paused 为‘未暂停’状态(FALSE)
Paused=FALSE;
// 画 WAV 初始界面的一幅画
CDC pDisplayMemDC;
CClientDC dc(this);
pBitmap.DeleteObject(); // 清除以前加载的位图
pBitmap.LoadBitmap(IDB_WAVBEGIN_BITMAP); // 加载新的位图
pDisplayMemDC.CreateCompatibleDC(&dc);
pDisplayMemDC.SelectObject(&pBitmap);
dc.BitBlt(15,10,100,90,&pDisplayMemDC,0,0,SRCCOPY);
RedrawMyself=TRUE;
// 声卡混音器控制
MIXERCONTROLDETAILS_BOOLEAN MyMixerControlDetails_f[20];
HMIXER hMixer;
UINT mmr;
// 打开 Mixer
mmr=mixerOpen
(
&hMixer,
0L,
(DWORD)m_hWnd,
0L,
CALLBACK_WINDOW
);
if (MMSYSERR_NOERROR != mmr)
{
MessageBox
(
" Unable To Open The Mixer. mixerOpen() Failed!",
NULL,
MB_OK|MB_ICONEXCLAMATION
);
}
// 使CD的音量静音/////恢复原有状态
MyMixerControlDetails_f[0].fValue = 1;
CDVolumeMuteControlDetails.paDetails=MyMixerControlDetails_f;
// CDVolumeMuteControlDetails.paDetails=&CDVolumeMuteOldState;
mmr = mixerSetControlDetails
(
(HMIXEROBJ)hMixer,
&CDVolumeMuteControlDetails,
MIXER_SETCONTROLDETAILSF_VALUE
);
if (MMSYSERR_NOERROR != mmr)
{
MessageBox
(
" Unable To Set The Mixer.\n mixerSetControlDetails() Failed\n Program May Be Abnormal!!",
NULL,
MB_OK|MB_ICONEXCLAMATION
);
}
// 使Line的音量静音/////恢复原有状态
MyMixerControlDetails_f[0].fValue = 1;
LineVolumeMuteControlDetails.paDetails=MyMixerControlDetails_f;
// LineVolumeMuteControlDetails.paDetails=&LineVolumeMuteOldState;
mmr = mixerSetControlDetails
(
(HMIXEROBJ)hMixer,
&LineVolumeMuteControlDetails,
MIXER_SETCONTROLDETAILSF_VALUE
);
if (MMSYSERR_NOERROR != mmr)
{
MessageBox
(
" Unable To Set The Mixer.\n mixerSetControlDetails() Failed\n Program May Be Abnormal!!",
NULL,
MB_OK|MB_ICONEXCLAMATION
);
}
// 使MIC的音量静音/////恢复原有状态
MyMixerControlDetails_f[0].fValue = 1;
MICVolumeMuteControlDetails.paDetails=MyMixerControlDetails_f;
// MICVolumeMuteControlDetails.paDetails=&MICVolumeMuteOldState;
mmr = mixerSetControlDetails((HMIXEROBJ)hMixer, &MICVolumeMuteControlDetails, MIXER_SETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR != mmr)
{
MessageBox
(
" Unable To Set The Mixer.\n mixerSetControlDetails() Failed\n Program May Be Abnormal!!",
NULL,
MB_OK|MB_ICONEXCLAMATION
);
}
// 关闭Mixer
mixerClose(hMixer);
}
////////////////
// MY CODE ENDS HERE
////////////////
}
void CAdvanceDlg::OnMicRadio()
{
// TODO: Add your control notification handler code here
/////////////
// MY CODE STARTS HERE
/////////////
int i;
// 如果没有处于 WORKSTATE_MIC 状态,则重新绘制控制面板
if (WorkState!=WORKSTATE_MIC)
{
CRect MICWndRect;
// 如果处于 WORKSTATE_INTRODUCE 状态,取得窗口大小后,
// 删除 INTRODUCE 窗口
if (WorkState==WORKSTATE_INTRODUCE)
{
CWnd* IntroduceWndPointer;
IntroduceWndPointer=GetDlgItem(IDC_INTRODUCE_STATIC);
IntroduceWndPointer->GetWindowRect(&MICWndRect);
IntroduceWndPointer->DestroyWindow();
GetDlgItem(IDC_BEGIN_STATIC)->DestroyWindow();
}
// 如果处于 WORKSTATE_LINE 状态,取得窗口大小后,
// 删除 LINE 窗口
if (WorkState==WORKSTATE_LINE)
{
CWnd* LineWndPointer;
LineWndPointer=GetDlgItem(ID_LINEWND_STATIC);
LineWndPointer->GetWindowRect(&MICWndRect);
LineWndPointer->DestroyWindow();
GetDlgItem(ID_LINEINTRODUCE_STATIC)->DestroyWindow();
GetDlgItem(ID_LINEPLAY_BUTTON)->DestroyWindow();
GetDlgItem(ID_LINESTOP_BUTTON)->DestroyWindow();
// 释放 LINE 的工作缓冲区
for (i=0;i<DataBufferNumber;i++)
{
if ((LineDataHDR[i]->lpData)!=NULL)
{
GlobalUnlock(LineDataHDR[i]->lpData);
GlobalFree(LineDataHDR[i]->lpData);
}
waveInReset(hWaveIn);
waveInClose(hWaveIn);
waveOutReset(hWaveOut);
waveOutClose(hWaveOut);
}
}
// 如果处于 WORKSTATE_WAV 状态,取得窗口大小后,
// 删除 WAV 窗口以及 WAV 窗口内的所有控件
if (WorkState==WORKSTATE_WAV)
{
CWnd* WAVWndPointer;
WAVWndPointer=GetDlgItem(ID_WAVWND_STATIC);
WAVWndPointer->GetWindowRect(&MICWndRect);
WAVWndPointer->DestroyWindow();
GetDlgItem(ID_WAVPLAY_BUTTON)->DestroyWindow();
GetDlgItem(ID_WAVSTOP_BUTTON)->DestroyWindow();
GetDlgItem(ID_WAVPAUSE_BUTTON)->DestroyWindow();
GetDlgItem(ID_WAVLIST_BUTTON)->DestroyWindow();
GetDlgItem(ID_WAVFILENAME_STATIC)->DestroyWindow();
GetDlgItem(ID_WAVFILENAMECOUNTER_STATIC)->DestroyWindow();
// 释放 WAV, WAVDelayData, TempData 的工作缓冲区
for (i=0;i<DataBufferNumber;i++)
{
if ((WAVDataHDR[i]->lpData)!=NULL)
{
GlobalUnlock(WAVDataHDR[i]->lpData);
GlobalFree(WAVDataHDR[i]->lpData);
}
waveOutReset(hWaveOut);
waveOutClose(hWaveOut);
}
if ((WAVDelayData->lpData)!=NULL) GlobalFreePtr(WAVDelayData);
if ((TempData->lpData)!=NULL) GlobalFreePtr(TempData);
}
// 如果处于 WORKSTATE_CD 状态,取得窗口大小后,
// 删除 CD 窗口以及 CD 窗口内的所有控件
if (WorkState==WORKSTATE_CD)
{
CWnd* CDWndPointer;
CDWndPointer=GetDlgItem(ID_CDWND_STATIC);
CDWndPointer->GetWindowRect(&MICWndRect);
CDWndPointer->DestroyWindow();
GetDlgItem(ID_CDPLAY_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDSTOP_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDPAUSE_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDPRIE_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDNEXT_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK1_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK2_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK3_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK4_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK5_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK6_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK7_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK8_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK9_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK10_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK11_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK12_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK13_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK14_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK15_BUTTON)->DestroyWindow();
GetDlgItem(ID_CDTRACK_STATIC)->DestroyWindow();
GetDlgItem(ID_CDMINUTE_STATIC)->DestroyWindow();
GetDlgItem(ID_CDSECOND_STATIC)->DestroyWindow();
GetDlgItem(ID_CDTRACKCOUNTER_STATIC)->DestroyWindow();
GetDlgItem(ID_CDMINUTECOUNTER_STATIC)->DestroyWindow();
GetDlgItem(ID_CDSECONDCOUNTER_STATIC)->DestroyWindow();
// 释放 CD 的工作缓冲区
for (i=0;i<DataBufferNumber;i++)
{
if ((CDDataHDR[i]->lpData)!=NULL)
{
GlobalUnlock(CDDataHDR[i]->lpData);
GlobalFree(CDDataHDR[i]->lpData);
}
waveInReset(hWaveIn);
waveInClose(hWaveIn);
waveOutReset(hWaveOut);
waveOutClose(hWaveOut);
}
}
// 绘制 MIC 窗口
ScreenToClient(MICWndRect);
MICWnd.Create
("MIC",
WS_CHILD|WS_VISIBLE|BS_GROUPBOX,
MICWndRect,
this,
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?