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