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

📄 memorymagic.cpp

📁 symbian上的内存管理程序
💻 CPP
字号:
// memorymagic.cpp
//
// Copyright (c) 2000 Symbian Ltd.  All rights reserved.
//

#include "memorymagic.h"

#include "eikenv.h"
#include "s32file.h"

// CX

void CX::UseL()
	{
	TInt* pi=new(ELeave) TInt;
	delete pi;
	}

// CY

CY::CY() // bad bad
	{
	iX=new(ELeave) CX;
	}

CY::~CY()
	{
	delete iX;
	}

// CZ

void CZ::ConstructL()
	{
	iX=new(ELeave) CX;
	}

CZ::~CZ()
	{
	delete iX;
	}

CZ* CZ::NewL()
	{
	CZ* self=new(ELeave) CZ;
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop();
	return self;
	}

CZ* CZ::NewLC()
	{
	CZ* self=new(ELeave) CZ;
	CleanupStack::PushL(self);
	self->ConstructL();
	return self;
	}

// app view

void CExampleAppView::ConstructL(const TRect& aRect)
    {
	CreateWindowL();
    SetRect(aRect);
    ActivateL();
    }

CExampleAppView::~CExampleAppView()
	{
	}

void CExampleAppView::Draw(const TRect& /*aRect*/) const
	{
	_LIT(KSeeInstructions1,"This program is best");
	_LIT(KSeeInstructions2,"appreciated from");
	_LIT(KSeeInstructions3,"inside a debugger");
	_LIT(KSeeInstructions4,"See chapter on cleanup");
	_LIT(KSeeInstructions5,"for more information");
	//
	CWindowGc& gc = SystemGc();
	// white out whole rectangle
	TRect rect=Rect();
	gc.SetPenStyle(CGraphicsContext::ENullPen);
	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
	gc.SetBrushColor(KRgbWhite);
	gc.DrawRect(rect);
	// border
	rect.Shrink(10,10);
	gc.SetBrushStyle(CGraphicsContext::ENullBrush);
	gc.SetPenStyle(CGraphicsContext::ESolidPen);
	gc.DrawRect(rect);
	// text
	rect.Shrink(1,1);
	//const CFont* font=iEikonEnv->TitleFont();
	const CFont* font=iEikonEnv->LegendFont();
	gc.UseFont(font);
	TInt baseline=rect.Height()/3 - font->AscentInPixels();
	gc.DrawText(KSeeInstructions1, rect, baseline, CGraphicsContext::ECenter);
	baseline += 3*font->AscentInPixels()/2;
	gc.DrawText(KSeeInstructions2, rect, baseline, CGraphicsContext::ECenter);
	baseline += 3*font->AscentInPixels()/2;
	gc.DrawText(KSeeInstructions3, rect, baseline, CGraphicsContext::ECenter);
	baseline += 3*font->AscentInPixels()/2;
	baseline += 3*font->AscentInPixels()/2;
	gc.DrawText(KSeeInstructions4, rect, baseline, CGraphicsContext::ECenter);
	baseline += 3*font->AscentInPixels()/2;
	gc.DrawText(KSeeInstructions5, rect, baseline, CGraphicsContext::ECenter);
	gc.DiscardFont();
	}

// app UI

void CExampleAppUi::ConstructL()
    {
    BaseConstructL();
    iAppView=new(ELeave) CExampleAppView;
    iAppView->ConstructL(ClientRect());
    }

CExampleAppUi::~CExampleAppUi()
	{
    delete iAppView;
	delete iObject2;
	}

_LIT(KTextFileName, "c:\\test.txt");

