advancedlg.cpp
来自「Visual C++编写的虚拟环绕声系统」· C++ 代码 · 共 2,022 行 · 第 1/5 页
CPP
2,022 行
this,
ID_CDTRACK12_BUTTON
);
// 绘制 CD 窗口中的 Track13 按钮
CDTrackButton.left =CDTrackButton.right;
CDTrackButton.right =CDTrackButton.left+TrackButtonWidth;
CDTrack13.Create
(
"13",
WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON,
CDTrackButton,
this,
ID_CDTRACK13_BUTTON
);
// 绘制 CD 窗口中的 Track14 按钮
CDTrackButton.left =CDTrackButton.right;
CDTrackButton.right =CDTrackButton.left+TrackButtonWidth;
CDTrack14.Create
(
"14",
WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON,
CDTrackButton,
this,
ID_CDTRACK14_BUTTON
);
// 绘制 CD 窗口中的 Track15 按钮
CDTrackButton.left =CDTrackButton.right;
CDTrackButton.right =CDTrackButton.left+TrackButtonWidth;
CDTrack15.Create
(
"15",
WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_PUSHBUTTON,
CDTrackButton,
this,
ID_CDTRACK15_BUTTON
);
// 绘制各个 静态文本(CStatic)说明框
CRect CDStaticBox;
// 绘制 CD 窗口中的 TrackStatic 静态文本说明框
CDStaticBox.left =CDWndRect.left+CDControlButtonWidth/2;
CDStaticBox.top =CDWndRect.top+CDWndRect.Height()/5;
CDStaticBox.right =CDStaticBox.left+CDControlButtonWidth;
CDStaticBox.bottom=CDStaticBox.top+CDControlButtonHeight;
CDTrackStatic.Create
(
"Track",
WS_CHILD|WS_VISIBLE,
CDStaticBox,
this,
ID_CDTRACK_STATIC
);
// 绘制 CD 窗口中的 TrackCounter 静态文本说明框
CDStaticBox.left +=CDControlButtonWidth;
CDStaticBox.right =CDStaticBox.left+CDControlButtonWidth;
CDTrackCounter.Create
(
"1",
WS_CHILD|WS_VISIBLE|SS_LEFTNOWORDWRAP,
CDStaticBox,
this,
ID_CDTRACKCOUNTER_STATIC
);
// 绘制 CD 窗口中的 MinuteStatic 静态文本说明框
CDStaticBox.left +=CDControlButtonWidth;
CDStaticBox.right =CDStaticBox.left+CDControlButtonWidth;
CDMinuteStatic.Create
(
"Minute",
WS_CHILD|WS_VISIBLE,
CDStaticBox,
this,
ID_CDMINUTE_STATIC
);
// 绘制 CD 窗口中的 MinuteCounter 静态文本说明框
CDStaticBox.left +=CDControlButtonWidth;
CDStaticBox.right =CDStaticBox.left+CDControlButtonWidth;
CDMinuteCounter.Create
(
"0",
WS_CHILD|WS_VISIBLE|SS_LEFTNOWORDWRAP,
CDStaticBox,
this,
ID_CDMINUTECOUNTER_STATIC
);
// 绘制 CD 窗口中的 SecondStatic 静态文本说明框
CDStaticBox.left +=CDControlButtonWidth;
CDStaticBox.right =CDStaticBox.left+CDControlButtonWidth;
CDSecondStatic.Create
(
"Second",
WS_CHILD|WS_VISIBLE,
CDStaticBox,
this,
ID_CDSECOND_STATIC
);
// 绘制 CD 窗口中的 Secondounter 静态文本说明框
CDStaticBox.left +=CDControlButtonWidth;
CDStaticBox.right =CDStaticBox.left+CDControlButtonWidth/2;
CDSecondCounter.Create
(
"0",
WS_CHILD|WS_VISIBLE|SS_LEFTNOWORDWRAP,
CDStaticBox,
this,
ID_CDSECONDCOUNTER_STATIC
);
// 为 CD 申请工作缓冲区
for (i=0;i<DataBufferNumber;i++)
{
CDDataHDR[i]=(LPWAVEHDR)GlobalAllocPtr(GMEM_MOVEABLE|GMEM_SHARE,sizeof(WAVEHDR));
CDDataHDR[i]->lpData=(LPSTR)GlobalAllocPtr(GMEM_MOVEABLE|GMEM_SHARE,DataBufferSize);
CDDataHDR[i]->dwBufferLength=DataBufferSize;
CDDataHDR[i]->dwBytesRecorded=0L;
CDDataHDR[i]->dwFlags=0L;
CDDataHDR[i]->dwLoops=0L;
}
// 设置状态为 WORKSTATE_CD
WorkState=WORKSTATE_CD;
// 设置 Paused 为‘未暂停’状态(FALSE)
Paused=FALSE;
// 设置初始Track,TotalTrack
Track=1;
TotalTrack=15;
// 画 CD 初始界面的一幅画
CDC pDisplayMemDC;
CClientDC dc(this);
pBitmap.DeleteObject(); // 清除以前加载的位图
pBitmap.LoadBitmap(IDB_CDBEGIN_BITMAP); // 加载新的位图
pDisplayMemDC.CreateCompatibleDC(&dc);
pDisplayMemDC.SelectObject(&pBitmap);
dc.BitBlt(15,10,100,90,&pDisplayMemDC,0,0,SRCCOPY);
RedrawMyself=TRUE;
// 声卡混音器控制
HMIXER hMixer;
MIXERCONTROLDETAILS_BOOLEAN MyMixerControlDetails_f[20];
MIXERCONTROLDETAILS_UNSIGNED MyMixerControlDetails_u[2];
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;
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
);
}
// 使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
);
}
// 使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
);
}
// 设置CD为录音声源
for (i=0;i<20;i++)
MyMixerControlDetails_f[i].fValue=0;
MyMixerControlDetails_f[CDRecordItemID].fValue=1;
RecordControlDetails.paDetails=MyMixerControlDetails_f;
mmr = mixerSetControlDetails
(
(HMIXEROBJ)hMixer,
&RecordControlDetails,
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
);
}
// 设置CD录音音量为0
MyMixerControlDetails_u[0].dwValue=10000;
MyMixerControlDetails_u[1].dwValue=10000;
CDRecordVolumeControlDetails.paDetails=MyMixerControlDetails_u;
mmr = mixerSetControlDetails
(
(HMIXEROBJ)hMixer,
&CDRecordVolumeControlDetails,
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录音的原有音量
MICRecordVolumeControlDetails.paDetails=MICRecordVolumeOldState;
mmr = mixerSetControlDetails
(
(HMIXEROBJ)hMixer,
&MICRecordVolumeControlDetails,
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录音的原有音量
LineRecordVolumeControlDetails.paDetails=LineRecordVolumeOldState;
mmr = mixerSetControlDetails
(
(HMIXEROBJ)hMixer,
&LineRecordVolumeControlDetails,
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::OnWavRadio()
{
// TODO: Add your control notification handler code here
////////////////
// MY CODE STARTS HERE
////////////////
int i;
// 如果没有处于 WORKSTATE_WAV 状态,则重新绘制控制面板
if (WorkState!=WORKSTATE_WAV)
{
CRect WAVWndRect;
// 如果处于 WORKSTATE_INTRODUCE 状态,取得窗口大小后,
// 删除 INTRODUCE 窗口
if (WorkState==WORKSTATE_INTRODUCE)
{
CWnd* IntroduceWndPointer;
IntroduceWndPointer=GetDlgItem(IDC_INTRODUCE_STATIC);
IntroduceWndPointer->GetWindowRect(&WAVWndRect);
IntroduceWndPointer->DestroyWindow();
GetDlgItem(IDC_BEGIN_STATIC)->DestroyWindow();
}
// 如果处于 WORKSTATE_MIC 状态,取得窗口大小后,
// 删除 MIC 窗口
if (WorkState==WORKSTATE_MIC)
{
CWnd* MICWndPointer;
MICWndPointer=GetDlgItem(ID_MICWND_STATIC);
MICWndPointer->GetWindowRect(&WAVWndRect);
MICWndPointer->DestroyWindow();
GetDlgItem(ID_MICINTRODUCE_STATIC)->DestroyWindow();
GetDlgItem(ID_MICPLAY_BUTTON)->DestroyWindow();
GetDlgItem(ID_MICSTOP_BUTTON)->DestroyWindow();
// 释放 MIC 的工作缓冲区
for (i=0;i<DataBufferNumber;i++)
{
if ((MICDataHDR[i]->lpData)!=NULL)
{
GlobalUnlock(MICDataHDR[i]->lpData);
GlobalFree(MICDataHDR[i]->lpData);
}
waveInReset(hWaveIn);
waveInClose(hWaveIn);
waveOutReset(hWaveOut);
waveOutClose(hWaveOut);
}
}
// 如果处于 WORKSTATE_LINE 状态,取得窗口大小后,
// 删除 LINE 窗口
if (WorkState==WORKSTATE_LINE)
{
CWnd* LineWndPointer;
LineWndPointer=GetDlgItem(ID_LINEWND_STATIC);
LineWndPointer->GetWindowRect(&WAVWndRect);
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_CD 状态,取得窗口大小后,
// 删除 CD 窗口以及 CD 窗口内的所有控件
if (WorkState==WORKSTATE_CD)
{
CWnd* CDWndPointer;
CDWndPointer=GetDlgItem(ID_CDWND_STATIC);
CDWndPointer->GetWindowRect(&WAVWndRect);
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();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?