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

📄 hsgtextcontainer.cpp

📁 Symbian工程 九宫格界面
💻 CPP
字号:
#include <gulicon.h>
#include <aknutils.h>
#include <avkon.hrh>
#include <aknlists.h>
#include <fbs.h>
#include <aknnotewrappers.h>
#include "HsgTextView.h"
#include "HsgTextContainer.h"
#include <CJGProject.rsg>
#include "CJGProjectappui.h"
#include "CJGProject.mbg"
#include "CJGProject.hrh"
#include "MyListBox.h"
#include "CHsgNewTextView.h"
#define MEMORY_FREE(a) if(a){delete a; a=NULL;}

CHsgTextContainer::CHsgTextContainer()
{
	iHsgOpoiton				=EFalse;
	iHsgOpoitonNum			=0;
	iOption					=0;
	ipLxdListBox			=NULL;
	iSnowTextViewPointer	=NULL;
	iHsgTextRollText		=NULL;
	iOffScreenBitmap		=NULL;
	iOffScreenBitmapDevice	=NULL;
    iOffScreenBitmapGc		=NULL;

}

// EPOC default constructor can leave.
void CHsgTextContainer::ConstructL(const TRect& aRect)
{
    CreateWindowL();	
    SetRect( aRect );
	//****************************闪屏******************************
	iOffScreenBitmap = new (ELeave) CFbsBitmap();
	CleanupStack::PushL( iOffScreenBitmap );
	User::LeaveIfError(iOffScreenBitmap->Create(Rect().Size(),EColor4K));
	CleanupStack::Pop();
	iOffScreenBitmapDevice = CFbsBitmapDevice::NewL(iOffScreenBitmap);
	iOffScreenBitmapDevice->CreateContext( iOffScreenBitmapGc  );
//***********************************************************************
	//*****************************读取滚动条信息**************************************************************
	CCJGProjectAppUi* pAppUi = (CCJGProjectAppUi*)CCoeEnv::Static()->AppUi();
	iHsgTextRollText = new(ELeave)CNewsRollText;
	iHsgTextRollText->SetContainerWindowL(*this);
	CLxdAD* ilxdpointer=pAppUi->LxdGetADPointer();
	HBufC* buf=ilxdpointer->LxdGetAD(0);

	iHsgTextRollText->NewsSetTextL(buf->Des());//显示中文滚动文字
	iHsgTextRollText->NewsSetBackgroundColor(TRgb(35,86,36));
	TSize sz = iHsgTextRollText->MinimumSize();
	iHsgTextRollText->NewsSetExtent( TPoint(0,0), sz);
	iHsgTextRollText->Start();

	//*****************************读取listBox信息**************************************************************

	CLxdMessageManagement*	iLxdMainPointer=pAppUi->LxdGetMessage();

	//动态创建listbox
	ipLxdListBox=new (ELeave)CMyListBoxContainer;
	ipLxdListBox->SetContainerWindowL( *this ); 
	ipLxdListBox->ConstructL( aRect);
	ipLxdListBox->SnowSetBackgroundColor(TRgb(100,200,91));

	TInt mMessageNum;
	iLxdMainPointer->LxdGetMesNum(mMessageNum);
	if (mMessageNum)
	{
		for (TInt i=0;i<mMessageNum;i++)
		{
			TBuf<20> mTime;
			TBuf<50> mTitle;
			TBuf<200> mContent;
			iLxdMainPointer->LxdSetId(i);
			iLxdMainPointer->LxdGetMessage(mTime,mTitle,mContent);
			ipLxdListBox->SnowSetContent(mTitle);
			ipLxdListBox->SnowSetTime(mTime);
		}
	}

	ipLxdListBox->SetExtent(TPoint(0,0), aRect.Size());
	ipLxdListBox->SetFocus(ETrue);



    ActivateL();
}

// destructor
CHsgTextContainer::~CHsgTextContainer()
{
	MEMORY_FREE(ipLxdListBox);
	MEMORY_FREE(iHsgTextRollText);
	MEMORY_FREE(iOffScreenBitmap);
	MEMORY_FREE(iOffScreenBitmapDevice);
	MEMORY_FREE(iOffScreenBitmapGc);
}

void CHsgTextContainer::SizeChanged()
{
	if(ipLxdListBox)
	{
		ipLxdListBox->SetRect(Rect());
	}
}

