📄 printview.cpp
字号:
// PrintView.cpp : implementation file
//
#include "stdafx.h"
#include "FiniteElec.h"
#include "PrintView.h"
#include "FiniteElecDoc.h"
#include "Element.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPrintView
IMPLEMENT_DYNCREATE(CPrintView, CScrollView)
CPrintView::CPrintView()
{
EnableAutomation();
Init();
}
CPrintView::~CPrintView()
{
}
void CPrintView::OnFinalRelease()
{
// When the last reference for an automation object is released
// OnFinalRelease is called. The base class will automatically
// deletes the object. Add additional cleanup required for your
// object before calling the base class.
CScrollView::OnFinalRelease();
}
BEGIN_MESSAGE_MAP(CPrintView, CScrollView)
//{{AFX_MSG_MAP(CPrintView)
ON_COMMAND(ID_VIEW_ZOOMIN, OnViewZoomin)
ON_COMMAND(ID_VIEW_ZOOMOUT, OnViewZoomout)
ON_COMMAND(ID_VIEW_GODOWN, OnViewGodown)
ON_COMMAND(ID_VIEW_GOLEFT, OnViewGoleft)
ON_COMMAND(ID_VIEW_GORIGHT, OnViewGoright)
ON_COMMAND(ID_VIEW_GOUP, OnViewGoup)
ON_COMMAND(ID_VIEW_RESET, OnViewReset)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_DISPATCH_MAP(CPrintView, CScrollView)
//{{AFX_DISPATCH_MAP(CPrintView)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()
// Note: we add support for IID_IPrintView to support typesafe binding
// from VBA. This IID must match the GUID that is attached to the
// dispinterface in the .ODL file.
// {42D92017-98E1-43B5-8099-AC91334F1DFF}
static const IID IID_IPrintView =
{ 0x42d92017, 0x98e1, 0x43b5, { 0x80, 0x99, 0xac, 0x91, 0x33, 0x4f, 0x1d, 0xff } };
BEGIN_INTERFACE_MAP(CPrintView, CScrollView)
INTERFACE_PART(CPrintView, IID_IPrintView, Dispatch)
END_INTERFACE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPrintView drawing
void CPrintView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
//_______________________________
///////////////////////////////////
//绘制数据完全由CStructure决定
void CPrintView::OnDraw(CDC* pDC)
{
CFiniteElecDoc* pDoc = (CFiniteElecDoc*)GetDocument();
////----------------------
if(m_tagView==0&&pDoc->m_isLoaded)
{
// pDC->TextOut(m_line*5,m_line*5,"这里显示区域的形态");
DrawInputGraph(pDC);
}
else if(m_tagView==1&&pDoc->m_structure.m_solved)
{
DrawOutputGraph(pDC);
// pDC->TextOut(m_line*5,m_line*5,"这里显示等值图");
}
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CPrintView diagnostics
#ifdef _DEBUG
void CPrintView::AssertValid() const
{
CScrollView::AssertValid();
}
void CPrintView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPrintView message handlers
///////////////////
///初始化数据
void CPrintView::Init()
{
m_line=20;
m_page=m_line*20;
m_scale=1.0;
// m_tagView=100;
m_xoy=CPoint(5*m_line,20*m_line);
}
//////////////////////////////////
////
void CPrintView::DrawInputGraph(CDC *pDC)
{
CFiniteElecDoc* pDoc = (CFiniteElecDoc*)GetDocument();
int width;
width=int(sqrt(pDoc->m_structure.m_nodeArray.GetSize())*1)*m_line;
SetScrollSizes(MM_TEXT,CSize(width,width));
//-----------------------------------------
CElement* pElement;
int i;
for(i=0;i<pDoc->m_structure.m_elementArray.GetSize();i++)
{ pDoc->m_structure.m_elementArray.GetSize();
//绘制每个单元,调用单元的绘制函数
pElement=(CElement*)(pDoc->m_structure.m_elementArray.GetAt(i));
pElement->DrawFrame(pDC,m_xoy,m_scale);
}
}
void CPrintView::DrawOutputGraph(CDC *pDC)
{
CFiniteElecDoc* pDoc = (CFiniteElecDoc*)GetDocument();
int width;
width=int(sqrt(pDoc->m_structure.m_nodeArray.GetSize())*1)*m_line;
SetScrollSizes(MM_TEXT,CSize(width,width));
//------------------------------------------
CElement* pElement;
CNode* pNode;
int i;
double max,min,temp;
max=min=((CNode*)(pDoc->m_structure.m_nodeArray.GetAt(0)))->m_nodeValue;
for(i=0;i<pDoc->m_structure.m_nodeArray.GetSize();i++)
{//求出区域内电压值的范围
pNode=(CNode*)(pDoc->m_structure.m_nodeArray.GetAt(i));
temp=pNode->m_nodeValue;
if(temp>=max)max=temp;
else if(temp<min)min=temp;
}
//-----------------------------
for(i=0;i<pDoc->m_structure.m_elementArray.GetSize();i++)
{ pDoc->m_structure.m_elementArray.GetSize();
//绘制每个单元,调用单元的绘制函数
pElement=(CElement*)(pDoc->m_structure.m_elementArray.GetAt(i));
pElement->DrawEqualValueGraph(pDC,m_xoy,min,max,m_scale);
}
}
/////////////////////////////////////////
//
void CPrintView::OnViewZoomin()
{
m_scale+=0.5f;// 一次增加0.5倍
m_line=int(m_line*m_scale);
m_page=int(m_page*m_scale);
GetDocument()->UpdateAllViews(NULL);
// OnViewGodown();
}
void CPrintView::OnViewZoomout()
{
m_scale-=0.5f;// 一次减小0.5倍
if(m_scale<=0)m_scale=0;
m_line=int(m_line*m_scale);
m_page=int(m_page*m_scale);
// GetDocument()->UpdateAllViews(this);//这种情况下将不会更新自身了。
GetDocument()->UpdateAllViews(NULL);
// OnViewGoup();
}
///////////////////////////////////////
///移动图形
void CPrintView::OnViewGoleft()
{
m_xoy.x-=40;
GetDocument()->UpdateAllViews(NULL);
// OnInitialUpdate();
}
void CPrintView::OnViewGoright()
{
m_xoy.x+=40;
GetDocument()->UpdateAllViews(NULL);
// OnInitialUpdate();
}
void CPrintView::OnViewGodown()
{
m_xoy.y+=40;
GetDocument()->UpdateAllViews(NULL);
// OnInitialUpdate();
}
void CPrintView::OnViewGoup()
{
m_xoy.y-=40;
GetDocument()->UpdateAllViews(NULL);
// OnInitialUpdate();
}
void CPrintView::OnViewReset()
{//回到初始状态
Init();
m_xoy.x=5*m_line;
m_xoy.y=20*m_line;
GetDocument()->UpdateAllViews(NULL);
// OnInitialUpdate();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -