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

📄 lzwview.cpp

📁 C++类实现LZW 压缩算法
💻 CPP
字号:
// LZWView.cpp : implementation of the CLZWView class
//

#include "stdafx.h"
#include "LZW.h"

#include "LZWDoc.h"
#include "LZWView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CLZWView

IMPLEMENT_DYNCREATE(CLZWView, CScrollView)

BEGIN_MESSAGE_MAP(CLZWView, CScrollView)
	//{{AFX_MSG_MAP(CLZWView)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLZWView construction/destruction

CLZWView::CLZWView()
{
	// TODO: add construction code here

}

CLZWView::~CLZWView()
{
}

BOOL CLZWView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CLZWView drawing

void CLZWView::OnDraw(CDC* pDC)
{
	CStringArray *log = NULL;
	int counter, total;
	long line = 5, indent = 5;
	CString sline;
	CRect rc, rcTotal = CRect(0, 0, 0, 0);
	CLZWDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
	//	Get the log array from the Document class
	log = pDoc->GetLog();
	total = log->GetSize();
	pDC->SetBkMode(TRANSPARENT);

	//	Go over each line of the document and print it to the view
	for (counter = 0; counter < total; counter++)
	{
		//	Calculate the text size (for one line)
		rc = CRect(0, 0, 0, 0);
		sline = log->GetAt(counter);
		pDC->DrawText(sline, &rc, DT_CALCRECT);

		//	Calculate the full recangle size of the written document
		//	This is for reseting the scroll bars values, so we can use
		//	them to scroll ove the document
		if (rc.Width() > rcTotal.Width())
			rc.right = rc.right;
		rcTotal.bottom += rc.bottom;

		//	Change the values for the next line (with spaces from the previous)
		rc.left = indent;
		rc.right += 5;
		rc.top = line;
		rc.bottom += line;

		line = rc.bottom + 5;

		//	Draw the line text in the view
		pDC->DrawText(sline, &rc, DT_LEFT | DT_VCENTER);
	}

	//	Change the view scroll bars, and set the movement sizes to match the
	//	rows of data
	SetScrollSizes(MM_TEXT, CSize(rcTotal.Width(), rcTotal.Height()),
		CSize(10, rc.Height() * 10), CSize(3, rc.Height() * 3));
}

void CLZWView::OnInitialUpdate()
{
	CRect rc;

	CScrollView::OnInitialUpdate();

	GetClientRect(&rc);

	SetScrollSizes(MM_TEXT, CSize(rc.Width(), rc.Height()), CSize(1, 1), CSize(3, 3));
}

/////////////////////////////////////////////////////////////////////////////
// CLZWView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CLZWView message handlers

void CLZWView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	CDC *pDC = NULL;

	Invalidate(FALSE);
	OnDraw((pDC = GetDC()));
	ReleaseDC(pDC);
}

⌨️ 快捷键说明

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