// ---------------------------------------------------------
// CHsgTextContainer::CountComponentControls() const
// return the number of controls
// ---------------------------------------------------------
//
TInt CHsgTextContainer::CountComponentControls() const
{
	// return number of controls inside this container
	return 2; 
}

// ---------------------------------------------------------
// CHsgTextContainer::ComponentControl(TInt aIndex) const
// return the pointer to specified control.
// ---------------------------------------------------------
//
CCoeControl* CHsgTextContainer::ComponentControl( TInt aIndex) const
{
	switch (aIndex)
	{
	case 0:
		return ipLxdListBox;
	case 1:
		return iHsgTextRollText;
	}
	
}

// ---------------------------------------------------------
// CHsgTextContainer::Draw(const TRect& aRect) const
// handle the message when client region must be redrawn.
// ---------------------------------------------------------
//
void CHsgTextContainer::Draw( const TRect& aRect) const
{
	iOffScreenBitmapGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
	iOffScreenBitmapGc->SetBrushColor(TRgb(35,86,36));
	iOffScreenBitmapGc->DrawRect(Rect());
	iOffScreenBitmapGc->SetPenStyle(CGraphicsContext::ESolidPen);	
	iOffScreenBitmapGc->SetPenColor(KRgbWhite);
	TBuf<KMaxPath> sBackPath;
	TBuf<KMaxPath> sButtonPath;
	TBuf<KMaxPath> sMenuPath;
	const CFont* fontUsed = iEikonEnv->LegendFont();//获取中文字体
	iOffScreenBitmapGc->UseFont(fontUsed);
	TBuf<8> aBufOppiton;
	CEikonEnv::Static()->ReadResource(aBufOppiton,R_QTN_CJG_SNOW_OPTION);
	TBuf<8> aBufReturn;
	CEikonEnv::Static()->ReadResource(aBufReturn,R_QTN_CJG_SNOW_RETURN);
	TBuf<8> aBufChiose;
	CEikonEnv::Static()->ReadResource(aBufChiose,R_QTN_CJG_SNOW_CHIOSE);
	TBuf<8> aBufCancel;
	CEikonEnv::Static()->ReadResource(aBufCancel,R_QTN_CJG_SNOW_CANCEL);
	TBuf<8> aBufNo;
	CEikonEnv::Static()->ReadResource(aBufNo,R_QTN_CJG_SNOW_NO);
	TBuf<8> aBufYes;
	CEikonEnv::Static()->ReadResource(aBufYes,R_QTN_CJG_SNOW_YES);
//sMbmPath
	//获得MBM文件路径
	TBuf<KMaxPath> sMbmPath;
#ifdef __WINS__//表示模拟器上
	sMbmPath.Copy(_L("z:\\resource\\apps\\CJGProject.mbm"));
#else//表示真机上
	CCJGProjectAppUi* pAppUi = (CCJGProjectAppUi*)CCoeEnv::Static()->AppUi();
	pAppUi->GetMbmPath(sMbmPath);	
	sMbmPath.Append(_L("CJGProject.mbm"));
#endif

	TPoint pointLeft(0,aRect.Height());
	TPoint pointRight(aRect.Width()-fontUsed->TextWidthInPixels(aBufReturn),aRect.Height());
	switch (iHsgOpoitonNum)
	{
	case 0:
		{
			iOffScreenBitmapGc->DrawText(aBufOppiton,pointLeft);
			iOffScreenBitmapGc->DrawText(aBufReturn,pointRight);
		}
		break;
	case 1:
		{
			iOffScreenBitmapGc->DrawText(aBufChiose,pointLeft);
			iOffScreenBitmapGc->DrawText(aBufCancel,pointRight);
		}
		break;
	case 2:
		{
			iOffScreenBitmapGc->DrawText(aBufYes,pointLeft);
			iOffScreenBitmapGc->DrawText(aBufNo,pointRight);
		}
	}

	CFbsBitmap* pBitmap1 = new (ELeave) CFbsBitmap();
	if (iHsgOpoitonNum==1)
	{	
		if (ipLxdListBox->SnowSetListBoxCount()==0)
		{
			pBitmap1->Load(sMbmPath, EMbmCjgprojectMenunew1);
			iOffScreenBitmapGc->BitBlt(TPoint(fontUsed->TextWidthInPixels(aBufReturn),aRect.Height()-23), pBitmap1);
		}
		else if (ipLxdListBox->SnowSetListBoxCount()>0)
		{

			switch (iOption)
			{
			case 0:
				{
					pBitmap1->Load(sMbmPath, EMbmCjgprojectMenunew);
					iOffScreenBitmapGc->BitBlt(TPoint(fontUsed->TextWidthInPixels(aBufReturn),aRect.Height()-118), pBitmap1);
				}
				break;
			case 1:
				{
					pBitmap1->Load(sMbmPath,EMbmCjgprojectMenuopen );
					iOffScreenBitmapGc->BitBlt(TPoint(fontUsed->TextWidthInPixels(aBufReturn),aRect.Height()-118), pBitmap1);
				}
				break;
			case 2:
				{
					pBitmap1->Load(sMbmPath, EMbmCjgprojectMenuedit);
					iOffScreenBitmapGc->BitBlt(TPoint(fontUsed->TextWidthInPixels(aBufReturn),aRect.Height()-118), pBitmap1);
				}
				break;
			case 3:
				{
					pBitmap1->Load(sMbmPath, EMbmCjgprojectMenudel);
					iOffScreenBitmapGc->BitBlt(TPoint(fontUsed->TextWidthInPixels(aBufReturn),aRect.Height()-118), pBitmap1);
				}
				break;
			default:
				break;
			}
		}
	}
	if (pBitmap1)
	{
		delete pBitmap1;
		pBitmap1 = NULL;
	}
	CWindowGc& gc = SystemGc();
	gc.BitBlt(Rect().iTl,iOffScreenBitmap);
}

