⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphicsview.cpp

📁 计算机体系结构中关于通用5级流水线的模拟实现程序
💻 CPP
字号:
// GraphicsView.cpp : implementation file
//

#include "stdafx.h"
#include "Pipeline.h"
#include "GraphicsView.h"
#include "PipelineDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// GraphicsView

IMPLEMENT_DYNCREATE(GraphicsView, CScrollView)

GraphicsView::GraphicsView(): m_rectPrint(0, 0, 11520, -15120)
{
}

GraphicsView::~GraphicsView()
{
}


BEGIN_MESSAGE_MAP(GraphicsView, CScrollView)
	//{{AFX_MSG_MAP(GraphicsView)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// GraphicsView drawing

void GraphicsView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

/*	CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);*/

	CSize sizeTotal(m_rectPrint.Width(), -m_rectPrint.Height());
    CSize sizePage(sizeTotal.cx / 2,
                   sizeTotal.cy / 2);   // page scroll
    CSize sizeLine(sizeTotal.cx / 100,
                   sizeTotal.cy / 100); // line scroll
    SetScrollSizes(MM_TEXT, sizeTotal, sizePage, sizeLine);
}

void GraphicsView::OnDraw(CDC* pDC)
{
	CPipelineDoc* pDoc = GetDocument();
	// TODO: add draw code here
    int        nHeight,i,j,row,line,exe_num;
    CString    outputLine;
    CFont      font;
    TEXTMETRIC tm;
    font.CreateFont(-16, 8, 0, 0, 400, FALSE, FALSE, 0,
        ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
        DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Fixedsys");
    CFont* pOldFont = (CFont*) pDC->SelectObject(&font);
    pDC->GetTextMetrics(&tm);
    nHeight = tm.tmHeight + tm.tmExternalLeading;
	pDC->TextOut(32, 8, "Instr\\Cycle");
	
	for(i=0;i<1000;i++)
	{
		outputLine.Format("%d",i);
		pDC->TextOut(240+32*i, 8, outputLine);
	}
	
	if(!pDoc->GoodFile)
		return;
	line=pDoc->states.number;
	row=pDoc->cycle;

	for(i=1;i<=line;i++)
	{//从行列扫描看每一个Icon_rec[][]的状态,然后显示
		exe_num=pDoc->states.instruction[i-1];
		pDC->TextOut(32, 8+32*i, pDoc->attr[exe_num]);
		for(j=i-1;j<row;j++)
		{
			if(pDoc->Icon_Rec[i][j]!=-1&&pDoc->Icon_Rec[i][j]!=-2)
			{
			HICON hic = AfxGetApp()->LoadIcon(IDI_IF+pDoc->Icon_Rec[i][j]);
			if (hic == NULL)
				AfxMessageBox("error");
			pDC->DrawIcon(224+32*j, 32+32*(i-1), hic);
			}
		}
	}
}

/////////////////////////////////////////////////////////////////////////////
// GraphicsView diagnostics

#ifdef _DEBUG
void GraphicsView::AssertValid() const
{
	CScrollView::AssertValid();
}

void GraphicsView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CPipelineDoc* GraphicsView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPipelineDoc)));
	return (CPipelineDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// GraphicsView message handlers

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -