📄 memorymagic.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 + -