change: option from controlview to mainframe;
fix: bugs known; add: accelerator
This commit is contained in:
parent
88415085c5
commit
34b824fddf
22
ChangeLog.md
22
ChangeLog.md
|
@ -25,24 +25,4 @@
|
|||
|
||||
### 6.2
|
||||
* 曲线平滑
|
||||
|
||||
## Features
|
||||
- [x] 菜单栏、工具栏
|
||||
- [x] 信息显示与结束判断
|
||||
- [x] 全谱与局部谱
|
||||
- [x] 光标与ROI选取
|
||||
- [x] 量程
|
||||
- [x] 对数坐标轴
|
||||
- [x] 读取与保存
|
||||
- [x] 模拟信号
|
||||
- [ ] 高斯拟合寻峰
|
||||
- [x] 曲线平滑
|
||||
|
||||
## Bugs
|
||||
- [ ] 点击其他视图时,工具栏(ToolBar)和菜单栏(Menu)无法使用,失去焦点
|
||||
- [ ] 最开始无法通过方向键左右移动或调整量程
|
||||
- [ ] 停止后ControlView无法更新
|
||||
- [ ] 停止后平滑曲线无法更新
|
||||
- [x] 保存文件乱码
|
||||
- [x] 退出询问保存
|
||||
- [ ] 读取文件后刷新视图无效
|
||||
* 加载与保存数据
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "MCA.h"
|
||||
#include "MCADoc.h"
|
||||
#include "MainFrm.h"
|
||||
#include "DetailView.h"
|
||||
#include "ControlView.h"
|
||||
|
||||
// CControlView
|
||||
|
@ -58,37 +59,6 @@ void CControlView::DoDataExchange(CDataExchange* pDX)
|
|||
|
||||
BEGIN_MESSAGE_MAP(CControlView, CFormView)
|
||||
ON_WM_SIZE()
|
||||
ON_WM_TIMER()
|
||||
|
||||
ON_COMMAND(ID_FILE_OPEN, &CControlView::OnFileOpen)
|
||||
ON_COMMAND(ID_FILE_SAVE, &CControlView::OnFileSave)
|
||||
ON_COMMAND(ID_STA_START, &CControlView::OnStaStart)
|
||||
ON_COMMAND(ID_STA_STOP, &CControlView::OnStaStop)
|
||||
ON_COMMAND(ID_STA_CLEAR, &CControlView::OnStaClear)
|
||||
ON_COMMAND(ID_SIMU_CO, &CControlView::OnSimuCo)
|
||||
ON_COMMAND(ID_SIMU_CS, &CControlView::OnSimuCs)
|
||||
ON_COMMAND(ID_SIMU_NA, &CControlView::OnSimuNa)
|
||||
ON_COMMAND(ID_AXIS_LINEAR, &CControlView::OnAxisLinear)
|
||||
ON_COMMAND(ID_AXIS_LOG, &CControlView::OnAxisLog)
|
||||
ON_COMMAND(ID_RANGE_AUTO, &CControlView::OnRangeAuto)
|
||||
ON_COMMAND(ID_RANGE_D4, &CControlView::OnRangeD4)
|
||||
ON_COMMAND(ID_RANGE_D2, &CControlView::OnRangeD2)
|
||||
ON_COMMAND(ID_RANGE_M2, &CControlView::OnRangeM2)
|
||||
ON_COMMAND(ID_RANGE_M4, &CControlView::OnRangeM4)
|
||||
ON_COMMAND(ID_DATA_ORIGIN, &CControlView::OnDataOrigin)
|
||||
ON_COMMAND(ID_DATA_3, &CControlView::OnData3)
|
||||
ON_COMMAND(ID_DATA_5, &CControlView::OnData5)
|
||||
|
||||
ON_UPDATE_COMMAND_UI(ID_STA_START, &CControlView::OnUpdateStaStart)
|
||||
ON_UPDATE_COMMAND_UI(ID_STA_STOP, &CControlView::OnUpdateStaStop)
|
||||
ON_UPDATE_COMMAND_UI(ID_STA_CLEAR, &CControlView::OnUpdateStaClear)
|
||||
ON_UPDATE_COMMAND_UI(ID_SIMU_CO, &CControlView::OnUpdateSimuCo)
|
||||
ON_UPDATE_COMMAND_UI(ID_SIMU_CS, &CControlView::OnUpdateSimuCs)
|
||||
ON_UPDATE_COMMAND_UI(ID_SIMU_NA, &CControlView::OnUpdateSimuNa)
|
||||
ON_UPDATE_COMMAND_UI(ID_RANGE_AUTO, &CControlView::OnUpdateRangeAuto)
|
||||
ON_UPDATE_COMMAND_UI(ID_DATA_ORIGIN, &CControlView::OnUpdateDataOrigin)
|
||||
ON_UPDATE_COMMAND_UI(ID_DATA_3, &CControlView::OnUpdateData3)
|
||||
ON_UPDATE_COMMAND_UI(ID_DATA_5, &CControlView::OnUpdateData5)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
// CControlView 诊断
|
||||
|
@ -107,42 +77,9 @@ void CControlView::Dump(CDumpContext& dc) const
|
|||
#endif
|
||||
#endif //_DEBUG
|
||||
|
||||
int CControlView::roundupPowerof2(int val)
|
||||
void CControlView::SetCond(BOOL flag)
|
||||
{
|
||||
if ((val & (val - 1)) == 0) return val;
|
||||
int andv = 1 << 30;
|
||||
while ((andv & val) == 0) andv = andv >> 1;
|
||||
return andv << 1;
|
||||
}
|
||||
|
||||
double CControlView::GetMilliTime()
|
||||
{
|
||||
std::chrono::milliseconds ms = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||
std::chrono::system_clock::now().time_since_epoch()
|
||||
);
|
||||
return ms.count() / 1000.;
|
||||
}
|
||||
|
||||
void CControlView::UpdateValue()
|
||||
{
|
||||
// 更新信息
|
||||
m_nTotalCount = pDoc->GetTotal(0, 1023);
|
||||
m_nMaxCount = pDoc->GetMax(0, 1023);
|
||||
m_nPartCount = pDoc->GetTotal(m_nCursor1, m_nCursor2);
|
||||
m_nCursorROICount = pDoc->m_nChannelCount[m_nCursorROI];
|
||||
|
||||
m_nTime += GetMilliTime() - m_nT0;
|
||||
m_nTimeStr.Format(_T("%.1f"), m_nTime);
|
||||
m_nT0 = GetMilliTime();
|
||||
|
||||
// 更新屏幕信息
|
||||
UpdateData(FALSE);
|
||||
}
|
||||
|
||||
void CControlView::SaveFirst()
|
||||
{
|
||||
int res = MessageBox(TEXT("打开前是否保存?"), TEXT("保存文件"), MB_YESNO | MB_ICONQUESTION);
|
||||
if (res == IDYES) OnFileSave();
|
||||
((CEdit*)GetDlgItem(IDC_COND))->EnableWindow(flag);
|
||||
}
|
||||
|
||||
// CControlView 消息处理程序
|
||||
|
@ -170,339 +107,8 @@ void CControlView::OnInitialUpdate()
|
|||
m_ComboAxis.AddString((CString)"线性");
|
||||
m_ComboAxis.AddString((CString)"对数");
|
||||
m_ComboAxis.SetCurSel(0);
|
||||
|
||||
m_Menu.LoadMenuW(IDR_MAINFRAME);
|
||||
m_wndToolBar.LoadToolBar(IDR_MAINFRAME);
|
||||
SetMenu(&m_Menu);
|
||||
}
|
||||
|
||||
void CControlView::OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/)
|
||||
{
|
||||
}
|
||||
|
||||
void CControlView::OnTimer(UINT_PTR nIDEvent)
|
||||
{
|
||||
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||
|
||||
pDoc->SetModifiedFlag(TRUE);
|
||||
|
||||
// 生成随机信号
|
||||
int n = rand() % 50 + 25;
|
||||
pDoc->RandomPeak(m_sSource, n);
|
||||
|
||||
// 平滑数据
|
||||
for (int i = 0; i < 1024; i++) pDoc->m_nChannelSmooth[i] = pDoc->m_nChannelCount[i];
|
||||
OutputDebugString(m_sSmoothType);
|
||||
if (m_sSmoothType == "S3") {
|
||||
pDoc->m_nChannelSmooth[0] = (5.0 * pDoc->m_nChannelCount[0] + 2.0 * pDoc->m_nChannelCount[1] - pDoc->m_nChannelCount[2]) / 6.0;
|
||||
for (int i = 1; i < 1023; i++)
|
||||
pDoc->m_nChannelSmooth[i] = (pDoc->m_nChannelCount[i - 1] + pDoc->m_nChannelCount[i] + pDoc->m_nChannelCount[i + 1]) / 3.0;
|
||||
pDoc->m_nChannelSmooth[1023] = (5.0 * pDoc->m_nChannelCount[1023] + 2.0 * pDoc->m_nChannelCount[1022] - pDoc->m_nChannelCount[1021]) / 6.0;
|
||||
}
|
||||
else if (m_sSmoothType == "S5") {
|
||||
pDoc->m_nChannelSmooth[0] = (3.0 * pDoc->m_nChannelCount[0] + 2.0 * pDoc->m_nChannelCount[1] + pDoc->m_nChannelCount[2] - pDoc->m_nChannelCount[4]) / 5.0;
|
||||
pDoc->m_nChannelSmooth[1] = (4.0 * pDoc->m_nChannelCount[0] + 3.0 * pDoc->m_nChannelCount[1] + 2 * pDoc->m_nChannelCount[2] + pDoc->m_nChannelCount[3]) / 10.0;
|
||||
for (int i = 2; i < 1022; i++)
|
||||
pDoc->m_nChannelSmooth[i] = (pDoc->m_nChannelCount[i - 2] + pDoc->m_nChannelCount[i - 1] + pDoc->m_nChannelCount[i] + pDoc->m_nChannelCount[i + 1] + pDoc->m_nChannelCount[i + 2]) / 5.0;
|
||||
pDoc->m_nChannelSmooth[1022] = (4.0 * pDoc->m_nChannelCount[1023] + 3.0 * pDoc->m_nChannelCount[1022] + 2 * pDoc->m_nChannelCount[1021] + pDoc->m_nChannelCount[1020]) / 10.0;
|
||||
pDoc->m_nChannelSmooth[1023] = (3.0 * pDoc->m_nChannelCount[1023] + 2.0 * pDoc->m_nChannelCount[1022] + pDoc->m_nChannelCount[1021] - pDoc->m_nChannelCount[1019]) / 5.0;
|
||||
}
|
||||
for (int i = 0; i < 1024; i++) pDoc->m_nChannelSmooth[i] = max(0, pDoc->m_nChannelSmooth[i]);
|
||||
|
||||
// 更新信息
|
||||
UpdateValue();
|
||||
|
||||
// 判断终止
|
||||
CString tmp;
|
||||
m_ComboMode.GetWindowText(tmp);
|
||||
if (tmp == "时间" && m_nTime >= m_nCond) OnStaStop();
|
||||
if (tmp == "计数" && m_nTotalCount >= m_nCond) OnStaStop();
|
||||
|
||||
// 修改坐标轴
|
||||
m_ComboAxis.GetWindowText(tmp);
|
||||
if (tmp == "对数") {
|
||||
m_bAutoFlag = FALSE;
|
||||
m_sAxisMode = "Log";
|
||||
m_sRangeMode = "Auto";
|
||||
}
|
||||
else m_sAxisMode = "Linear";
|
||||
|
||||
// 判断量程
|
||||
if (m_sRangeMode == "Auto" && m_nMaxCount >= m_nLC) m_nLC *= 2;
|
||||
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
CFormView::OnTimer(nIDEvent);
|
||||
}
|
||||
|
||||
BOOL CControlView::PreTranslateMessage(MSG* pMsg)
|
||||
{
|
||||
if (pMsg->message == WM_KEYDOWN && pMsg->wParam >= 0x25 && pMsg->wParam <= 0x28) {
|
||||
if (pMsg->wParam == VK_LEFT) m_nCursorROI = max(m_nCursor1, m_nCursorROI - 1);
|
||||
if (pMsg->wParam == VK_RIGHT) m_nCursorROI = min(m_nCursor2, m_nCursorROI + 1);
|
||||
if (pMsg->wParam == VK_UP) {
|
||||
m_nLC *= 2;
|
||||
m_bAutoFlag = TRUE;
|
||||
m_sRangeMode = (CString)"Manual";
|
||||
}
|
||||
if (pMsg->wParam == VK_DOWN) {
|
||||
m_nLC = m_nLC > 1 ? m_nLC / 2 : 1;
|
||||
m_bAutoFlag = TRUE;
|
||||
m_sRangeMode = (CString)"Manual";
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return CFormView::PreTranslateMessage(pMsg);
|
||||
}
|
||||
|
||||
void CControlView::OnStaStart()
|
||||
{
|
||||
// 重置结束条件
|
||||
m_nT0 = GetMilliTime();
|
||||
// 设置状态
|
||||
m_bStartFlag = FALSE;
|
||||
m_bStopFlag = TRUE;
|
||||
m_bClearFlag = FALSE;
|
||||
((CEdit*)GetDlgItem(IDC_COND))->EnableWindow(FALSE);
|
||||
// 获取屏幕值至变量
|
||||
UpdateData(TRUE);
|
||||
// 设置更新
|
||||
SetTimer(1, 100, NULL);
|
||||
}
|
||||
|
||||
void CControlView::OnUpdateStaStart(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bStartFlag);
|
||||
}
|
||||
|
||||
void CControlView::OnFileOpen()
|
||||
{
|
||||
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||
if (pDoc->IsModified()) SaveFirst();
|
||||
CString szFilter = (CString)"文本文件(*.txt)|*.txt|";
|
||||
CFileDialog fileDlg(TRUE, (CString)"*.txt", NULL, OFN_OVERWRITEPROMPT, szFilter);
|
||||
if (IDCANCEL == fileDlg.DoModal())
|
||||
return;
|
||||
CString szfile = fileDlg.GetPathName();
|
||||
|
||||
int k, cnt = 0;
|
||||
int count[1024] = {0};
|
||||
std::string line, tmp;
|
||||
std::ifstream ifs(szfile);
|
||||
|
||||
try
|
||||
{
|
||||
std::getline(ifs, line);
|
||||
m_nTime = 0;
|
||||
m_nT0 = GetMilliTime() - std::stoi(line);
|
||||
while (std::getline(ifs, line))
|
||||
{
|
||||
std::stringstream ss(line);
|
||||
std::getline(ss, tmp, ',');
|
||||
k = std::stoi(tmp);
|
||||
std::getline(ss, tmp, ',');
|
||||
count[k] = std::stoi(tmp);
|
||||
cnt += 1;
|
||||
}
|
||||
for (int i = 1; i < 1024; i++) pDoc->m_nChannelCount[i] = count[i];
|
||||
UpdateValue();
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
catch (const std::exception&)
|
||||
{
|
||||
AfxMessageBox((CString)"文件格式错误");
|
||||
}
|
||||
}
|
||||
|
||||
void CControlView::OnFileSave()
|
||||
{
|
||||
CString szFilter = (CString)"文本文件(*.txt)|*.txt|";
|
||||
CFileDialog fileDlg(FALSE, (CString)"*.txt", NULL, OFN_OVERWRITEPROMPT, szFilter);
|
||||
if (IDCANCEL == fileDlg.DoModal())
|
||||
return;
|
||||
CString szfile = fileDlg.GetPathName();
|
||||
|
||||
std::ofstream ofs(szfile);
|
||||
ofs << m_nTime << std::endl;
|
||||
for (int i = 0; i < 1024; i++)
|
||||
ofs << i << ", " << pDoc->m_nChannelCount[i] << std::endl;
|
||||
|
||||
AfxMessageBox((CString)"保存成功");
|
||||
|
||||
pDoc->SetModifiedFlag(FALSE);
|
||||
}
|
||||
|
||||
void CControlView::OnStaStop()
|
||||
{
|
||||
// 设置状态
|
||||
m_bStartFlag = TRUE;
|
||||
m_bStopFlag = FALSE;
|
||||
m_bClearFlag = TRUE;
|
||||
((CEdit*)GetDlgItem(IDC_COND))->EnableWindow(TRUE);
|
||||
// 停止更新
|
||||
KillTimer(1);
|
||||
}
|
||||
|
||||
void CControlView::OnUpdateStaStop(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bStopFlag);
|
||||
}
|
||||
|
||||
void CControlView::OnStaClear()
|
||||
{
|
||||
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||
// 重置
|
||||
m_nLC = 4;
|
||||
m_nTime = 0;
|
||||
m_nMaxCount = 0;
|
||||
m_nPartCount = 0;
|
||||
m_nTotalCount = 0;
|
||||
m_nTimeStr = (CString)"0.0";
|
||||
// 更新屏幕信息
|
||||
UpdateData(FALSE);
|
||||
// 设置曲线
|
||||
for (int i = 0; i < 1024; i++) pDoc->m_nChannelCount[i] = 0;
|
||||
for (int i = 0; i < 1024; i++) pDoc->m_nChannelSmooth[i] = 0;
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CControlView::OnUpdateStaClear(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bClearFlag);
|
||||
}
|
||||
|
||||
void CControlView::OnSimuCo()
|
||||
{
|
||||
m_sSource = (CString)"Co60";
|
||||
m_bCoFlag = FALSE;
|
||||
m_bCsFlag = TRUE;
|
||||
m_bNaFlag = TRUE;
|
||||
OnStaClear();
|
||||
OnStaStart();
|
||||
}
|
||||
|
||||
void CControlView::OnUpdateSimuCo(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bCoFlag);
|
||||
}
|
||||
|
||||
void CControlView::OnSimuCs()
|
||||
{
|
||||
m_sSource = (CString)"Cs137";
|
||||
m_bCoFlag = TRUE;
|
||||
m_bCsFlag = FALSE;
|
||||
m_bNaFlag = TRUE;
|
||||
OnStaClear();
|
||||
OnStaStart();
|
||||
}
|
||||
|
||||
void CControlView::OnUpdateSimuCs(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bCsFlag);
|
||||
}
|
||||
|
||||
void CControlView::OnSimuNa()
|
||||
{
|
||||
m_sSource = (CString)"Na22";
|
||||
m_bCoFlag = TRUE;
|
||||
m_bCsFlag = TRUE;
|
||||
m_bNaFlag = FALSE;
|
||||
OnStaClear();
|
||||
OnStaStart();
|
||||
}
|
||||
|
||||
void CControlView::OnUpdateSimuNa(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bNaFlag);
|
||||
}
|
||||
|
||||
void CControlView::OnAxisLinear()
|
||||
{
|
||||
m_sAxisMode = (CString)"Linear";
|
||||
}
|
||||
|
||||
void CControlView::OnAxisLog()
|
||||
{
|
||||
m_sAxisMode = (CString)"Log";
|
||||
}
|
||||
|
||||
void CControlView::OnRangeAuto()
|
||||
{
|
||||
m_sRangeMode = (CString)"Auto";
|
||||
m_bAutoFlag = FALSE;
|
||||
m_nLC = roundupPowerof2(m_nMaxCount);
|
||||
}
|
||||
|
||||
void CControlView::OnUpdateRangeAuto(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bAutoFlag);
|
||||
}
|
||||
|
||||
void CControlView::OnRangeD4()
|
||||
{
|
||||
m_sRangeMode = (CString)"Manual";
|
||||
m_nLC /= 4;
|
||||
m_bAutoFlag = TRUE;
|
||||
}
|
||||
|
||||
void CControlView::OnRangeD2()
|
||||
{
|
||||
m_sRangeMode = (CString)"Manual";
|
||||
m_nLC /= 2;
|
||||
m_bAutoFlag = TRUE;
|
||||
}
|
||||
|
||||
void CControlView::OnRangeM2()
|
||||
{
|
||||
m_sRangeMode = (CString)"Manual";
|
||||
m_nLC *= 2;
|
||||
m_bAutoFlag = TRUE;
|
||||
}
|
||||
|
||||
void CControlView::OnRangeM4()
|
||||
{
|
||||
m_sRangeMode = (CString)"Manual";
|
||||
m_nLC *= 4;
|
||||
m_bAutoFlag = TRUE;
|
||||
}
|
||||
|
||||
void CControlView::OnDataOrigin()
|
||||
{
|
||||
m_sSmoothType = (CString)"Origin";
|
||||
m_bOriginFlag = FALSE;
|
||||
m_bTSmoothFlag = TRUE;
|
||||
m_bFSmoothFlag = TRUE;
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CControlView::OnUpdateDataOrigin(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bOriginFlag);
|
||||
}
|
||||
|
||||
void CControlView::OnData3()
|
||||
{
|
||||
m_sSmoothType = (CString)"S3";
|
||||
m_bOriginFlag = TRUE;
|
||||
m_bTSmoothFlag = FALSE;
|
||||
m_bFSmoothFlag = TRUE;
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CControlView::OnUpdateData3(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bTSmoothFlag);
|
||||
}
|
||||
|
||||
void CControlView::OnData5()
|
||||
{
|
||||
m_sSmoothType = (CString)"S5";
|
||||
m_bOriginFlag = TRUE;
|
||||
m_bTSmoothFlag = TRUE;
|
||||
m_bFSmoothFlag = FALSE;
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CControlView::OnUpdateData5(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bFSmoothFlag);
|
||||
}
|
||||
|
|
|
@ -33,18 +33,12 @@ protected:
|
|||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
public:
|
||||
CMCADoc* pDoc = nullptr;
|
||||
int roundupPowerof2(int val);
|
||||
double GetMilliTime();
|
||||
void UpdateValue();
|
||||
void SaveFirst();
|
||||
void SetCond(BOOL flag);
|
||||
|
||||
// 消息处理
|
||||
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||||
virtual void OnInitialUpdate();
|
||||
virtual void OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/);
|
||||
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
||||
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
||||
|
||||
// 选择信息
|
||||
CString m_sSource = (CString)"Cs137";
|
||||
|
@ -70,50 +64,5 @@ public:
|
|||
int m_nPartCount;
|
||||
int m_nMaxCount;
|
||||
CComboBox m_ComboMode;
|
||||
CComboBox m_ComboAxis;
|
||||
|
||||
// 菜单与工具栏响应
|
||||
CMenu m_Menu;
|
||||
CToolBar m_wndToolBar;
|
||||
afx_msg void OnFileOpen();
|
||||
afx_msg void OnFileSave();
|
||||
afx_msg void OnStaStart();
|
||||
afx_msg void OnStaStop();
|
||||
afx_msg void OnStaClear();
|
||||
afx_msg void OnSimuCo();
|
||||
afx_msg void OnSimuCs();
|
||||
afx_msg void OnSimuNa();
|
||||
afx_msg void OnAxisLinear();
|
||||
afx_msg void OnAxisLog();
|
||||
afx_msg void OnRangeAuto();
|
||||
afx_msg void OnRangeD4();
|
||||
afx_msg void OnRangeD2();
|
||||
afx_msg void OnRangeM2();
|
||||
afx_msg void OnRangeM4();
|
||||
afx_msg void OnDataOrigin();
|
||||
afx_msg void OnData3();
|
||||
afx_msg void OnData5();
|
||||
|
||||
// 点击状态
|
||||
BOOL m_bStartFlag = TRUE;
|
||||
BOOL m_bStopFlag = FALSE;
|
||||
BOOL m_bClearFlag = FALSE;
|
||||
BOOL m_bCoFlag = TRUE;
|
||||
BOOL m_bCsFlag = FALSE;
|
||||
BOOL m_bNaFlag = TRUE;
|
||||
BOOL m_bAutoFlag = FALSE;
|
||||
BOOL m_bOriginFlag = FALSE;
|
||||
BOOL m_bTSmoothFlag = TRUE;
|
||||
BOOL m_bFSmoothFlag = TRUE;
|
||||
|
||||
afx_msg void OnUpdateStaStart(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateStaStop(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateStaClear(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateSimuCo(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateSimuCs(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateSimuNa(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateRangeAuto(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateDataOrigin(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateData3(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateData5(CCmdUI* pCmdUI);
|
||||
CComboBox m_ComboAxis;
|
||||
};
|
||||
|
|
|
@ -30,7 +30,6 @@ END_MESSAGE_MAP()
|
|||
|
||||
|
||||
// CDetailView 绘图
|
||||
|
||||
void CDetailView::OnDraw(CDC* pDc)
|
||||
{
|
||||
// 获取区域
|
||||
|
@ -104,7 +103,6 @@ void CDetailView::Dump(CDumpContext& dc) const
|
|||
|
||||
|
||||
// CDetailView 消息处理程序
|
||||
|
||||
void CDetailView::OnPaint()
|
||||
{
|
||||
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||
|
@ -125,6 +123,7 @@ void CDetailView::OnLButtonDown(UINT nFlags, CPoint point)
|
|||
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
int nX = point.x / ZF + pView->m_nCursor1;
|
||||
pView->m_nCursorROI = nX;
|
||||
pView->UpdateData(FALSE);
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
CView::OnLButtonDown(nFlags, point);
|
||||
}
|
||||
|
@ -135,29 +134,7 @@ void CDetailView::OnRButtonDown(UINT nFlags, CPoint point)
|
|||
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
pView->m_nCursor1 = 0;
|
||||
pView->m_nCursor2 = 1023;
|
||||
pView->UpdateData(FALSE);
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
CView::OnRButtonDown(nFlags, point);
|
||||
}
|
||||
|
||||
BOOL CDetailView::PreTranslateMessage(MSG* pMsg)
|
||||
{
|
||||
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
if (pMsg->message == WM_KEYDOWN) {
|
||||
if (pMsg->wParam == VK_LEFT) pView->m_nCursorROI = max(pView->m_nCursor1, pView->m_nCursorROI - 1);
|
||||
if (pMsg->wParam == VK_RIGHT) pView->m_nCursorROI = min(pView->m_nCursor2, pView->m_nCursorROI + 1);
|
||||
if (pMsg->wParam == VK_UP) {
|
||||
pView->m_nLC *= 2;
|
||||
pView->m_bAutoFlag = TRUE;
|
||||
pView->m_sRangeMode = (CString)"Manual";
|
||||
}
|
||||
if (pMsg->wParam == VK_DOWN) {
|
||||
pView->m_nLC = pView->m_nLC > 1 ? pView->m_nLC / 2 : 1;
|
||||
pView->m_bAutoFlag = TRUE;
|
||||
pView->m_sRangeMode = (CString)"Manual";
|
||||
}
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
return TRUE;
|
||||
}
|
||||
return CView::PreTranslateMessage(pMsg);
|
||||
}
|
||||
|
|
|
@ -36,5 +36,4 @@ public:
|
|||
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
||||
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||||
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
||||
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
||||
};
|
||||
|
|
BIN
MCA/MCA.rc
BIN
MCA/MCA.rc
Binary file not shown.
|
@ -221,6 +221,7 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="..\UML\menu.bmp" />
|
||||
<Image Include="res\auto.ico" />
|
||||
<Image Include="res\clear.ico" />
|
||||
<Image Include="res\close.ico" />
|
||||
<Image Include="res\down.ico" />
|
||||
|
|
|
@ -119,15 +119,6 @@
|
|||
<Image Include="res\folder.ico">
|
||||
<Filter>资源文件</Filter>
|
||||
</Image>
|
||||
<Image Include="res\left.ico">
|
||||
<Filter>资源文件</Filter>
|
||||
</Image>
|
||||
<Image Include="res\pause.ico">
|
||||
<Filter>资源文件</Filter>
|
||||
</Image>
|
||||
<Image Include="res\right.ico">
|
||||
<Filter>资源文件</Filter>
|
||||
</Image>
|
||||
<Image Include="res\save.ico">
|
||||
<Filter>资源文件</Filter>
|
||||
</Image>
|
||||
|
@ -143,5 +134,8 @@
|
|||
<Image Include="res\clear.ico">
|
||||
<Filter>资源文件</Filter>
|
||||
</Image>
|
||||
<Image Include="res\auto.ico">
|
||||
<Filter>资源文件</Filter>
|
||||
</Image>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -209,12 +209,11 @@ int CMCADoc::GetMax(int L, int R)
|
|||
return cMax;
|
||||
}
|
||||
|
||||
|
||||
CView* CMCADoc::GetView(CRuntimeClass* pClass)
|
||||
{
|
||||
CView* pView{};
|
||||
POSITION pos = GetFirstViewPosition();
|
||||
while (pos != NULL) {
|
||||
while (pos != NULL) {
|
||||
pView = GetNextView(pos);
|
||||
if (pView->IsKindOf(pClass)) break;
|
||||
}
|
||||
|
|
550
MCA/MainFrm.cpp
550
MCA/MainFrm.cpp
|
@ -21,7 +21,40 @@ IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
|
|||
|
||||
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
|
||||
ON_WM_CREATE()
|
||||
ON_WM_TIMER()
|
||||
ON_WM_CLOSE()
|
||||
|
||||
ON_COMMAND(ID_OPT_OPEN, &CMainFrame::OnOptOpen)
|
||||
ON_COMMAND(ID_OPT_SAVE, &CMainFrame::OnOptSave)
|
||||
ON_COMMAND(ID_STA_START, &CMainFrame::OnStaStart)
|
||||
ON_COMMAND(ID_STA_STOP, &CMainFrame::OnStaStop)
|
||||
ON_COMMAND(ID_STA_CLEAR, &CMainFrame::OnStaClear)
|
||||
ON_COMMAND(ID_SIMU_CO, &CMainFrame::OnSimuCo)
|
||||
ON_COMMAND(ID_SIMU_CS, &CMainFrame::OnSimuCs)
|
||||
ON_COMMAND(ID_SIMU_NA, &CMainFrame::OnSimuNa)
|
||||
ON_COMMAND(ID_AXIS_LINEAR, &CMainFrame::OnAxisLinear)
|
||||
ON_COMMAND(ID_AXIS_LOG, &CMainFrame::OnAxisLog)
|
||||
ON_COMMAND(ID_RANGE_AUTO, &CMainFrame::OnRangeAuto)
|
||||
ON_COMMAND(ID_RANGE_D4, &CMainFrame::OnRangeD4)
|
||||
ON_COMMAND(ID_RANGE_D2, &CMainFrame::OnRangeD2)
|
||||
ON_COMMAND(ID_RANGE_M2, &CMainFrame::OnRangeM2)
|
||||
ON_COMMAND(ID_RANGE_M4, &CMainFrame::OnRangeM4)
|
||||
ON_COMMAND(ID_DATA_ORIGIN, &CMainFrame::OnDataOrigin)
|
||||
ON_COMMAND(ID_DATA_3, &CMainFrame::OnData3)
|
||||
ON_COMMAND(ID_DATA_5, &CMainFrame::OnData5)
|
||||
|
||||
ON_UPDATE_COMMAND_UI(ID_STA_START, &CMainFrame::OnUpdateStaStart)
|
||||
ON_UPDATE_COMMAND_UI(ID_STA_STOP, &CMainFrame::OnUpdateStaStop)
|
||||
ON_UPDATE_COMMAND_UI(ID_STA_CLEAR, &CMainFrame::OnUpdateStaClear)
|
||||
ON_UPDATE_COMMAND_UI(ID_SIMU_CO, &CMainFrame::OnUpdateSimuCo)
|
||||
ON_UPDATE_COMMAND_UI(ID_SIMU_CS, &CMainFrame::OnUpdateSimuCs)
|
||||
ON_UPDATE_COMMAND_UI(ID_SIMU_NA, &CMainFrame::OnUpdateSimuNa)
|
||||
ON_UPDATE_COMMAND_UI(ID_AXIS_LINEAR, &CMainFrame::OnUpdateAxisLinear)
|
||||
ON_UPDATE_COMMAND_UI(ID_AXIS_LOG, &CMainFrame::OnUpdateAxisLog)
|
||||
ON_UPDATE_COMMAND_UI(ID_RANGE_AUTO, &CMainFrame::OnUpdateRangeAuto)
|
||||
ON_UPDATE_COMMAND_UI(ID_DATA_ORIGIN, &CMainFrame::OnUpdateDataOrigin)
|
||||
ON_UPDATE_COMMAND_UI(ID_DATA_3, &CMainFrame::OnUpdateData3)
|
||||
ON_UPDATE_COMMAND_UI(ID_DATA_5, &CMainFrame::OnUpdateData5)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
static UINT indicators[] =
|
||||
|
@ -74,16 +107,6 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void CMainFrame::OnClose()
|
||||
{
|
||||
pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pDoc->IsModified()) {
|
||||
int res = MessageBox(TEXT("退出前是否保存?"), TEXT("保存文件"), MB_YESNO | MB_ICONQUESTION);
|
||||
if (res == IDYES) ((CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView)))->OnFileSave();
|
||||
}
|
||||
CFrameWnd::OnClose();
|
||||
}
|
||||
|
||||
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
|
||||
CCreateContext* pContext)
|
||||
{
|
||||
|
@ -115,22 +138,6 @@ BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
// CMainFrame 诊断
|
||||
|
||||
#ifdef _DEBUG
|
||||
void CMainFrame::AssertValid() const
|
||||
{
|
||||
CFrameWnd::AssertValid();
|
||||
}
|
||||
|
||||
void CMainFrame::Dump(CDumpContext& dc) const
|
||||
{
|
||||
CFrameWnd::Dump(dc);
|
||||
}
|
||||
#endif //_DEBUG
|
||||
|
||||
|
||||
// CMainFrame 消息处理程序
|
||||
void CMainFrame::OnLoadToolBarIcon()
|
||||
{
|
||||
HICON icon;
|
||||
|
@ -146,16 +153,499 @@ void CMainFrame::OnLoadToolBarIcon()
|
|||
m_imgList.Add(icon);
|
||||
icon = AfxGetApp()->LoadIconW(IDI_SAVE);
|
||||
m_imgList.Add(icon);
|
||||
icon = AfxGetApp()->LoadIconW(IDI_LEFT);
|
||||
m_imgList.Add(icon);
|
||||
icon = AfxGetApp()->LoadIconW(IDI_RIGHT);
|
||||
m_imgList.Add(icon);
|
||||
icon = AfxGetApp()->LoadIconW(IDI_UP);
|
||||
m_imgList.Add(icon);
|
||||
icon = AfxGetApp()->LoadIconW(IDI_DOWN);
|
||||
m_imgList.Add(icon);
|
||||
icon = AfxGetApp()->LoadIconW(IDI_AUTO);
|
||||
m_imgList.Add(icon);
|
||||
icon = AfxGetApp()->LoadIconW(IDI_CLOSE);
|
||||
m_imgList.Add(icon);
|
||||
|
||||
m_wndToolBar.GetToolBarCtrl().SetImageList(&m_imgList);
|
||||
}
|
||||
|
||||
// CMainFrame 诊断
|
||||
|
||||
#ifdef _DEBUG
|
||||
void CMainFrame::AssertValid() const
|
||||
{
|
||||
CFrameWnd::AssertValid();
|
||||
}
|
||||
|
||||
void CMainFrame::Dump(CDumpContext& dc) const
|
||||
{
|
||||
CFrameWnd::Dump(dc);
|
||||
}
|
||||
#endif //_DEBUG
|
||||
|
||||
int CMainFrame::RoundupPowerof2(int val)
|
||||
{
|
||||
if ((val & (val - 1)) == 0) return val;
|
||||
int andv = 1 << 30;
|
||||
while ((andv & val) == 0) andv = andv >> 1;
|
||||
return andv << 1;
|
||||
}
|
||||
|
||||
double CMainFrame::GetMilliTime()
|
||||
{
|
||||
std::chrono::milliseconds ms = std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||
std::chrono::system_clock::now().time_since_epoch()
|
||||
);
|
||||
return ms.count() / 1000.;
|
||||
}
|
||||
|
||||
void CMainFrame::UpdateValue()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
// 更新显示曲线
|
||||
for (int i = 0; i < 1024; i++) pDoc->m_nChannelSmooth[i] = pDoc->m_nChannelCount[i];
|
||||
if (pView->m_sSmoothType == "S3") SmoothThree();
|
||||
else if (pView->m_sSmoothType == "S5") SmoothFive();
|
||||
|
||||
// 更新信息
|
||||
pView->m_nTotalCount = pDoc->GetTotal(0, 1023);
|
||||
pView->m_nMaxCount = pDoc->GetMax(0, 1023);
|
||||
pView->m_nPartCount = pDoc->GetTotal(pView->m_nCursor1, pView->m_nCursor2);
|
||||
pView->m_nCursorROICount = pDoc->m_nChannelCount[pView->m_nCursorROI];
|
||||
|
||||
pView->m_nTime += GetMilliTime() - pView->m_nT0;
|
||||
pView->m_nTimeStr.Format(_T("%.1f"), pView->m_nTime);
|
||||
pView->m_nT0 = GetMilliTime();
|
||||
|
||||
// 更新量程
|
||||
if (pView->m_sRangeMode == "Auto") pView->m_nLC = RoundupPowerof2(pView->m_nMaxCount);
|
||||
|
||||
// 更新屏幕信息
|
||||
pView->UpdateData(FALSE);
|
||||
}
|
||||
|
||||
void CMainFrame::SaveFirst()
|
||||
{
|
||||
int res = MessageBox(TEXT("打开前是否保存?"), TEXT("保存文件"), MB_YESNO | MB_ICONQUESTION);
|
||||
if (res == IDYES) OnOptSave();
|
||||
}
|
||||
|
||||
void CMainFrame::SmoothThree()
|
||||
{
|
||||
pDoc->m_nChannelSmooth[0] = (5 * pDoc->m_nChannelCount[0] + 2 * pDoc->m_nChannelCount[1] - pDoc->m_nChannelCount[2]) / 6;
|
||||
for (int i = 1; i < 1023; i++)
|
||||
pDoc->m_nChannelSmooth[i] = (pDoc->m_nChannelCount[i - 1] + pDoc->m_nChannelCount[i] + pDoc->m_nChannelCount[i + 1]) / 3;
|
||||
pDoc->m_nChannelSmooth[1023] = (5 * pDoc->m_nChannelCount[1023] + 2 * pDoc->m_nChannelCount[1022] - pDoc->m_nChannelCount[1021]) / 6;
|
||||
for (int i = 0; i < 1024; i++) pDoc->m_nChannelSmooth[i] = max(0, pDoc->m_nChannelSmooth[i]);
|
||||
}
|
||||
|
||||
void CMainFrame::SmoothFive()
|
||||
{
|
||||
pDoc->m_nChannelSmooth[0] = (3 * pDoc->m_nChannelCount[0] + 2 * pDoc->m_nChannelCount[1] + pDoc->m_nChannelCount[2] - pDoc->m_nChannelCount[4]) / 5;
|
||||
pDoc->m_nChannelSmooth[1] = (4 * pDoc->m_nChannelCount[0] + 3 * pDoc->m_nChannelCount[1] + 2 * pDoc->m_nChannelCount[2] + pDoc->m_nChannelCount[3]) / 10;
|
||||
for (int i = 2; i < 1022; i++)
|
||||
pDoc->m_nChannelSmooth[i] = (pDoc->m_nChannelCount[i - 2] + pDoc->m_nChannelCount[i - 1] + pDoc->m_nChannelCount[i] + pDoc->m_nChannelCount[i + 1] + pDoc->m_nChannelCount[i + 2]) / 5;
|
||||
pDoc->m_nChannelSmooth[1022] = (4 * pDoc->m_nChannelCount[1023] + 3 * pDoc->m_nChannelCount[1022] + 2 * pDoc->m_nChannelCount[1021] + pDoc->m_nChannelCount[1020]) / 10;
|
||||
pDoc->m_nChannelSmooth[1023] = (3 * pDoc->m_nChannelCount[1023] + 2 * pDoc->m_nChannelCount[1022] + pDoc->m_nChannelCount[1021] - pDoc->m_nChannelCount[1019]) / 5;
|
||||
for (int i = 0; i < 1024; i++) pDoc->m_nChannelSmooth[i] = max(0, pDoc->m_nChannelSmooth[i]);
|
||||
}
|
||||
|
||||
// CMainFrame 消息处理程序
|
||||
void CMainFrame::OnTimer(UINT_PTR nIDEvent)
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
pDoc->SetModifiedFlag(TRUE);
|
||||
|
||||
// 生成随机信号
|
||||
int n = rand() % 50 + 25;
|
||||
pDoc->RandomPeak(pView->m_sSource, n);
|
||||
|
||||
// 更新
|
||||
UpdateValue();
|
||||
|
||||
// 判断终止
|
||||
CString tmp;
|
||||
pView->m_ComboMode.GetWindowText(tmp);
|
||||
if (tmp == "时间" && pView->m_nTime >= pView->m_nCond) OnStaStop();
|
||||
if (tmp == "计数" && pView->m_nTotalCount >= pView->m_nCond) OnStaStop();
|
||||
|
||||
// 修改坐标轴
|
||||
pView->m_ComboAxis.GetWindowText(tmp);
|
||||
if (tmp == "对数") {
|
||||
m_bAutoFlag = FALSE;
|
||||
pView->m_sAxisMode = "Log";
|
||||
pView->m_sRangeMode = "Auto";
|
||||
m_bLinearFlag = TRUE;
|
||||
m_bLogFlag = FALSE;
|
||||
}
|
||||
else {
|
||||
pView->m_sAxisMode = "Linear";
|
||||
m_bLinearFlag = FALSE;
|
||||
m_bLogFlag = TRUE;
|
||||
}
|
||||
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
CFrameWnd::OnTimer(nIDEvent);
|
||||
}
|
||||
|
||||
void CMainFrame::OnClose()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pDoc->IsModified()) {
|
||||
int res = MessageBox(TEXT("退出前是否保存?"), TEXT("保存文件"), MB_YESNO | MB_ICONQUESTION);
|
||||
if (res == IDYES) OnOptSave();
|
||||
pDoc->SetModifiedFlag(FALSE);
|
||||
}
|
||||
CFrameWnd::OnClose();
|
||||
}
|
||||
|
||||
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
if (pMsg->message == WM_KEYDOWN && pMsg->wParam >= 0x25 && pMsg->wParam <= 0x28) {
|
||||
if (pMsg->wParam == VK_LEFT) pView->m_nCursorROI = max(pView->m_nCursor1, pView->m_nCursorROI - 1);
|
||||
if (pMsg->wParam == VK_RIGHT) pView->m_nCursorROI = min(pView->m_nCursor2, pView->m_nCursorROI + 1);
|
||||
if (pMsg->wParam == VK_UP) OnRangeM2();
|
||||
if (pMsg->wParam == VK_DOWN) OnRangeD2();
|
||||
pView->m_nCursorROICount = pDoc->m_nChannelCount[pView->m_nCursorROI];
|
||||
pView->UpdateData(FALSE);
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
return TRUE;
|
||||
}
|
||||
return CFrameWnd::PreTranslateMessage(pMsg);
|
||||
}
|
||||
|
||||
void CMainFrame::OnStaStart()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
// 重置结束条件
|
||||
pView->m_nT0 = GetMilliTime();
|
||||
// 设置状态
|
||||
m_bStartFlag = FALSE;
|
||||
m_bStopFlag = TRUE;
|
||||
m_bClearFlag = FALSE;
|
||||
pView->SetCond(FALSE);
|
||||
// 获取屏幕值至变量
|
||||
pView->UpdateData(TRUE);
|
||||
// 设置更新
|
||||
SetTimer(1, 100, NULL);
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateStaStart(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bStartFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnOptOpen()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
if (pDoc->IsModified()) SaveFirst();
|
||||
CString szFilter = (CString)"文本文件(*.txt)|*.txt|";
|
||||
CFileDialog fileDlg(TRUE, (CString)"*.txt", NULL, OFN_OVERWRITEPROMPT, szFilter);
|
||||
if (IDCANCEL == fileDlg.DoModal())
|
||||
return;
|
||||
CString szfile = fileDlg.GetPathName();
|
||||
|
||||
int k, cnt = 0;
|
||||
int count[1024] = { 0 };
|
||||
std::string line, tmp;
|
||||
std::ifstream ifs(szfile);
|
||||
|
||||
try
|
||||
{
|
||||
std::getline(ifs, line);
|
||||
pView->m_nTime = 0;
|
||||
pView->m_nT0 = GetMilliTime() - std::stof(line);
|
||||
std::getline(ifs, line);
|
||||
pView->m_sSource = line.c_str();
|
||||
while (std::getline(ifs, line))
|
||||
{
|
||||
std::stringstream ss(line);
|
||||
std::getline(ss, tmp, ',');
|
||||
k = std::stoi(tmp);
|
||||
std::getline(ss, tmp, ',');
|
||||
count[k] = std::stoi(tmp);
|
||||
cnt += 1;
|
||||
}
|
||||
for (int i = 1; i < 1024; i++) pDoc->m_nChannelCount[i] = count[i];
|
||||
m_bClearFlag = TRUE;
|
||||
pView->m_sRangeMode = "Auto";
|
||||
UpdateValue();
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
catch (const std::exception&)
|
||||
{
|
||||
AfxMessageBox((CString)"文件格式错误");
|
||||
}
|
||||
}
|
||||
|
||||
void CMainFrame::OnOptSave()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
CString szFilter = (CString)"文本文件(*.txt)|*.txt|";
|
||||
CFileDialog fileDlg(FALSE, (CString)"*.txt", NULL, OFN_OVERWRITEPROMPT, szFilter);
|
||||
if (IDCANCEL == fileDlg.DoModal())
|
||||
return;
|
||||
CString szfile = fileDlg.GetPathName();
|
||||
|
||||
std::ofstream ofs(szfile);
|
||||
ofs << pView->m_nTime << std::endl;
|
||||
ofs << pView->m_sSource << std::endl;
|
||||
for (int i = 0; i < 1024; i++)
|
||||
ofs << i << ", " << pDoc->m_nChannelCount[i] << std::endl;
|
||||
|
||||
AfxMessageBox((CString)"保存成功");
|
||||
|
||||
pDoc->SetModifiedFlag(FALSE);
|
||||
}
|
||||
|
||||
void CMainFrame::OnStaStop()
|
||||
{
|
||||
// 设置状态
|
||||
m_bStartFlag = TRUE;
|
||||
m_bStopFlag = FALSE;
|
||||
m_bClearFlag = TRUE;
|
||||
pView->SetCond(TRUE);
|
||||
// 停止更新
|
||||
KillTimer(1);
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateStaStop(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bStopFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnStaClear()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
// 重置
|
||||
pView->m_nLC = 4;
|
||||
pView->m_nTime = 0;
|
||||
pView->m_nMaxCount = 0;
|
||||
pView->m_nPartCount = 0;
|
||||
pView->m_nTotalCount = 0;
|
||||
pView->m_nCursorROICount = 0;
|
||||
pView->m_nTimeStr = (CString)"0.0";
|
||||
// 更新屏幕信息
|
||||
pView->UpdateData(FALSE);
|
||||
// 设置曲线
|
||||
for (int i = 0; i < 1024; i++) pDoc->m_nChannelCount[i] = 0;
|
||||
for (int i = 0; i < 1024; i++) pDoc->m_nChannelSmooth[i] = 0;
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
pDoc->SetModifiedFlag(FALSE);
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateStaClear(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bClearFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnSimuCo()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sSource = (CString)"Co60";
|
||||
m_bCoFlag = FALSE;
|
||||
m_bCsFlag = TRUE;
|
||||
m_bNaFlag = TRUE;
|
||||
OnStaStop();
|
||||
OnStaClear();
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateSimuCo(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bCoFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnSimuCs()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sSource = (CString)"Cs137";
|
||||
m_bCoFlag = TRUE;
|
||||
m_bCsFlag = FALSE;
|
||||
m_bNaFlag = TRUE;
|
||||
OnStaStop();
|
||||
OnStaClear();
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateSimuCs(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bCsFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnSimuNa()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sSource = (CString)"Na22";
|
||||
m_bCoFlag = TRUE;
|
||||
m_bCsFlag = TRUE;
|
||||
m_bNaFlag = FALSE;
|
||||
OnStaStop();
|
||||
OnStaClear();
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateSimuNa(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bNaFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnAxisLinear()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sAxisMode = (CString)"Linear";
|
||||
m_bLinearFlag = FALSE;
|
||||
m_bLogFlag = TRUE;
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateAxisLinear(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bLinearFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnAxisLog()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sAxisMode = (CString)"Log";
|
||||
m_bLinearFlag = TRUE;
|
||||
m_bLogFlag = FALSE;
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateAxisLog(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bLogFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnRangeAuto()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sRangeMode = (CString)"Auto";
|
||||
m_bAutoFlag = FALSE;
|
||||
pView->m_nLC = max(1, RoundupPowerof2(pView->m_nMaxCount));
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateRangeAuto(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bAutoFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnRangeD4()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sRangeMode = (CString)"Manual";
|
||||
pView->m_nLC /= 4;
|
||||
m_bAutoFlag = TRUE;
|
||||
pView->UpdateData(FALSE);
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CMainFrame::OnRangeD2()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sRangeMode = (CString)"Manual";
|
||||
pView->m_nLC /= 2;
|
||||
m_bAutoFlag = TRUE;
|
||||
pView->UpdateData(FALSE);
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CMainFrame::OnRangeM2()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sRangeMode = (CString)"Manual";
|
||||
pView->m_nLC *= 2;
|
||||
m_bAutoFlag = TRUE;
|
||||
pView->UpdateData(FALSE);
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CMainFrame::OnRangeM4()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sRangeMode = (CString)"Manual";
|
||||
pView->m_nLC *= 4;
|
||||
m_bAutoFlag = TRUE;
|
||||
pView->UpdateData(FALSE);
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CMainFrame::OnDataOrigin()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sSmoothType = (CString)"Origin";
|
||||
m_bOriginFlag = FALSE;
|
||||
m_bTSmoothFlag = TRUE;
|
||||
m_bFSmoothFlag = TRUE;
|
||||
for (int i = 0; i < 1024; i++) pDoc->m_nChannelSmooth[i] = pDoc->m_nChannelCount[i];
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateDataOrigin(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bOriginFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnData3()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sSmoothType = (CString)"S3";
|
||||
m_bOriginFlag = TRUE;
|
||||
m_bTSmoothFlag = FALSE;
|
||||
m_bFSmoothFlag = TRUE;
|
||||
SmoothThree();
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateData3(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bTSmoothFlag);
|
||||
}
|
||||
|
||||
void CMainFrame::OnData5()
|
||||
{
|
||||
if (pDoc == nullptr) pDoc = (CMCADoc*)GetActiveDocument();
|
||||
if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
pView->m_sSmoothType = (CString)"S5";
|
||||
m_bOriginFlag = TRUE;
|
||||
m_bTSmoothFlag = TRUE;
|
||||
m_bFSmoothFlag = FALSE;
|
||||
SmoothFive();
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
}
|
||||
|
||||
void CMainFrame::OnUpdateData5(CCmdUI* pCmdUI)
|
||||
{
|
||||
pCmdUI->Enable(m_bFSmoothFlag);
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "MCADoc.h"
|
||||
#include "ControlView.h"
|
||||
|
||||
class CMainFrame : public CFrameWnd
|
||||
{
|
||||
|
@ -46,10 +47,69 @@ protected:
|
|||
|
||||
public:
|
||||
CMCADoc* pDoc = nullptr;
|
||||
afx_msg void OnClose();
|
||||
CControlView* pView = nullptr;
|
||||
int RoundupPowerof2(int val);
|
||||
double GetMilliTime();
|
||||
void UpdateValue();
|
||||
void SaveFirst();
|
||||
void SmoothThree();
|
||||
void SmoothFive();
|
||||
|
||||
void OnLoadToolBarIcon();
|
||||
CImageList m_imgList;
|
||||
// 消息处理
|
||||
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
||||
afx_msg void OnClose();
|
||||
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
||||
|
||||
// 工具栏图标
|
||||
CImageList m_imgList;
|
||||
void OnLoadToolBarIcon();
|
||||
|
||||
// 菜单与工具栏响应
|
||||
afx_msg void OnOptOpen();
|
||||
afx_msg void OnOptSave();
|
||||
afx_msg void OnStaStart();
|
||||
afx_msg void OnStaStop();
|
||||
afx_msg void OnStaClear();
|
||||
afx_msg void OnSimuCo();
|
||||
afx_msg void OnSimuCs();
|
||||
afx_msg void OnSimuNa();
|
||||
afx_msg void OnAxisLinear();
|
||||
afx_msg void OnAxisLog();
|
||||
afx_msg void OnRangeAuto();
|
||||
afx_msg void OnRangeD4();
|
||||
afx_msg void OnRangeD2();
|
||||
afx_msg void OnRangeM2();
|
||||
afx_msg void OnRangeM4();
|
||||
afx_msg void OnDataOrigin();
|
||||
afx_msg void OnData3();
|
||||
afx_msg void OnData5();
|
||||
|
||||
// 点击状态
|
||||
BOOL m_bStartFlag = TRUE;
|
||||
BOOL m_bStopFlag = FALSE;
|
||||
BOOL m_bClearFlag = FALSE;
|
||||
BOOL m_bCoFlag = TRUE;
|
||||
BOOL m_bCsFlag = FALSE;
|
||||
BOOL m_bNaFlag = TRUE;
|
||||
BOOL m_bLinearFlag = FALSE;
|
||||
BOOL m_bLogFlag = TRUE;
|
||||
BOOL m_bAutoFlag = FALSE;
|
||||
BOOL m_bOriginFlag = FALSE;
|
||||
BOOL m_bTSmoothFlag = TRUE;
|
||||
BOOL m_bFSmoothFlag = TRUE;
|
||||
|
||||
afx_msg void OnUpdateStaStart(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateStaStop(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateStaClear(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateSimuCo(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateSimuCs(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateSimuNa(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateAxisLinear(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateAxisLog(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateRangeAuto(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateDataOrigin(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateData3(CCmdUI* pCmdUI);
|
||||
afx_msg void OnUpdateData5(CCmdUI* pCmdUI);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -10,13 +10,12 @@
|
|||
#define IDI_CLOSE 313
|
||||
#define IDI_DOWN 314
|
||||
#define IDI_FOLDER 315
|
||||
#define IDI_LEFT 316
|
||||
#define IDI_RIGHT 318
|
||||
#define IDI_SAVE 319
|
||||
#define IDI_START 320
|
||||
#define IDI_STOP 321
|
||||
#define IDI_UP 322
|
||||
#define IDI_CLEAR 323
|
||||
#define IDI_AUTO 324
|
||||
#define IDC_MFCSHELLTREE1 1013
|
||||
#define IDC_MODE 1017
|
||||
#define IDC_COND 1018
|
||||
|
@ -34,38 +33,12 @@
|
|||
#define IDC_CURSOR2_COUNT 1030
|
||||
#define IDC_CURSORROI 1031
|
||||
#define IDC_PCOUNT 1032
|
||||
#define ID_32786 32786
|
||||
#define ID_32787 32787
|
||||
#define ID_32788 32788
|
||||
#define ID_32789 32789
|
||||
#define ID_32790 32790
|
||||
#define ID_32791 32791
|
||||
#define ID_32792 32792
|
||||
#define ID_32793 32793
|
||||
#define ID_32794 32794
|
||||
#define ID_32795 32795
|
||||
#define ID_32796 32796
|
||||
#define ID_32797 32797
|
||||
#define ID_32798 32798
|
||||
#define ID_32799 32799
|
||||
#define ID_32800 32800
|
||||
#define ID_32801 32801
|
||||
#define ID_BUTTON32803 32803
|
||||
#define ID_BUTTON32804 32804
|
||||
#define ID_ARROW_RIGHT 32805
|
||||
#define ID_ARROW_UP 32806
|
||||
#define ID_ARROW_DOWN 32807
|
||||
#define ID_BUTTON32808 32808
|
||||
#define ID_STA_START 32809
|
||||
#define ID_STA_STOP 32811
|
||||
#define ID_32812 32812
|
||||
#define ID_32813 32813
|
||||
#define ID_32814 32814
|
||||
#define ID_32815 32815
|
||||
#define ID_ARROW_LEFT 32817
|
||||
#define ID_32818 32818
|
||||
#define ID_32819 32819
|
||||
#define ID_32820 32820
|
||||
#define ID_AXIS_LINEAR 32821
|
||||
#define ID_AXIS_LOG 32822
|
||||
#define ID_RANGE_AUTO 32823
|
||||
|
@ -73,7 +46,6 @@
|
|||
#define ID_RANGE_D2 32827
|
||||
#define ID_RANGE_M2 32828
|
||||
#define ID_RANGE_M4 32829
|
||||
#define ID_32830 32830
|
||||
#define ID_SIMU_CO 32831
|
||||
#define ID_SIMU_CS 32832
|
||||
#define ID_SIMU_NA 32833
|
||||
|
@ -81,15 +53,15 @@
|
|||
#define ID_DATA_3 32835
|
||||
#define ID_DATA_5 32836
|
||||
#define ID_STA_CLEAR 32837
|
||||
#define ID_32838 32838
|
||||
#define ID_32839 32839
|
||||
#define ID_OPT_SAVE 32840
|
||||
#define ID_OPT_OPEN 32841
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 324
|
||||
#define _APS_NEXT_COMMAND_VALUE 32840
|
||||
#define _APS_NEXT_RESOURCE_VALUE 325
|
||||
#define _APS_NEXT_COMMAND_VALUE 32842
|
||||
#define _APS_NEXT_CONTROL_VALUE 1019
|
||||
#define _APS_NEXT_SYMED_VALUE 310
|
||||
#endif
|
||||
|
|
|
@ -31,9 +31,11 @@ END_MESSAGE_MAP()
|
|||
|
||||
|
||||
// CTotalView 绘图
|
||||
|
||||
void CTotalView::OnDraw(CDC* pDc)
|
||||
{
|
||||
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
|
||||
// 背景颜色、笔颜色等设置
|
||||
CDC MemDC;
|
||||
MemDC.CreateCompatibleDC(pDc);
|
||||
|
@ -98,12 +100,8 @@ void CTotalView::Dump(CDumpContext& dc) const
|
|||
|
||||
|
||||
// CTotalView 消息处理程序
|
||||
|
||||
|
||||
void CTotalView::OnPaint()
|
||||
{
|
||||
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
CPaintDC dc(this); // device context for painting
|
||||
OnPrepareDC(&dc);
|
||||
OnDraw(&dc);
|
||||
|
@ -124,6 +122,7 @@ void CTotalView::OnLButtonDown(UINT nFlags, CPoint point)
|
|||
pView->m_nCursor1 = nX;
|
||||
pView->m_nCursorROI = max(pView->m_nCursor1, pView->m_nCursorROI);
|
||||
}
|
||||
pView->UpdateData(FALSE);
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
CView::OnLButtonDown(nFlags, point);
|
||||
}
|
||||
|
@ -137,29 +136,7 @@ void CTotalView::OnRButtonDown(UINT nFlags, CPoint point)
|
|||
pView->m_nCursor2 = nX;
|
||||
pView->m_nCursorROI = min(pView->m_nCursor2, pView->m_nCursorROI);
|
||||
}
|
||||
pView->UpdateData(FALSE);
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
CView::OnRButtonDown(nFlags, point);
|
||||
}
|
||||
|
||||
BOOL CTotalView::PreTranslateMessage(MSG* pMsg)
|
||||
{
|
||||
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||
if (pMsg->message == WM_KEYDOWN) {
|
||||
if (pMsg->wParam == VK_LEFT) pView->m_nCursorROI = max(pView->m_nCursor1, pView->m_nCursorROI - 1);
|
||||
if (pMsg->wParam == VK_RIGHT) pView->m_nCursorROI = min(pView->m_nCursor2, pView->m_nCursorROI + 1);
|
||||
if (pMsg->wParam == VK_UP) {
|
||||
pView->m_nLC *= 2;
|
||||
pView->m_bAutoFlag = TRUE;
|
||||
pView->m_sRangeMode = (CString)"Manual";
|
||||
}
|
||||
if (pMsg->wParam == VK_DOWN) {
|
||||
pView->m_nLC = pView->m_nLC > 1 ? pView->m_nLC / 2 : 1;
|
||||
pView->m_bAutoFlag = TRUE;
|
||||
pView->m_sRangeMode = (CString)"Manual";
|
||||
}
|
||||
pDoc->UpdateAllViews(NULL);
|
||||
return TRUE;
|
||||
}
|
||||
return CView::PreTranslateMessage(pMsg);
|
||||
}
|
||||
|
|
|
@ -35,5 +35,4 @@ public:
|
|||
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
||||
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||||
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
||||
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
||||
};
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
BIN
MCA/res/left.ico
BIN
MCA/res/left.ico
Binary file not shown.
Before Width: | Height: | Size: 10 KiB |
Binary file not shown.
Before Width: | Height: | Size: 10 KiB |
26
README.md
26
README.md
|
@ -1 +1,25 @@
|
|||
# Multichannel Analyzer
|
||||
# Multichannel Analyzer
|
||||
|
||||
基于`MFC`的多道分析仪软件
|
||||
|
||||
## Features
|
||||
- [x] 菜单栏、工具栏
|
||||
- [x] 信息显示与结束判断
|
||||
- [x] 全谱与局部谱
|
||||
- [x] 光标与ROI选取
|
||||
- [x] 量程
|
||||
- [x] 对数坐标轴
|
||||
- [x] 读取与保存
|
||||
- [x] 模拟信号
|
||||
- [ ] 高斯拟合寻峰
|
||||
- [x] 曲线平滑
|
||||
|
||||
## Bugs
|
||||
- [x] 点击其他视图时,工具栏(ToolBar)和菜单栏(Menu)无法使用,失去焦点
|
||||
- [x] 静止且焦点在controlview时使用左右方向键后无法刷新detailview
|
||||
- [x] 静止时无法通过方向键左右移动或调整量程
|
||||
- [x] 静止时光标、量程等信息无法更新
|
||||
- [x] 静止时平滑曲线无法更新
|
||||
- [x] 保存文件乱码
|
||||
- [x] 退出询问保存
|
||||
- [x] 读取文件后刷新视图无效
|
||||
|
|
Reference in New Issue