// ---------------------------------------------------------
// CAknExGridContainer::OfferKeyEventL(
//           const TKeyEvent& aKeyEvent, TEventCode aType )
// Handles the key events.
// ---------------------------------------------------------
//
TKeyResponse CHsgTextContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType )
{
	CCJGProjectAppUi* pAppUi = (CCJGProjectAppUi*)CCoeEnv::Static()->AppUi();

	if((aType == EEventKey) && (aKeyEvent.iCode == EKeyDevice0||aKeyEvent.iCode==EKeyDevice3))
	{
		iHsgOpoitonNum++;

		if(iHsgOpoitonNum==2)
		{
			switch (iOption)
			{
			case 0:
				pAppUi->GetHsgTextView()->HandleCommandL(iOption);
				break;
			case 1:
				pAppUi->GetHsgTextView()->HandleCommandL(iOption);
				break;
			case 2:
				pAppUi->GetHsgTextView()->HandleCommandL(iOption);
				break;
			case 3:
				{
// 					CAknInformationNote* informationNote = new ( ELeave ) CAknInformationNote;
// 					informationNote->ExecuteLD(_L("Do you want to delete?"));
				}
				break;
			default:
				break;
			}

		}
		if(iHsgOpoitonNum==3)
		{
			iHsgOpoitonNum=0;
			iOption=0;	
			pAppUi->GetHsgTextView()->HandleCommandL(3);
		}
		DrawDeferred();

	}

	if((aType == EEventKey) && (aKeyEvent.iCode == EKeyDevice1))
	{

		if(!iHsgOpoitonNum)
		{
			pAppUi->GetHsgTextView()->HandleCommandL(4);
		}
		else
		{
			iHsgOpoitonNum=0;
			iOption=0;
		}
		DrawDeferred();
	}
	if (ipLxdListBox)
	{
		if (ipLxdListBox->SnowSetListBoxCount()>0)
		{
			if((aType == EEventKey) && (aKeyEvent.iCode == EKeyDownArrow))
			{
				if(iOption + 1 < 4)
				{	
					iOption += 1;
					DrawDeferred();
				}

			}
			if((aType == EEventKey) && (aKeyEvent.iCode == EKeyUpArrow))
			{
				if(iOption - 1 >= 0)
				{	
					iOption -= 1;
					DrawDeferred();
				}
			}
		}
	}
	else
		return EKeyWasNotConsumed;
	if (ipLxdListBox&&iHsgOpoitonNum==0&&iHsgOpoiton==EFalse)
	{
		iOption=0;
		return ipLxdListBox->OfferKeyEventL(aKeyEvent, aType);
	}

	return EKeyWasNotConsumed;

}
CMyListBoxContainer* CHsgTextContainer::GetListBoxPointer()
{
	return ipLxdListBox;
}


// End of File  

⌨️ 快捷键说明

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