void CExampleAppUi::HandleCommandL(TInt aCommand)
	{
	switch (aCommand)
		{
	case EMagicCmdNew1:
		iObject1 = new CX;
		iEikonEnv->InfoMsg(_L("New 1"));
		break;
	case EMagicCmdDelete1:
		delete iObject1;
		iEikonEnv->InfoMsg(_L("Delete 1"));
		break;
	case EMagicCmdNew2:
		delete iObject2;
		iObject2 = new(ELeave) CX;
		iEikonEnv->InfoMsg(_L("New 2"));
		break;
	case EMagicCmdDelete2:
		delete iObject2; iObject2 = NULL;
		iEikonEnv->InfoMsg(_L("Delete 2"));
		break;
	case EMagicCmdUse3:
		{
		CX* x=new(ELeave) CX;
		x->UseL();
		delete x;
		}
		iEikonEnv->InfoMsg(_L("Use 3"));
		break;
	case EMagicCmdUse4:
		{
		CY* y=new(ELeave) CY;
		CleanupStack::PushL(y);
		y->iX->UseL();
		CleanupStack::PopAndDestroy(); // y
		}
		iEikonEnv->InfoMsg(_L("Use 4"));
		break;
	case EMagicCmdUse5:
		{
		CZ* z=new(ELeave) CZ;
		CleanupStack::PushL(z);
		z->ConstructL();
		z->iX->UseL();
		CleanupStack::PopAndDestroy(); // z
		}
		iEikonEnv->InfoMsg(_L("Use 5"));
		break;
	case EMagicCmdUse6:
		{
		iObject6=CZ::NewL();
		iObject6->iX->UseL();
		delete iObject6;
		}
		iEikonEnv->InfoMsg(_L("Use 6"));
		break;
	case EMagicCmdUse7:
		{
		CZ* z=CZ::NewLC();
		z->iX->UseL();
		CleanupStack::PopAndDestroy(); // z
		}
		iEikonEnv->InfoMsg(_L("Use 7"));
		break;
	case EMagicCmdWriteFile:
		{
		RFs fs;
		CleanupClosePushL(fs);
		User::LeaveIfError(fs.Connect());
		RFileWriteStream writer;
		writer.PushL();
		User::LeaveIfError(writer.Replace(fs, KTextFileName, EFileWrite));
		writer <<_L("Hello world!");
		writer.CommitL();
		CleanupStack::PopAndDestroy(2); // writer, fs
		}
		iEikonEnv->InfoMsg(_L("Written file"));
		break;
	case EMagicCmdReadFile:
		{
		RFs fs;
		CleanupClosePushL(fs);
		User::LeaveIfError(fs.Connect());
		RFileReadStream reader;
		reader.PushL();
		User::LeaveIfError(reader.Open(fs, KTextFileName, EFileRead));
		HBufC* text=HBufC::NewLC(reader, 40);
		iEikonEnv->InfoMsg(*text);
		CleanupStack::PopAndDestroy(3); // text, reader, fs
		}
		break;
	case EMagicCmdDeleteFile:
		{
		RFs fs;
		CleanupClosePushL(fs);
		User::LeaveIfError(fs.Connect());
		User::LeaveIfError(fs.Delete(KTextFileName));
		CleanupStack::PopAndDestroy(); // fs
		}
		iEikonEnv->InfoMsg(_L("Deleted file"));
		break;
	case EMagicCmdAllocInfo:
		iEikonEnv->AllocInfoMsg();
		break;
	case EEikCmdExit: 
		Exit();
		break;
		}
	}

// document

CExampleDocument::CExampleDocument(CEikApplication& aApp)
		: CEikDocument(aApp)
	{
	}

CEikAppUi* CExampleDocument::CreateAppUiL()
	{
    return new(ELeave) CExampleAppUi;
	}

// application

TUid CExampleApplication::AppDllUid() const
	{
	return KUidExample;
	}

CApaDocument* CExampleApplication::CreateDocumentL()
	{
	return new (ELeave) CExampleDocument(*this);
	}
// DLL interface stuff

EXPORT_C CApaApplication* NewApplication()
	{
	return new CExampleApplication;
	}

GLDEF_C TInt E32Dll(TDllReason)
	{
	return KErrNone;
	}

⌨️ 快捷键说明

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