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

📄 main_screen.cpp

📁 symbian快捷方式添加的实例.3版的例子,添加快捷方式.
💻 CPP
字号:


#include "Main_Screen.h"
#include <EIKENV.H>
#include <EIKAPPUI.H>
#include <aknutils.h>
#include <eikapp.h>
#include <akniconarray.h> 
#include <aknlists.h> 
#include <akngridm.h>
#include <akngrid.h>
#include <GULICON.H>
#include <AknGlobalNote.h> 
// CMyMainScreen
//
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
CMyMainScreen::~CMyMainScreen()
{
	delete iMyGrid;
	iMyGrid = NULL;
	
	delete iBgContext;
	iBgContext = NULL;
}  
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
CMyMainScreen::CMyMainScreen(RPointerArray<CScWrapperShortcut>& aScArray)
:iScArray(aScArray)
{
	
}
/* 
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
CMyMainScreen* CMyMainScreen::NewL(const TRect& aRect,RPointerArray<CScWrapperShortcut>& aScArray)
    {
    CMyMainScreen* self = new(ELeave)CMyMainScreen(aScArray);
    CleanupStack::PushL(self);
    self->ConstructL(aRect);
    CleanupStack::Pop(self);
    return self;
    }
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/

void CMyMainScreen::ConstructL(const TRect& aRect)
    {
    CreateWindowL();
	// make first with no size at all
	
	iBgContext = CAknsBasicBackgroundControlContext::NewL(KAknsIIDQsnBgAreaMain,TRect(0,0,1,1), ETrue);

	// Setting rect will cause SizeChanged to be called
	// and iBgContext size & position is updated accordingly.
	SetRect(aRect);
	ActivateL();	
	DrawNow();
}

/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
TInt CMyMainScreen::SelectedIndex()
{
	TInt MySetIndex(0);
	
	if(iMyGrid)
	{
		MySetIndex = iMyGrid->CurrentItemIndex();
	}


	return MySetIndex;
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/

void CMyMainScreen::MakeGridBoxL()
{
	TInt MySetIndex(0);
	
	if(iMyGrid)
	{
		MySetIndex = iMyGrid->CurrentItemIndex();
	}

	delete iMyGrid;
	iMyGrid = NULL;
    iMyGrid = new( ELeave ) CAknGrid;
    iMyGrid->SetContainerWindowL( *this );

    CAknGridM* GridViewM = new( ELeave ) CAknGridM;
    iMyGrid->SetModel( GridViewM );

	iMyGrid->ConstructL( this, EAknListBoxSelectionGrid );

	TRect MyRect(Rect());
    iMyGrid->SetRect(MyRect);

	TInt NumH = (MyRect.Height() / 80);
	TInt NumW = (MyRect.Width() / 80);

	if(NumH < 3)
	{
		NumH = 3;
	}
	
	if(NumW < 3)
	{
		NumW = 3;
	}

	TSize SizeOfItems;

	SizeOfItems.iWidth = ( MyRect.iBr.iX - MyRect.iTl.iX ) / NumW;
	SizeOfItems.iHeight = ( MyRect.iBr.iY - MyRect.iTl.iY )/ NumH;
 
	iMyGrid->SetLayoutL(EFalse,ETrue,ETrue,NumW,NumH,SizeOfItems);

	iMyGrid->SetPrimaryScrollingType (CAknGridView::EScrollIncrementLineAndLoops);
	iMyGrid->SetSecondaryScrollingType(CAknGridView::EScrollIncrementLineAndLoops);
	iMyGrid->SetCurrentDataIndex( 0 );
    
	CArrayPtr<CGulIcon>* icons =new( ELeave ) CAknIconArray(2);
	CleanupStack::PushL(icons);

	const CFont* MyUseFont = AknLayoutUtils::FontFromId(EAknLogicalFontSecondaryFont);

	TPoint TxtStartPoint(0,(SizeOfItems.iHeight - (MyUseFont->HeightInPixels() + 3)));
	TPoint TxtEndddPoint(SizeOfItems.iWidth,SizeOfItems.iHeight);

	TPoint StartIcon(0,0);
	TPoint EnddIcon(SizeOfItems.iWidth,TxtStartPoint.iY);
	
	TSize IconsSize((((EnddIcon.iX - StartIcon.iX) * 9) / 10),(((EnddIcon.iY - StartIcon.iY) * 9) / 10));

	iMyGrid->Model()->SetItemTextArray(GetArrayL(icons,IconsSize));
	iMyGrid->ItemDrawer()->FormattedCellData()->SetIconArrayL(icons);
	CleanupStack::Pop();//icons

	iMyGrid->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto,CEikScrollBarFrame::EAuto);
    
	iMyGrid->HandleItemAdditionL();

	AknListBoxLayouts::SetupStandardGrid( *iMyGrid);

	AknListBoxLayouts::SetupFormGfxCell( *iMyGrid, iMyGrid->ItemDrawer(),
	0, 0, 0, 0, 0,  SizeOfItems.iWidth,(EnddIcon.iY - StartIcon.iY), 
	StartIcon, EnddIcon);

	TInt BaseLine = (TxtEndddPoint.iY - MyUseFont->BaselineOffsetInPixels() - 3);

	AknListBoxLayouts::SetupFormTextCell( *iMyGrid, iMyGrid->ItemDrawer(),
				1,  MyUseFont, 
				215, 
				3, 
				0, 
				BaseLine,
				SizeOfItems.iWidth, 
				CGraphicsContext::ECenter,
				TxtStartPoint, 
				TxtEndddPoint
				);


	TInt ItemsCount = iMyGrid->Model()->ItemTextArray()->MdcaCount();
	
	if(ItemsCount > MySetIndex && MySetIndex >= 0)
		iMyGrid->SetCurrentItemIndex(MySetIndex);
	else if(ItemsCount > 0)
		iMyGrid->SetCurrentItemIndex(0);
	
    iMyGrid->MakeVisible( ETrue );
    iMyGrid->SetFocus( ETrue );
    iMyGrid->ActivateL();
    iMyGrid->DrawNow();
}

/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
CDesCArray* CMyMainScreen::GetArrayL(CArrayPtr<CGulIcon>* aIcon,const TSize& aIconsize)
{	
	CDesCArrayFlat* MyArray = new(ELeave)CDesCArrayFlat(1);
	CleanupStack::PushL(MyArray);
	
	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
	
	TBuf<250> hJelppp;
	
	for(TInt i= 0; i < iScArray.Count(); i++)
	{
		if(iScArray[i])
		{
			TRAPD(Err,
			CFbsBitmap*	AppIcon(NULL);
			CFbsBitmap*	AppIconMsk(NULL);
			AknsUtils::CreateAppIconLC(skin,TUid::Uid(iScArray[i]->Uid()),  EAknsAppIconTypeContext,AppIcon,AppIconMsk);

			if(AppIcon && AppIconMsk)
			{
				AknIconUtils::SetSize(AppIcon,aIconsize,EAspectRatioPreserved);  
				AknIconUtils::SetSize(AppIconMsk,aIconsize,EAspectRatioPreserved);  

				aIcon->AppendL(CGulIcon::NewL(AppIcon,AppIconMsk));
				CleanupStack::Pop(2);
			});
			
			
			hJelppp.Num((aIcon->Count() - 1));
			hJelppp.Append(_L("\t"));
			hJelppp.Append(iScArray[i]->ShortcutName());
			
			MyArray->AppendL(hJelppp);	
		}
	}
	
	CleanupStack::Pop(MyArray);
	return MyArray;
}

/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
void CMyMainScreen::SizeChanged()
{
	if ( iBgContext )
	{
		iBgContext->SetRect(Rect());

		if ( &Window() )
		{
			iBgContext->SetParentPos( PositionRelativeToScreen() );
		}
	}
	
	MakeGridBoxL();
}

/*
-----------------------------------------------------------------------------

-----------------------------------------------------------------------------
*/
TTypeUid::Ptr CMyMainScreen::MopSupplyObject(TTypeUid aId)
{	
	if (iBgContext)
	{
		return MAknsControlContext::SupplyMopObject(aId, iBgContext );
	}
	
	return CCoeControl::MopSupplyObject(aId);
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
void CMyMainScreen::Draw(const TRect& /*aRect*/) const
{
	CWindowGc& gc = SystemGc();
    
  	// draw background skin first.
  	MAknsSkinInstance* skin = AknsUtils::SkinInstance();
	AknsDrawUtils::Background( skin, iBgContext, this, gc, Rect() );
    

}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
TKeyResponse CMyMainScreen::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aEventCode)
{
	TKeyResponse Ret = EKeyWasNotConsumed;	
	
	if(iMyGrid)
	{
		Ret = iMyGrid->OfferKeyEventL(aKeyEvent,aEventCode);
	}
	
	return Ret;
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
CCoeControl* CMyMainScreen::ComponentControl( TInt /*aIndex*/) const
{
	return iMyGrid;
}
/*
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
*/
TInt CMyMainScreen::CountComponentControls() const
{	
	if(iMyGrid)
		return 1;
	else
		return 0;
}

⌨️ 快捷键说明

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