add:
* 全谱区 * 放大区 * 结束条件 * 模拟信号 * 开始、结束、暂停
@ -9,4 +9,11 @@
|
|||||||
### 5.30
|
### 5.30
|
||||||
* control view
|
* control view
|
||||||
|
|
||||||
|
### 5.31
|
||||||
|
* 全谱区
|
||||||
|
* 放大区
|
||||||
|
* 结束条件
|
||||||
|
* 模拟信号
|
||||||
|
* 开始、结束、暂停
|
||||||
|
|
||||||
[^1]: Xiao M, Hu R, Ge L Q, et al. Study of a full-digital multi-waveform nuclear pulse signal generator[J]. Applied Radiation and Isotopes, 2022, 179: 110028.
|
[^1]: Xiao M, Hu R, Ge L Q, et al. Study of a full-digital multi-waveform nuclear pulse signal generator[J]. Applied Radiation and Isotopes, 2022, 179: 110028.
|
@ -1,6 +1,8 @@
|
|||||||
// ControlView.cpp: 实现文件
|
// ControlView.cpp: 实现文件
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
|
|
||||||
@ -15,6 +17,18 @@ IMPLEMENT_DYNCREATE(CControlView, CFormView)
|
|||||||
|
|
||||||
CControlView::CControlView()
|
CControlView::CControlView()
|
||||||
: CFormView(IDD_DIALOG_CONTROL)
|
: CFormView(IDD_DIALOG_CONTROL)
|
||||||
|
, m_nCond(100)
|
||||||
|
, m_nT0(0)
|
||||||
|
, m_nTime(0)
|
||||||
|
, m_nTimeStr((CString)'0')
|
||||||
|
, m_nTotalCount(0)
|
||||||
|
, m_nPartCount(0)
|
||||||
|
, m_nMaxCount(0)
|
||||||
|
, m_nRange(4)
|
||||||
|
, m_nCursor1(0)
|
||||||
|
, m_nCursor2(1023)
|
||||||
|
, m_nCursorROI(0)
|
||||||
|
, m_nCursorROICount(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,10 +39,32 @@ CControlView::~CControlView()
|
|||||||
void CControlView::DoDataExchange(CDataExchange* pDX)
|
void CControlView::DoDataExchange(CDataExchange* pDX)
|
||||||
{
|
{
|
||||||
CFormView::DoDataExchange(pDX);
|
CFormView::DoDataExchange(pDX);
|
||||||
|
DDX_Text(pDX, IDC_COND, m_nCond);
|
||||||
|
DDX_Text(pDX, IDC_TIME, m_nTimeStr);
|
||||||
|
DDX_Text(pDX, IDC_TCOUNT, m_nTotalCount);
|
||||||
|
DDX_Text(pDX, IDC_PCOUNT, m_nPartCount);
|
||||||
|
DDX_Text(pDX, IDC_MCOUNT, m_nMaxCount);
|
||||||
|
DDX_Control(pDX, IDC_MODE, m_ComboMode);
|
||||||
|
DDX_Control(pDX, IDC_AXIS, m_ComboAxis);
|
||||||
|
DDX_Text(pDX, IDC_RANGE, m_nRange);
|
||||||
|
DDX_Text(pDX, IDC_CURSOR1, m_nCursor1);
|
||||||
|
DDX_Text(pDX, IDC_CURSOR2, m_nCursor2);
|
||||||
|
DDX_Text(pDX, IDC_CURSORROI, m_nCursorROI);
|
||||||
|
DDX_Text(pDX, IDC_CURSORROI_COUNT, m_nCursorROICount);
|
||||||
}
|
}
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CControlView, CFormView)
|
BEGIN_MESSAGE_MAP(CControlView, CFormView)
|
||||||
ON_WM_SIZE()
|
ON_WM_SIZE()
|
||||||
|
ON_COMMAND(ID_STA_START, &CControlView::OnStaStart)
|
||||||
|
ON_COMMAND(ID_STA_STOP, &CControlView::OnStaStop)
|
||||||
|
ON_UPDATE_COMMAND_UI(ID_STA_START, &CControlView::OnUpdateStaStart)
|
||||||
|
ON_UPDATE_COMMAND_UI(ID_STA_STOP, &CControlView::OnUpdateStaStop)
|
||||||
|
ON_COMMAND(ID_STA_CLEAR, &CControlView::OnStaClear)
|
||||||
|
ON_UPDATE_COMMAND_UI(ID_STA_CLEAR, &CControlView::OnUpdateStaClear)
|
||||||
|
ON_WM_TIMER()
|
||||||
|
ON_COMMAND(ID_SIMU_CO, &CControlView::OnSimuCo)
|
||||||
|
ON_COMMAND(ID_SIMU_CS, &CControlView::OnSimuCs)
|
||||||
|
ON_COMMAND(ID_SIMU_NA, &CControlView::OnSimuNa)
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
|
||||||
@ -50,8 +86,6 @@ void CControlView::Dump(CDumpContext& dc) const
|
|||||||
|
|
||||||
|
|
||||||
// CControlView 消息处理程序
|
// CControlView 消息处理程序
|
||||||
|
|
||||||
|
|
||||||
void CControlView::OnSize(UINT nType, int cx, int cy)
|
void CControlView::OnSize(UINT nType, int cx, int cy)
|
||||||
{
|
{
|
||||||
CFormView::OnSize(nType, cx, cy);
|
CFormView::OnSize(nType, cx, cy);
|
||||||
@ -63,3 +97,130 @@ void CControlView::OnSize(UINT nType, int cx, int cy)
|
|||||||
size.cy = rect.bottom - rect.top;
|
size.cy = rect.bottom - rect.top;
|
||||||
SetScrollSizes(MM_HIMETRIC, size); // 将CScrollView的大小设置为当前客户区大小
|
SetScrollSizes(MM_HIMETRIC, size); // 将CScrollView的大小设置为当前客户区大小
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CControlView::OnInitialUpdate()
|
||||||
|
{
|
||||||
|
CFormView::OnInitialUpdate();
|
||||||
|
|
||||||
|
// 添加运行模式
|
||||||
|
m_ComboMode.AddString((CString)"时间");
|
||||||
|
m_ComboMode.AddString((CString)"计数");
|
||||||
|
m_ComboMode.SetCurSel(0);
|
||||||
|
// 添加坐标轴模式
|
||||||
|
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*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
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::OnStaStart()
|
||||||
|
{
|
||||||
|
// 重置结束条件
|
||||||
|
m_nT0 = GetMilliTime();
|
||||||
|
// 设置状态
|
||||||
|
startFlag = FALSE;
|
||||||
|
stopFlag = TRUE;
|
||||||
|
clearFlag = FALSE;
|
||||||
|
((CEdit*)GetDlgItem(IDC_COND))->EnableWindow(FALSE);
|
||||||
|
// 获取屏幕值至变量
|
||||||
|
UpdateData(TRUE);
|
||||||
|
// 设置更新
|
||||||
|
SetTimer(1, 100, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CControlView::OnUpdateStaStart(CCmdUI* pCmdUI)
|
||||||
|
{
|
||||||
|
pCmdUI->Enable(startFlag);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CControlView::OnStaStop()
|
||||||
|
{
|
||||||
|
// 设置状态
|
||||||
|
startFlag = TRUE;
|
||||||
|
stopFlag = FALSE;
|
||||||
|
clearFlag = TRUE;
|
||||||
|
((CEdit*)GetDlgItem(IDC_COND))->EnableWindow(TRUE);
|
||||||
|
// 停止更新
|
||||||
|
KillTimer(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CControlView::OnUpdateStaStop(CCmdUI* pCmdUI)
|
||||||
|
{
|
||||||
|
pCmdUI->Enable(stopFlag);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CControlView::OnStaClear()
|
||||||
|
{
|
||||||
|
CMCADoc* pDoc = (CMCADoc*)GetDocument();
|
||||||
|
// 重置
|
||||||
|
m_nTime = 0;
|
||||||
|
m_nMaxCount = 0;
|
||||||
|
m_nPartCount = 0;
|
||||||
|
m_nTotalCount = 0;
|
||||||
|
m_nTimeStr = (CString)"0.0";
|
||||||
|
// 获取屏幕值至变量
|
||||||
|
UpdateData(FALSE);
|
||||||
|
// 设置曲线
|
||||||
|
for (int i = 0; i < pDoc->m_nChannelNum; i++)
|
||||||
|
pDoc->m_nChannelCount[i] = 0;
|
||||||
|
pDoc->UpdateAllViews(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CControlView::OnUpdateStaClear(CCmdUI* pCmdUI)
|
||||||
|
{
|
||||||
|
pCmdUI->Enable(clearFlag);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CControlView::OnTimer(UINT_PTR nIDEvent)
|
||||||
|
{
|
||||||
|
CString tmp;
|
||||||
|
CMCADoc* pDoc = (CMCADoc*)GetDocument();
|
||||||
|
m_nTotalCount = pDoc->GetTotal(0, 1023);
|
||||||
|
m_nMaxCount = pDoc->GetMax(0, 1023);
|
||||||
|
m_nPartCount = pDoc->GetTotal(m_nCursor1, m_nCursor2);
|
||||||
|
|
||||||
|
m_nTime += GetMilliTime() - m_nT0;
|
||||||
|
m_nTimeStr.Format(_T("%.1f"), m_nTime);
|
||||||
|
m_nT0 = GetMilliTime();
|
||||||
|
|
||||||
|
m_ComboMode.GetWindowText(tmp);
|
||||||
|
if (tmp == "时间" && m_nTime >= m_nCond) OnStaStop();
|
||||||
|
if (tmp == "计数" && m_nTotalCount >= m_nCond) OnStaStop();
|
||||||
|
|
||||||
|
UpdateData(FALSE);
|
||||||
|
|
||||||
|
int n = rand() % 50 + 25;
|
||||||
|
((CMCADoc*)GetDocument())->RandomPeak(source, n);
|
||||||
|
((CMCADoc*)GetDocument())->UpdateAllViews(NULL);
|
||||||
|
CFormView::OnTimer(nIDEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CControlView::OnSimuCo()
|
||||||
|
{
|
||||||
|
source = (CString)"Co60";
|
||||||
|
}
|
||||||
|
|
||||||
|
void CControlView::OnSimuCs()
|
||||||
|
{
|
||||||
|
source = (CString)"Cs137";
|
||||||
|
}
|
||||||
|
|
||||||
|
void CControlView::OnSimuNa()
|
||||||
|
{
|
||||||
|
source = (CString)"Na22";
|
||||||
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
// CControlView 窗体视图
|
// CControlView 窗体视图
|
||||||
|
|
||||||
@ -29,6 +29,45 @@ protected:
|
|||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
public:
|
public:
|
||||||
afx_msg void OnSize(UINT nType, int cx, int cy);
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||||||
|
virtual void OnUpdate(CView* /*pSender*/, LPARAM /*lHint*/, CObject* /*pHint*/);
|
||||||
|
double GetMilliTime();
|
||||||
|
|
||||||
|
// 选择信息
|
||||||
|
CString source = (CString)"Cs137";
|
||||||
|
|
||||||
|
// 光标信息
|
||||||
|
int m_nCursor1;
|
||||||
|
int m_nCursor2;
|
||||||
|
int m_nCursorROI;
|
||||||
|
int m_nCursorROICount;
|
||||||
|
|
||||||
|
// 侧边信息
|
||||||
|
double m_nCond;
|
||||||
|
double m_nT0;
|
||||||
|
double m_nTime;
|
||||||
|
CString m_nTimeStr;
|
||||||
|
int m_nTotalCount;
|
||||||
|
int m_nPartCount;
|
||||||
|
int m_nMaxCount;
|
||||||
|
int m_nRange;
|
||||||
|
CComboBox m_ComboMode;
|
||||||
|
CComboBox m_ComboAxis;
|
||||||
|
virtual void OnInitialUpdate();
|
||||||
|
|
||||||
|
// 菜单与工具栏响应
|
||||||
|
CMenu m_Menu;
|
||||||
|
CToolBar m_wndToolBar;
|
||||||
|
BOOL startFlag = TRUE;
|
||||||
|
BOOL stopFlag = FALSE;
|
||||||
|
BOOL clearFlag = FALSE;
|
||||||
|
afx_msg void OnStaStart();
|
||||||
|
afx_msg void OnUpdateStaStart(CCmdUI* pCmdUI);
|
||||||
|
afx_msg void OnStaStop();
|
||||||
|
afx_msg void OnUpdateStaStop(CCmdUI* pCmdUI);
|
||||||
|
afx_msg void OnStaClear();
|
||||||
|
afx_msg void OnUpdateStaClear(CCmdUI* pCmdUI);
|
||||||
|
afx_msg void OnTimer(UINT_PTR nIDEvent);
|
||||||
|
afx_msg void OnSimuCo();
|
||||||
|
afx_msg void OnSimuCs();
|
||||||
|
afx_msg void OnSimuNa();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "MCA.h"
|
#include "MCA.h"
|
||||||
#include "MCADoc.h"
|
#include "MCADoc.h"
|
||||||
#include "DetailView.h"
|
#include "DetailView.h"
|
||||||
|
#include "ControlView.h"
|
||||||
|
|
||||||
|
|
||||||
// CDetailView
|
// CDetailView
|
||||||
@ -14,7 +15,6 @@ IMPLEMENT_DYNCREATE(CDetailView, CView)
|
|||||||
|
|
||||||
CDetailView::CDetailView()
|
CDetailView::CDetailView()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CDetailView::~CDetailView()
|
CDetailView::~CDetailView()
|
||||||
@ -22,16 +22,52 @@ CDetailView::~CDetailView()
|
|||||||
}
|
}
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CDetailView, CView)
|
BEGIN_MESSAGE_MAP(CDetailView, CView)
|
||||||
// ON_WM_PAINT()
|
ON_WM_PAINT()
|
||||||
|
ON_WM_ERASEBKGND()
|
||||||
|
ON_WM_LBUTTONDOWN()
|
||||||
|
ON_WM_RBUTTONDOWN()
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
|
||||||
// CDetailView 绘图
|
// CDetailView 绘图
|
||||||
|
|
||||||
void CDetailView::OnDraw(CDC* pDC)
|
void CDetailView::OnDraw(CDC* pDc)
|
||||||
{
|
{
|
||||||
CDocument* pDoc = GetDocument();
|
// 获取区域
|
||||||
// TODO: 在此添加绘制代码
|
int L, R;
|
||||||
|
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||||
|
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||||
|
L = pView->m_nCursor1;
|
||||||
|
R = pView->m_nCursor2;
|
||||||
|
// 缩放
|
||||||
|
CRect rect;
|
||||||
|
GetClientRect(&rect);
|
||||||
|
ZF = rect.Width() / (R - L + 1.);
|
||||||
|
|
||||||
|
// 背景颜色、笔颜色等设置
|
||||||
|
CDC MemDC;
|
||||||
|
CBitmap Bitmap, * OldBitmap;
|
||||||
|
CPen pen(PS_SOLID, 2, RGB(255, 255, 255));
|
||||||
|
CPen* oldpen = MemDC.SelectObject(&pen);
|
||||||
|
|
||||||
|
GetClientRect(&rect);
|
||||||
|
MemDC.CreateCompatibleDC(pDc);
|
||||||
|
Bitmap.CreateCompatibleBitmap(pDc, rect.Width(), rect.Height());
|
||||||
|
OldBitmap = MemDC.SelectObject(&Bitmap);
|
||||||
|
MemDC.FillSolidRect(0, 0, rect.Width(), rect.Height(), RGB(119, 7, 243));
|
||||||
|
|
||||||
|
// 绘图
|
||||||
|
MemDC.MoveTo(1, rect.Height() - pDoc->m_nChannelCount[L]);
|
||||||
|
for (int i = L; i <= R; i++)
|
||||||
|
MemDC.LineTo((i - L) * ZF, rect.Height() - pDoc->m_nChannelCount[i]);
|
||||||
|
|
||||||
|
//释放资源
|
||||||
|
pDc->BitBlt(0, 0, rect.Width(), rect.Width(), &MemDC, 0, 0, SRCCOPY);
|
||||||
|
MemDC.SelectObject(oldpen);
|
||||||
|
MemDC.SelectObject(OldBitmap);
|
||||||
|
pen.DeleteObject();
|
||||||
|
Bitmap.DeleteObject();
|
||||||
|
MemDC.DeleteDC();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -53,3 +89,51 @@ void CDetailView::Dump(CDumpContext& dc) const
|
|||||||
|
|
||||||
|
|
||||||
// CDetailView 消息处理程序
|
// CDetailView 消息处理程序
|
||||||
|
|
||||||
|
|
||||||
|
void CDetailView::OnPaint()
|
||||||
|
{
|
||||||
|
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||||
|
CPaintDC dc(this); // device context for painting
|
||||||
|
OnPrepareDC(&dc);
|
||||||
|
OnDraw(&dc);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CDetailView::OnEraseBkgnd(CDC* pDC)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CDetailView::OnLButtonDown(UINT nFlags, CPoint point)
|
||||||
|
{
|
||||||
|
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||||
|
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||||
|
int nX = point.x / ZF + pView->m_nCursor1;
|
||||||
|
pView->m_nCursorROI = nX;
|
||||||
|
pView->m_nCursorROICount = pDoc->m_nChannelCount[nX];
|
||||||
|
|
||||||
|
CPen pen;
|
||||||
|
CDC* pDC = GetDC();
|
||||||
|
pen.CreatePen(PS_SOLID, 5, RGB(255, 180, 20));
|
||||||
|
CPen* oldpen = pDC->SelectObject(&pen);
|
||||||
|
CRect rect;
|
||||||
|
GetClientRect(&rect);
|
||||||
|
pDC->SetROP2(R2_XORPEN); //擦除
|
||||||
|
pDC->MoveTo(point.x, 0); //绘制光标
|
||||||
|
pDC->LineTo(point.x, rect.Height());
|
||||||
|
pDC->SelectObject(oldpen);
|
||||||
|
pen.DeleteObject();
|
||||||
|
|
||||||
|
CView::OnLButtonDown(nFlags, point);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CDetailView::OnRButtonDown(UINT nFlags, CPoint point)
|
||||||
|
{
|
||||||
|
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||||
|
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||||
|
pView->m_nCursor1 = 0;
|
||||||
|
pView->m_nCursor2 = 1023;
|
||||||
|
|
||||||
|
CView::OnRButtonDown(nFlags, point);
|
||||||
|
}
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <afxwin.h>
|
#include <afxwin.h>
|
||||||
|
|
||||||
|
#include "MCADoc.h"
|
||||||
|
#include "ControlView.h"
|
||||||
|
|
||||||
class CDetailView :
|
class CDetailView :
|
||||||
public CView
|
public CView
|
||||||
{
|
{
|
||||||
@ -26,5 +29,11 @@ protected:
|
|||||||
protected:
|
protected:
|
||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
public:
|
public:
|
||||||
// afx_msg void OnPaint();
|
double ZF = 1.0;
|
||||||
|
CMCADoc* pDoc = nullptr;
|
||||||
|
CControlView* pView = nullptr;
|
||||||
|
afx_msg void OnPaint();
|
||||||
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
||||||
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||||||
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
||||||
};
|
};
|
||||||
|
BIN
MCA/MCA.rc
@ -221,9 +221,20 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Image Include="..\UML\menu.bmp" />
|
<Image Include="..\UML\menu.bmp" />
|
||||||
|
<Image Include="res\clear.ico" />
|
||||||
|
<Image Include="res\close.ico" />
|
||||||
|
<Image Include="res\down.ico" />
|
||||||
|
<Image Include="res\folder.ico" />
|
||||||
|
<Image Include="res\left.ico" />
|
||||||
<Image Include="res\MCA.ico" />
|
<Image Include="res\MCA.ico" />
|
||||||
<Image Include="res\MCADoc.ico" />
|
<Image Include="res\MCADoc.ico" />
|
||||||
|
<Image Include="res\pause.ico" />
|
||||||
|
<Image Include="res\right.ico" />
|
||||||
|
<Image Include="res\save.ico" />
|
||||||
|
<Image Include="res\start.ico" />
|
||||||
|
<Image Include="res\stop.ico" />
|
||||||
<Image Include="res\Toolbar.bmp" />
|
<Image Include="res\Toolbar.bmp" />
|
||||||
|
<Image Include="res\up.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
@ -110,5 +110,38 @@
|
|||||||
<Image Include="..\UML\menu.bmp">
|
<Image Include="..\UML\menu.bmp">
|
||||||
<Filter>资源文件</Filter>
|
<Filter>资源文件</Filter>
|
||||||
</Image>
|
</Image>
|
||||||
|
<Image Include="res\close.ico">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\down.ico">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Image>
|
||||||
|
<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>
|
||||||
|
<Image Include="res\start.ico">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\stop.ico">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\up.ico">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\clear.ico">
|
||||||
|
<Filter>资源文件</Filter>
|
||||||
|
</Image>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -37,7 +37,7 @@ CMCADoc::CMCADoc() noexcept
|
|||||||
FILE *stream_tmp;
|
FILE *stream_tmp;
|
||||||
int channel_id, channel_count;
|
int channel_id, channel_count;
|
||||||
|
|
||||||
srand((unsigned)time(NULL));
|
srand((unsigned)time(0));
|
||||||
|
|
||||||
m_nChannelCount = new int[m_nChannelNum];
|
m_nChannelCount = new int[m_nChannelNum];
|
||||||
for (int i = 0; i < m_nChannelNum; i++) m_nChannelCount[i] = 0;
|
for (int i = 0; i < m_nChannelNum; i++) m_nChannelCount[i] = 0;
|
||||||
@ -85,6 +85,7 @@ BOOL CMCADoc::OnNewDocument()
|
|||||||
|
|
||||||
// TODO: 在此添加重新初始化代码
|
// TODO: 在此添加重新初始化代码
|
||||||
// (SDI 文档将重用该文档)
|
// (SDI 文档将重用该文档)
|
||||||
|
SetTitle(TEXT("MultiChannel Analyzer"));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -168,19 +169,21 @@ void CMCADoc::Dump(CDumpContext& dc) const
|
|||||||
}
|
}
|
||||||
#endif //_DEBUG
|
#endif //_DEBUG
|
||||||
|
|
||||||
|
|
||||||
// CMCADoc 命令
|
// CMCADoc 命令
|
||||||
double CMCADoc::uniform()
|
double CMCADoc::Uniform()
|
||||||
{
|
{
|
||||||
int x = rand();
|
int x = rand();
|
||||||
double y = (float)(x % 100) / 100;
|
double y = (x % 10000) / 10000.0;
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMCADoc::random_peaks(std::string name)
|
void CMCADoc::RandomPeak(CString name, int n)
|
||||||
{
|
{
|
||||||
int K;
|
__int64 K;
|
||||||
double eps = uniform();
|
double eps;
|
||||||
|
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
eps = Uniform();
|
||||||
|
|
||||||
if (name == "Co60") K = std::lower_bound(es_Co60, es_Co60 + 1024, eps) - es_Co60;
|
if (name == "Co60") K = std::lower_bound(es_Co60, es_Co60 + 1024, eps) - es_Co60;
|
||||||
else if (name == "Cs137") K = std::lower_bound(es_Cs137, es_Cs137 + 1024, eps) - es_Cs137;
|
else if (name == "Cs137") K = std::lower_bound(es_Cs137, es_Cs137 + 1024, eps) - es_Cs137;
|
||||||
@ -188,3 +191,36 @@ void CMCADoc::random_peaks(std::string name)
|
|||||||
|
|
||||||
m_nChannelCount[K] += 1;
|
m_nChannelCount[K] += 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int CMCADoc::GetTotal(int L, int R)
|
||||||
|
{
|
||||||
|
int cSum = 0;
|
||||||
|
for (int i = L; i <= min(m_nChannelNum-1, R); i++) cSum += m_nChannelCount[i];
|
||||||
|
return cSum;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CMCADoc::GetMax(int L, int R)
|
||||||
|
{
|
||||||
|
int cMax = 0;
|
||||||
|
for (int i = L; i <= min(m_nChannelNum - 1, R); i++)
|
||||||
|
if (m_nChannelCount[i] > cMax)
|
||||||
|
cMax = m_nChannelCount[i];
|
||||||
|
return cMax;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
CView* CMCADoc::GetView(CRuntimeClass* pClass)
|
||||||
|
{
|
||||||
|
CView* pView{};
|
||||||
|
POSITION pos = GetFirstViewPosition();
|
||||||
|
while (pos != NULL) {
|
||||||
|
pView = GetNextView(pos);
|
||||||
|
if (pView->IsKindOf(pClass)) break;
|
||||||
|
}
|
||||||
|
if (!pView->IsKindOf(pClass)) {
|
||||||
|
AfxMessageBox((CString)"Cannot Locate the View!");
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
return pView;
|
||||||
|
}
|
||||||
|
10
MCA/MCADoc.h
@ -26,10 +26,8 @@ private:
|
|||||||
|
|
||||||
// 操作
|
// 操作
|
||||||
public:
|
public:
|
||||||
void random_peaks(std::string name);
|
void RandomPeak(CString name, int n);
|
||||||
|
double Uniform();
|
||||||
private:
|
|
||||||
double uniform();
|
|
||||||
|
|
||||||
// 重写
|
// 重写
|
||||||
public:
|
public:
|
||||||
@ -59,4 +57,8 @@ protected:
|
|||||||
// 用于为搜索处理程序设置搜索内容的 Helper 函数
|
// 用于为搜索处理程序设置搜索内容的 Helper 函数
|
||||||
void SetSearchContent(const CString& value);
|
void SetSearchContent(const CString& value);
|
||||||
#endif // SHARED_HANDLERS
|
#endif // SHARED_HANDLERS
|
||||||
|
public:
|
||||||
|
int GetTotal(int L, int R);
|
||||||
|
int GetMax(int L, int R);
|
||||||
|
CView* GetView(CRuntimeClass* pClass);
|
||||||
};
|
};
|
||||||
|
@ -67,7 +67,10 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|||||||
EnableDocking(CBRS_ALIGN_ANY);
|
EnableDocking(CBRS_ALIGN_ANY);
|
||||||
DockControlBar(&m_wndToolBar);
|
DockControlBar(&m_wndToolBar);
|
||||||
|
|
||||||
|
MoveWindow(0, 0, 2386, 1200);
|
||||||
|
CenterWindow();
|
||||||
|
|
||||||
|
OnLoadToolBarIcon();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,16 +82,17 @@ BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
|
|||||||
WS_CHILD | WS_VISIBLE, AFX_IDW_PANE_FIRST));
|
WS_CHILD | WS_VISIBLE, AFX_IDW_PANE_FIRST));
|
||||||
// 左侧窗口创建视图,第0行第0列
|
// 左侧窗口创建视图,第0行第0列
|
||||||
VERIFY(m_wndSplitter.CreateView(0, 0,
|
VERIFY(m_wndSplitter.CreateView(0, 0,
|
||||||
RUNTIME_CLASS(CControlView), CSize(360, 0), pContext));
|
RUNTIME_CLASS(CControlView), CSize(300, 0), pContext));
|
||||||
// 右侧窗口上下拆分,2行1列
|
// 右侧窗口上下拆分,2行1列
|
||||||
VERIFY(m_wndSplitter_2.CreateStatic(&m_wndSplitter, 2, 1,
|
VERIFY(m_wndSplitter2.CreateStatic(&m_wndSplitter, 2, 1,
|
||||||
WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1)));
|
WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1)));
|
||||||
// 右上窗口创建视图,第0行第0列
|
// 右上窗口创建视图,第0行第0列
|
||||||
VERIFY(m_wndSplitter_2.CreateView(0, 0,
|
VERIFY(m_wndSplitter2.CreateView(0, 0,
|
||||||
RUNTIME_CLASS(CTotalView), CSize(0, 300), pContext));
|
RUNTIME_CLASS(CTotalView), CSize(2086, 400), pContext));
|
||||||
// 右下窗口创建视图,第1行第0列
|
// 右下窗口创建视图,第1行第0列
|
||||||
VERIFY(m_wndSplitter_2.CreateView(1, 0,
|
VERIFY(m_wndSplitter2.CreateView(1, 0,
|
||||||
RUNTIME_CLASS(CDetailView), CSize(0, 0), pContext));
|
RUNTIME_CLASS(CDetailView), CSize(2086, 0), pContext));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,9 +100,8 @@ BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
|
|||||||
{
|
{
|
||||||
if( !CFrameWnd::PreCreateWindow(cs) )
|
if( !CFrameWnd::PreCreateWindow(cs) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
// TODO: 在此处通过修改
|
cs.style &= ~WS_THICKFRAME;
|
||||||
// CREATESTRUCT cs 来修改窗口类或样式
|
cs.style &= ~WS_MAXIMIZEBOX;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,3 +122,33 @@ void CMainFrame::Dump(CDumpContext& dc) const
|
|||||||
|
|
||||||
// CMainFrame 消息处理程序
|
// CMainFrame 消息处理程序
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void CMainFrame::OnLoadToolBarIcon()
|
||||||
|
{
|
||||||
|
HICON icon;
|
||||||
|
m_imgList.Create(50, 50, TRUE | ILC_COLOR32, 10, 0);
|
||||||
|
|
||||||
|
icon = AfxGetApp()->LoadIconW(IDI_START);
|
||||||
|
m_imgList.Add(icon);
|
||||||
|
icon = AfxGetApp()->LoadIconW(IDI_STOP);
|
||||||
|
m_imgList.Add(icon);
|
||||||
|
icon = AfxGetApp()->LoadIconW(IDI_CLEAR);
|
||||||
|
m_imgList.Add(icon);
|
||||||
|
icon = AfxGetApp()->LoadIconW(IDI_FOLDER);
|
||||||
|
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_CLOSE);
|
||||||
|
m_imgList.Add(icon);
|
||||||
|
|
||||||
|
m_wndToolBar.GetToolBarCtrl().SetImageList(&m_imgList);
|
||||||
|
}
|
||||||
|
@ -14,7 +14,7 @@ protected: // 仅从序列化创建
|
|||||||
// 特性
|
// 特性
|
||||||
protected:
|
protected:
|
||||||
CSplitterWnd m_wndSplitter;
|
CSplitterWnd m_wndSplitter;
|
||||||
CSplitterWnd m_wndSplitter_2;
|
CSplitterWnd m_wndSplitter2;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// 操作
|
// 操作
|
||||||
@ -42,6 +42,9 @@ protected:
|
|||||||
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
|
|
||||||
|
public:
|
||||||
|
void OnLoadToolBarIcon();
|
||||||
|
CImageList m_imgList;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,11 +6,34 @@
|
|||||||
#define IDP_OLE_INIT_FAILED 100
|
#define IDP_OLE_INIT_FAILED 100
|
||||||
#define IDR_MAINFRAME 128
|
#define IDR_MAINFRAME 128
|
||||||
#define IDR_MCATYPE 130
|
#define IDR_MCATYPE 130
|
||||||
#define IDD_DIALOG1 310
|
|
||||||
#define IDD_DIALOG_CONTROL 310
|
#define IDD_DIALOG_CONTROL 310
|
||||||
#define IDC_TREE1 1010
|
#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 IDC_MFCSHELLTREE1 1013
|
#define IDC_MFCSHELLTREE1 1013
|
||||||
#define IDC_MFCMASKEDEDIT1 1015
|
#define IDC_MODE 1017
|
||||||
|
#define IDC_COND 1018
|
||||||
|
#define IDC_TIME 1019
|
||||||
|
#define IDC_TCOUNT 1020
|
||||||
|
#define IDC_BCHA 1021
|
||||||
|
#define IDC_ECHA 1022
|
||||||
|
#define IDC_CURSOR1 1023
|
||||||
|
#define IDC_CURSORROI_COUNT 1024
|
||||||
|
#define IDC_RANGE 1025
|
||||||
|
#define IDC_MCOUNT 1026
|
||||||
|
#define IDC_AXIS 1027
|
||||||
|
#define IDC_CURSOR1_COUNT 1028
|
||||||
|
#define IDC_CURSOR2 1029
|
||||||
|
#define IDC_CURSOR2_COUNT 1030
|
||||||
|
#define IDC_CURSORROI 1031
|
||||||
|
#define IDC_PCOUNT 1032
|
||||||
#define ID_32786 32786
|
#define ID_32786 32786
|
||||||
#define ID_32787 32787
|
#define ID_32787 32787
|
||||||
#define ID_32788 32788
|
#define ID_32788 32788
|
||||||
@ -29,25 +52,45 @@
|
|||||||
#define ID_32801 32801
|
#define ID_32801 32801
|
||||||
#define ID_BUTTON32803 32803
|
#define ID_BUTTON32803 32803
|
||||||
#define ID_BUTTON32804 32804
|
#define ID_BUTTON32804 32804
|
||||||
#define ID_BUTTON32805 32805
|
#define ID_ARROW_RIGHT 32805
|
||||||
#define ID_BUTTON32806 32806
|
#define ID_ARROW_UP 32806
|
||||||
#define ID_BUTTON32807 32807
|
#define ID_ARROW_DOWN 32807
|
||||||
#define ID_BUTTON32808 32808
|
#define ID_BUTTON32808 32808
|
||||||
#define ID_BUTTON32809 32809
|
#define ID_STA_START 32809
|
||||||
#define ID_BUTTON32810 32810
|
#define ID_STA_STOP 32811
|
||||||
#define ID_BUTTON32811 32811
|
|
||||||
#define ID_32812 32812
|
#define ID_32812 32812
|
||||||
#define ID_32813 32813
|
#define ID_32813 32813
|
||||||
#define ID_32814 32814
|
#define ID_32814 32814
|
||||||
#define ID_32815 32815
|
#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
|
||||||
|
#define ID_RANGE_D4 32826
|
||||||
|
#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
|
||||||
|
#define ID_DATA_ORIGIN 32834
|
||||||
|
#define ID_DATA_3 32835
|
||||||
|
#define ID_DATA_5 32836
|
||||||
|
#define ID_STA_CLEAR 32837
|
||||||
|
#define ID_32838 32838
|
||||||
|
#define ID_32839 32839
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 313
|
#define _APS_NEXT_RESOURCE_VALUE 324
|
||||||
#define _APS_NEXT_COMMAND_VALUE 32816
|
#define _APS_NEXT_COMMAND_VALUE 32840
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1016
|
#define _APS_NEXT_CONTROL_VALUE 1019
|
||||||
#define _APS_NEXT_SYMED_VALUE 310
|
#define _APS_NEXT_SYMED_VALUE 310
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
// TotalView.cpp : 实现文件
|
// TotalView.cpp : 实现文件
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
|
||||||
#include "MCA.h"
|
#include "MCA.h"
|
||||||
|
#include "MCADoc.h"
|
||||||
#include "TotalView.h"
|
#include "TotalView.h"
|
||||||
|
#include "ControlView.h"
|
||||||
|
|
||||||
// CTotalView
|
// CTotalView
|
||||||
|
|
||||||
@ -21,19 +22,46 @@ CTotalView::~CTotalView()
|
|||||||
}
|
}
|
||||||
|
|
||||||
BEGIN_MESSAGE_MAP(CTotalView, CView)
|
BEGIN_MESSAGE_MAP(CTotalView, CView)
|
||||||
|
ON_WM_PAINT()
|
||||||
|
ON_WM_ERASEBKGND()
|
||||||
|
ON_WM_LBUTTONDOWN()
|
||||||
|
ON_WM_RBUTTONDOWN()
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
|
||||||
// CTotalView 绘图
|
// CTotalView 绘图
|
||||||
|
|
||||||
void CTotalView::OnDraw(CDC* pDC)
|
void CTotalView::OnDraw(CDC* pDc)
|
||||||
{
|
{
|
||||||
CDocument* pDoc = GetDocument();
|
// 背景颜色、笔颜色等设置
|
||||||
// TODO: 在此添加绘制代码
|
CDC MemDC;
|
||||||
|
CRect rect;
|
||||||
|
CBitmap Bitmap, * OldBitmap;
|
||||||
|
CPen pen(PS_SOLID, 2, RGB(0, 0, 0));
|
||||||
|
CPen* oldpen = MemDC.SelectObject(&pen);
|
||||||
|
|
||||||
|
GetClientRect(&rect);
|
||||||
|
MemDC.CreateCompatibleDC(pDc);
|
||||||
|
Bitmap.CreateCompatibleBitmap(pDc, rect.Width(), rect.Height());
|
||||||
|
OldBitmap = MemDC.SelectObject(&Bitmap);
|
||||||
|
MemDC.FillSolidRect(0, 0, rect.Width(), rect.Height(), RGB(36, 217, 163));
|
||||||
|
|
||||||
|
// 绘图
|
||||||
|
MemDC.MoveTo(1, rect.Height() - pDoc->m_nChannelCount[0]);
|
||||||
|
for (int i = 0; i < pDoc->m_nChannelNum; i++)
|
||||||
|
MemDC.LineTo(2 * i + 1, rect.Height() - pDoc->m_nChannelCount[i]);
|
||||||
|
|
||||||
|
//释放资源
|
||||||
|
pDc->BitBlt(0, 0, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);
|
||||||
|
MemDC.SelectObject(oldpen);
|
||||||
|
MemDC.SelectObject(OldBitmap);
|
||||||
|
pen.DeleteObject();
|
||||||
|
Bitmap.DeleteObject();
|
||||||
|
MemDC.DeleteDC();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// CTotalView 诊断
|
// CTotalView 诊断
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
void CTotalView::AssertValid() const
|
void CTotalView::AssertValid() const
|
||||||
@ -50,4 +78,37 @@ void CTotalView::Dump(CDumpContext& dc) const
|
|||||||
#endif //_DEBUG
|
#endif //_DEBUG
|
||||||
|
|
||||||
|
|
||||||
// CTotalView 消息处理程序
|
// CTotalView 消息处理程序
|
||||||
|
|
||||||
|
|
||||||
|
void CTotalView::OnPaint()
|
||||||
|
{
|
||||||
|
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||||
|
CPaintDC dc(this); // device context for painting
|
||||||
|
OnPrepareDC(&dc);
|
||||||
|
OnDraw(&dc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL CTotalView::OnEraseBkgnd(CDC* pDC)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTotalView::OnLButtonDown(UINT nFlags, CPoint point)
|
||||||
|
{
|
||||||
|
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||||
|
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||||
|
int nX = (point.x - 1) / 2;
|
||||||
|
if (nX < pView->m_nCursor2) pView->m_nCursor1 = nX;
|
||||||
|
CView::OnLButtonDown(nFlags, point);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CTotalView::OnRButtonDown(UINT nFlags, CPoint point)
|
||||||
|
{
|
||||||
|
if (pDoc == NULL) pDoc = (CMCADoc*)GetDocument();
|
||||||
|
if (pView == NULL) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView));
|
||||||
|
int nX = (point.x - 1) / 2;
|
||||||
|
if (nX > pView->m_nCursor1) pView->m_nCursor2 = nX;
|
||||||
|
CView::OnRButtonDown(nFlags, point);
|
||||||
|
}
|
@ -1,6 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <afxwin.h>
|
#include <afxwin.h>
|
||||||
|
|
||||||
|
#include "MCADoc.h"
|
||||||
|
#include "ControlView.h"
|
||||||
|
|
||||||
class CTotalView :
|
class CTotalView :
|
||||||
public CView
|
public CView
|
||||||
{
|
{
|
||||||
@ -25,4 +28,11 @@ protected:
|
|||||||
// 生成的消息映射函数
|
// 生成的消息映射函数
|
||||||
protected:
|
protected:
|
||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
|
public:
|
||||||
|
CMCADoc* pDoc = nullptr;
|
||||||
|
CControlView* pView = nullptr;
|
||||||
|
afx_msg void OnPaint();
|
||||||
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
||||||
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||||||
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
||||||
};
|
};
|
||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 12 KiB |
BIN
MCA/res/clear.ico
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
MCA/res/close.ico
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
MCA/res/down.ico
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
MCA/res/folder.ico
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
MCA/res/left.ico
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
MCA/res/right.ico
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
MCA/res/save.ico
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
MCA/res/start.ico
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
MCA/res/stop.ico
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
MCA/res/up.ico
Normal file
After Width: | Height: | Size: 10 KiB |