166 lines
4.3 KiB
C++
166 lines
4.3 KiB
C++
// TotalView.cpp : 实现文件
|
|
//
|
|
#include <math.h>
|
|
|
|
#include "pch.h"
|
|
|
|
#include "MCA.h"
|
|
#include "MCADoc.h"
|
|
#include "TotalView.h"
|
|
#include "ControlView.h"
|
|
|
|
// CTotalView
|
|
|
|
IMPLEMENT_DYNCREATE(CTotalView, CView)
|
|
|
|
CTotalView::CTotalView()
|
|
{
|
|
|
|
}
|
|
|
|
CTotalView::~CTotalView()
|
|
{
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CTotalView, CView)
|
|
ON_WM_PAINT()
|
|
ON_WM_ERASEBKGND()
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_RBUTTONDOWN()
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CTotalView 绘图
|
|
|
|
void CTotalView::OnDraw(CDC* pDc)
|
|
{
|
|
// 背景颜色、笔颜色等设置
|
|
CDC MemDC;
|
|
MemDC.CreateCompatibleDC(pDc);
|
|
|
|
CRect rect;
|
|
CBitmap Bitmap, * OldBitmap;
|
|
CPen pen(PS_SOLID, 3, RGB(0, 0, 0));
|
|
CPen* oldpen = MemDC.SelectObject(&pen);
|
|
|
|
GetClientRect(&rect);
|
|
Bitmap.CreateCompatibleBitmap(pDc, rect.Width(), rect.Height());
|
|
OldBitmap = MemDC.SelectObject(&Bitmap);
|
|
MemDC.FillSolidRect(0, 0, rect.Width(), rect.Height(), RGB(36, 217, 163));
|
|
|
|
// 绘图
|
|
if (pView->m_sAxisMode == "Linear") {
|
|
MemDC.MoveTo(1, rect.Height() - pDoc->m_nChannelSmooth[0] * rect.Height() / pView->m_nLC);
|
|
for (int i = 0; i < 1024; i++)
|
|
MemDC.LineTo(2 * i + 1, rect.Height() - pDoc->m_nChannelSmooth[i] * rect.Height() / pView->m_nLC);
|
|
}
|
|
else {
|
|
MemDC.MoveTo(1, rect.Height() - log10(max(pDoc->m_nChannelSmooth[0], 1)) * rect.Height() / log10(pView->m_nLC));
|
|
for (int i = 0; i < 1024; i++)
|
|
MemDC.LineTo(2 * i + 1, rect.Height() - log10(max(pDoc->m_nChannelSmooth[i], 1)) * rect.Height() / log10(pView->m_nLC));
|
|
}
|
|
// 绘制光标竖线
|
|
pen.CreatePen(PS_SOLID, 5, RGB(255, 0, 0));
|
|
MemDC.SelectObject(&pen);
|
|
MemDC.MoveTo(2 * pView->m_nCursor1 + 1, 0);
|
|
MemDC.LineTo(2 * pView->m_nCursor1 + 1, rect.Height());
|
|
pen.CreatePen(PS_SOLID, 5, RGB(0, 255, 0));
|
|
MemDC.SelectObject(&pen);
|
|
MemDC.MoveTo(2 * pView->m_nCursor2 + 1, 0);
|
|
MemDC.LineTo(2 * pView->m_nCursor2 + 1, rect.Height());
|
|
|
|
//释放资源
|
|
MemDC.SelectObject(oldpen);
|
|
pen.DeleteObject();
|
|
|
|
pDc->BitBlt(0, 0, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);
|
|
MemDC.SelectObject(OldBitmap);
|
|
Bitmap.DeleteObject();
|
|
MemDC.DeleteDC();
|
|
}
|
|
|
|
|
|
// CTotalView 诊断
|
|
|
|
#ifdef _DEBUG
|
|
void CTotalView::AssertValid() const
|
|
{
|
|
CView::AssertValid();
|
|
}
|
|
|
|
#ifndef _WIN32_WCE
|
|
void CTotalView::Dump(CDumpContext& dc) const
|
|
{
|
|
CView::Dump(dc);
|
|
}
|
|
#endif
|
|
#endif //_DEBUG
|
|
|
|
|
|
// 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);
|
|
}
|
|
|
|
|
|
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;
|
|
pView->m_nCursorROI = max(pView->m_nCursor1, pView->m_nCursorROI);
|
|
}
|
|
pDoc->UpdateAllViews(NULL);
|
|
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;
|
|
pView->m_nCursorROI = min(pView->m_nCursor2, pView->m_nCursorROI);
|
|
}
|
|
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);
|
|
}
|