?? oscilloscopedlg.cpp
字號:
void COscilloscopeDlg::OnChannel(UINT nID)
{
// TODO: Add your control notification handler code here
int index = nID-IDC_CHONE;
if (index == 0)
m_ChOneRndBtn.SetLighted(!m_ChOneRndBtn.GetLightedState());
else if(index == 1)
m_ChTwoRndBtn.SetLighted(!m_ChTwoRndBtn.GetLightedState());
else if(index == 2)
m_ChThreeRndBtn.SetLighted(!m_ChThreeRndBtn.GetLightedState());
m_bChannel[index] = !m_bChannel[index];
m_ctrlCurveFrame.SetCurveChannel(m_bChannel[0],m_bChannel[1],m_bChannel[2]);
}
void COscilloscopeDlg::OnSelchangeCmbSignaltype()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
//波形數據
Signal[m_nCurChannel].SignalType = m_btnSignalType.GetCurSel();
}
//當窗口需要確定鼠標位置時Windows向窗口發送WM_NCHITTEST信息,
//可以處理該信息使Windows認為鼠標在窗口標題上。
//對于對話框和基于對話的應用程序,可以使用ClassWizard處理該消息并調用基類函數,
//如果函數返回HTCLIENT則表明鼠標在客戶區,
//返回HTCAPTION表明鼠標在Windows的標題欄中。
UINT COscilloscopeDlg::OnNcHitTest(CPoint point)
{
UINT nHitTest = CBitmapDialog::OnNcHitTest(point);
return (nHitTest == HTCLIENT)?HTCAPTION:nHitTest;
}
/////////////////////////////////////////////////////////////////////////////
/*
函數介紹: 屏蔽在對話框上按ESC時,退出對話框
*/
/////////////////////////////////////////////////////////////////////////////
BOOL COscilloscopeDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
int nKey = (int) pMsg->wParam;
if(VK_ESCAPE == nKey)
return TRUE;
}
return CBitmapDialog::PreTranslateMessage(pMsg);
}
void COscilloscopeDlg::OnSize(UINT nType, int cx, int cy)
{
CBitmapDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
Invalidate();
}
void COscilloscopeDlg::OnBtnFreqsignal()
{
Signal[m_nCurChannel].Frequency = m_btnFreqSignal.GetData();
m_nNumPerCircle[m_nCurChannel] = (int)(m_btnFreqSample.GetData()/Signal[m_nCurChannel].Frequency);
m_nCurNumOfSample[m_nCurChannel] = 0;//當改變信號頻率后,從0度重新開始產生波形
}
void COscilloscopeDlg::OnBtnAmplitude()
{
Signal[m_nCurChannel].Amplitude = m_btnAmplitude.GetData();
}
void COscilloscopeDlg::OnBtnOffset()
{
// TODO: Add your control notification handler code here
Signal[m_nCurChannel].Offset = m_btnOffset.GetData();
}
void COscilloscopeDlg::OnBtnPhase()
{
// TODO: Add your control notification handler code here
Signal[m_nCurChannel].Phase = m_btnPhase.GetData();
}
void COscilloscopeDlg::OnBtnWidth()
{
// TODO: Add your control notification handler code here
m_ctrlCurveFrame.SetCurveWidth(int(m_btnWidth.GetData()), m_nCurChannel);
}
void COscilloscopeDlg::OnBtnFreqsample()
{
// TODO: Add your control notification handler code here
double tmp = m_btnFreqSample.GetData();
UpdateData(TRUE);
if (m_btnFreqSample.GetData() <= 2*Signal[0].Frequency ||
m_btnFreqSample.GetData() <= 2*Signal[1].Frequency ||
m_btnFreqSample.GetData() <= 2*Signal[2].Frequency)
{
MessageBox("輸入的采樣頻率不能滿足采樣定律!");
m_btnFreqSample.SetData(tmp);
UpdateData(FALSE);
}
else
{
for(int i=0; i<3; i++)
{
m_nNumPerCircle[i] = (int)(m_btnFreqSample.GetData()/Signal[i].Frequency);
Signal[i].Number = int(m_btnFreqSample.GetData()*100/1000);//采樣頻率*每屏的時間/1000
m_nCurNumOfSample[i] = 0;//當改變擦采樣頻率后,從0度重新開始產生波形
}
}
}
void COscilloscopeDlg::SaveDlgItemRect(CDialog *pDlg, int firstItem, int lastItem)
{
int nNumOfItem = lastItem - firstItem + 1;
for(int i=0; i<nNumOfItem; i++)
{
pDlg->GetDlgItem(firstItem + i)->GetClientRect(&rcItem[i]);
ClientToScreen(rcItem[i]);
}
pDlg->GetClientRect(&rcDlg);
ClientToScreen(rcDlg);
}
void COscilloscopeDlg::ResizeDlgItem(CDialog *pDlg, int firstItem, int lastItem)
{
int nNumOfItem = lastItem - firstItem + 1;
for(int i=0; i<nNumOfItem+1; i++)
{
pDlg->GetDlgItem(firstItem + i)->GetClientRect(&rcItem[i]);
}
}
void COscilloscopeDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
// Get the minimum and maximum scroll-bar positions.
int minpos;
int maxpos;
pScrollBar->GetScrollRange(&minpos, &maxpos);
maxpos = pScrollBar->GetScrollLimit();
// Get the current position of scroll box.
int curpos = pScrollBar->GetScrollPos();
// Determine the new position of scroll box.
switch (nSBCode)
{
case SB_LEFT: // Scroll to far left.
curpos = minpos;
break;
case SB_RIGHT: // Scroll to far right.
curpos = maxpos;
break;
case SB_ENDSCROLL: // End scroll.
break;
case SB_LINELEFT: // Scroll left.
if (curpos > minpos)
curpos--;
break;
case SB_LINERIGHT: // Scroll right.
if (curpos < maxpos)
curpos++;
break;
case SB_PAGELEFT: // Scroll one page left.
{
// Get the page size.
SCROLLINFO info;
pScrollBar->GetScrollInfo(&info, SIF_ALL);
if (curpos > minpos)
curpos = max(minpos, curpos - (int) info.nPage);
}
break;
case SB_PAGERIGHT: // Scroll one page right.
{
// Get the page size.
SCROLLINFO info;
pScrollBar->GetScrollInfo(&info, SIF_ALL);
if (curpos < maxpos)
curpos = min(maxpos, curpos + (int) info.nPage);
}
break;
case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
curpos = nPos; // of the scroll box at the end of the drag operation.
break;
case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the
curpos = nPos; // position that the scroll box has been dragged to.
break;
}
// Set the new position of the thumb (scroll box).
pScrollBar->SetScrollPos(curpos);
m_ctrlCurveFrame.DrawCurve(RetriveSignal[curpos][0].Data, RetriveSignal[curpos][0].Number,
RetriveSignal[curpos][1].Data, RetriveSignal[curpos][1].Number,
RetriveSignal[curpos][2].Data, RetriveSignal[curpos][2].Number,
m_btnFreqSample.GetData());
CBitmapDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void COscilloscopeDlg::SaveSignal(_Signal signal0, _Signal signal1, _Signal signal2)
{
int i,j,k;
if(nTimes < 5)
{
RetriveSignal[nTimes][0].Amplitude = signal0.Amplitude;
RetriveSignal[nTimes][0].Frequency = signal0.Frequency;
RetriveSignal[nTimes][0].Number = signal0.Number;
RetriveSignal[nTimes][0].Offset = signal0.Offset;
RetriveSignal[nTimes][0].Phase = signal0.Phase;
RetriveSignal[nTimes][0].SignalType = signal0.SignalType;
for(i=0; i<1024; i++)
RetriveSignal[nTimes][0].Data[i] = signal0.Data[i];
RetriveSignal[nTimes][1].Amplitude = signal1.Amplitude;
RetriveSignal[nTimes][1].Frequency = signal1.Frequency;
RetriveSignal[nTimes][1].Number = signal1.Number;
RetriveSignal[nTimes][1].Offset = signal1.Offset;
RetriveSignal[nTimes][1].Phase = signal1.Phase;
RetriveSignal[nTimes][1].SignalType = signal1.SignalType;
for(i=0; i<1024; i++)
RetriveSignal[nTimes][1].Data[i] = signal1.Data[i];
RetriveSignal[nTimes][2].Amplitude = signal2.Amplitude;
RetriveSignal[nTimes][2].Frequency = signal2.Frequency;
RetriveSignal[nTimes][2].Number = signal2.Number;
RetriveSignal[nTimes][2].Offset = signal2.Offset;
RetriveSignal[nTimes][2].Phase = signal2.Phase;
RetriveSignal[nTimes][2].SignalType = signal2.SignalType;
for(i=0; i<1024; i++)
RetriveSignal[nTimes][2].Data[i] = signal2.Data[i];
nTimes ++;
}
else
{
for(i=0; i<4; i++)
{
RetriveSignal[i][0].Amplitude = RetriveSignal[i+1][0].Amplitude;
RetriveSignal[i][0].Frequency = RetriveSignal[i+1][0].Frequency;
RetriveSignal[i][0].Number = RetriveSignal[i+1][0].Number;
RetriveSignal[i][0].Offset = RetriveSignal[i+1][0].Offset;
RetriveSignal[i][0].Phase = RetriveSignal[i+1][0].Phase;
RetriveSignal[i][0].SignalType = RetriveSignal[i+1][0].SignalType;
for(k=0; k<1024; k++)
RetriveSignal[i][0].Data[k] = RetriveSignal[i+1][0].Data[k];
RetriveSignal[i][1].Amplitude = RetriveSignal[i+1][1].Amplitude;
RetriveSignal[i][1].Frequency = RetriveSignal[i+1][1].Frequency;
RetriveSignal[i][1].Number = RetriveSignal[i+1][1].Number;
RetriveSignal[i][1].Offset = RetriveSignal[i+1][1].Offset;
RetriveSignal[i][1].Phase = RetriveSignal[i+1][1].Phase;
RetriveSignal[i][1].SignalType = RetriveSignal[i+1][1].SignalType;
for(k=0; k<1024; k++)
RetriveSignal[i][1].Data[k] = RetriveSignal[i+1][1].Data[k];
RetriveSignal[i][2].Amplitude = RetriveSignal[i+1][2].Amplitude;
RetriveSignal[i][2].Frequency = RetriveSignal[i+1][2].Frequency;
RetriveSignal[i][2].Number = RetriveSignal[i+1][2].Number;
RetriveSignal[i][2].Offset = RetriveSignal[i+1][2].Offset;
RetriveSignal[i][2].Phase = RetriveSignal[i+1][2].Phase;
RetriveSignal[i][2].SignalType = RetriveSignal[i+1][2].SignalType;
for(k=0; k<1024; k++)
RetriveSignal[i][2].Data[k] = RetriveSignal[i+1][2].Data[k];
}
RetriveSignal[4][0].Amplitude = signal0.Amplitude;
RetriveSignal[4][0].Frequency = signal0.Frequency;
RetriveSignal[4][0].Number = signal0.Number;
RetriveSignal[4][0].Offset = signal0.Offset;
RetriveSignal[4][0].Phase = signal0.Phase;
RetriveSignal[4][0].SignalType = signal0.SignalType;
for(j=0; j<1024; j++)
RetriveSignal[4][0].Data[j] = signal0.Data[j];
RetriveSignal[4][1].Amplitude = signal1.Amplitude;
RetriveSignal[4][1].Frequency = signal1.Frequency;
RetriveSignal[4][1].Number = signal1.Number;
RetriveSignal[4][1].Offset = signal1.Offset;
RetriveSignal[4][1].Phase = signal1.Phase;
RetriveSignal[4][1].SignalType = signal1.SignalType;
for(j=0; j<1024; j++)
RetriveSignal[4][1].Data[j] = signal1.Data[j];
RetriveSignal[4][2].Amplitude = signal2.Amplitude;
RetriveSignal[4][2].Frequency = signal2.Frequency;
RetriveSignal[4][2].Number = signal2.Number;
RetriveSignal[4][2].Offset = signal2.Offset;
RetriveSignal[4][2].Phase = signal2.Phase;
RetriveSignal[4][2].SignalType = signal2.SignalType;
for(j=0; j<1024; j++)
RetriveSignal[4][2].Data[j] = signal2.Data[j];
}
}
void COscilloscopeDlg::OnBtnChanel()
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
UpdateData(TRUE);
//保存前一通道的數據
//波形顯示數據
m_ctrlCurveFrame.SetCurveWidth(UINT(m_btnWidth.GetData()), m_nCurChannel);
m_ctrlCurveFrame.SetCurveColor(m_Color, m_nCurChannel);
//波形數據
Signal[m_nCurChannel].SignalType = m_btnSignalType.GetCurSel();
Signal[m_nCurChannel].Amplitude = m_btnAmplitude.GetData();
Signal[m_nCurChannel].Frequency = m_btnFreqSignal.GetData();
Signal[m_nCurChannel].Offset = m_btnOffset.GetData();
Signal[m_nCurChannel].Phase = m_btnPhase.GetData();
//取得當前通道號,并顯示當前通道的數據
m_nCurChannel = m_btnChannel.GetCurSel();;
//波形顯示數據
UINT width;
m_ctrlCurveFrame.GetCurveWidth(width, m_nCurChannel);
m_btnWidth.SetData(double(width));
m_ctrlCurveFrame.GetCurveColor(m_Color, m_nCurChannel);
//波形數據
m_btnChannel.SetCurSel(m_nCurChannel);
m_btnSignalType.SetCurSel(Signal[m_nCurChannel].SignalType);
m_btnAmplitude.SetData(Signal[m_nCurChannel].Amplitude);
m_btnFreqSignal.SetData(Signal[m_nCurChannel].Frequency);
m_btnOffset.SetData(Signal[m_nCurChannel].Offset);
m_btnPhase.SetData(Signal[m_nCurChannel].Phase);
UpdateData(FALSE);
SendMessage(WM_PAINT);}
void COscilloscopeDlg::OnBtnSignaltype()
{
// TODO: Add your control notification handler code here
//波形數據
Signal[m_nCurChannel].SignalType = m_btnSignalType.GetCurSel();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -