大头贴对话框类(abandoned)

来源:互联网 发布:mac 移动文件夹 编辑:程序博客网 时间:2024/06/11 17:16

.H
==============================================================
// 大头贴对话框类(在对话框中显示大头贴控件)
class CDymBigHeadDialog : public  CAknDialog
{
public:
 CDymBigHeadDialog();
 ~CDymBigHeadDialog();

 void PreLayoutDynInitL();
 TInt CountComponentControls() const;
 CCoeControl* ComponentControl(TInt aIndex) const;

 void SizeChanged();
 void CancelL();

 void SetContainer(CDymBigHeadContainer* aContainer);
protected:
 virtual TBool OkToExitL( TInt aBuDymonId );
 virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
private:
 void SeDymimerL(DymimeIntervalMicroSeconds32 aInterval);
 void DestroyTimer();
 static TInt TimerCallBack(TAny* aPtr);
public:
 CDymPodAppUi*   iDymPodAppUi;
private:
 TSize     iLastSize;
 CDymBigHeadContainer* iContainer;
 CPeriodic*    iTimer; 
};

// 大头贴对话框帮助类(帮组弹出对话框)
class CDymBigHeadDialogHelper
{
public:
 CDymBigHeadDialogHelper(CDymPodHelper* aHelper);
 void DisplayDialogL();
private:
 CDymPodHelper* iHelper;
};

=======================================================================================
.cpp
=========================================================================================
////////////////////////CDymBigHeadDialog///////////////////////////////////////////////

CDymBigHeadDialog::CDymBigHeadDialog()
:iContainer(NULL)
,iTimer(NULL)
{
 iDymPodAppUi = (CDymPodAppUi*)CEikonEnv::Static()->AppUi();
}

CDymBigHeadDialog::~CDymBigHeadDialog()
{
 DestroyTimer();
 if(iContainer != NULL)
 {
  if (iContainer->Canvas())
  {
   iContainer->Canvas()->DestroyBackgroundBitmap();
  }
  iContainer->HandleForegroundEvent(EFalse);
 }
}

void CDymBigHeadDialog::PreLayoutDynInitL()
{
 CAknDialog::PreLayoutDynInitL();

 if(iContainer)
 {
  iContainer->SetMopParent(this);
  iContainer->ConstructL(iDymPodAppUi->ApplicationRect());

  if (iContainer->Canvas())
  {
   iContainer->Canvas()->CreateBackgroundBitmapL(iDymPodAppUi->iCurrentContainer->BackgroundBitmap()
    ,iDymPodAppUi->iCurrentContainer->BackgroundBitmap()->SizeInPixels());
  }

  iContainer->HandleForegroundEvent(ETrue);
 }

 SeDymimerL(50000);
}

TInt CDymBigHeadDialog::CountComponentControls() const
{
 if(iContainer)
 {
  return 1;
 }

 return 0;
}

CCoeControl* CDymBigHeadDialog::ComponentControl( TInt aIndex ) const
{
 if(0 == aIndex)
 {
  return iContainer;
 }

 return NULL;
}

void CDymBigHeadDialog::SizeChanged()
{
 CAknDialog::SizeChanged();

 TSize size = iDymPodAppUi->ApplicationRect().Size();

 if(size != iLastSize && iContainer)
 {
  iContainer->ChangeLayout();
  CDymCanvas* canvas = iContainer->Canvas();
  if (canvas)
  {
   canvas->DestroyBackgroundBitmap();
   CFbsBitmap* bmpBkg = iDymPodAppUi->iCurrentContainer->BackgroundBitmap();
   if(bmpBkg)
   {
    canvas->CreateBackgroundBitmapL(bmpBkg,bmpBkg->SizeInPixels());
   }
  }
  if(iLastSize != TSize(0,0))//是否横竖屏变更?
  {
   iContainer->HandleForegroundEvent(ETrue);
  }
  iLastSize = size;
 }
 DrawNow();
}

void CDymBigHeadDialog::CancelL()
{
 TryExitL(EAknSoftkeyBack);
}

void CDymBigHeadDialog::SetContainer( CDymBigHeadContainer* aContainer )
{
 iContainer = aContainer;
}

TBool CDymBigHeadDialog::OkToExitL( TInt aBuDymonId )
{
 if(aBuDymonId == EAknSoftkeyBack)
 {
  return ETrue;
 }

 return CAknDialog::OkToExitL(aBuDymonId);
}

TKeyResponse CDymBigHeadDialog::OfferKeyEventL( const TKeyEvent& aKeyEvent,TEventCode aType )
{
 if(iContainer)
 {
  return iContainer->OfferKeyEventL(aKeyEvent,aType);
 }

 return EKeyWasConsumed;
}

void CDymBigHeadDialog::SeDymimerL( DymimeIntervalMicroSeconds32 aInterval )
{
 DestroyTimer();
 iTimer = CPeriodic::NewL(CActive::EPriorityStandard);
 iTimer->Start(aInterval,aInterval,TCallBack(TimerCallBack,this));
}

void CDymBigHeadDialog::DestroyTimer()
{
 if(iTimer)
 {
  iTimer->Cancel();  
 }
 SAFE_DELETE(iTimer);
}

TInt CDymBigHeadDialog::TimerCallBack( TAny* aPtr )
{
 CDymBigHeadDialog* me = reinterpret_cast<CDymBigHeadDialog*>(aPtr);
 if(me && me->iContainer)
 {
  me->iContainer->HandleCallBack();
 }

 return KErrNone;
}

//////////////////////CDymBigHeadDialogHelper///////////////////////////////////////////////////
CDymBigHeadDialogHelper::CDymBigHeadDialogHelper( CDymPodHelper* aHelper )
:iHelper(aHelper)
{
}

void CDymBigHeadDialogHelper::DisplayDialogL()
{

 CDymBigHeadDialog* dlg = new(ELeave) CDymBigHeadDialog();

 if(dlg->iDymPodAppUi==NULL || dlg->iDymPodAppUi->iHelper==NULL)
 {
  SAFE_DELETE(dlg);
  return;
 }

 dlg->PrepareLC(R_DIALOG_CUSTOM);

 CDymBigHeadContainer* container = new(ELeave) CDymBigHeadContainer(dlg->iDymPodAppUi->iHelper);
 dlg->SetContainer(container);

 dlg->RunLD();

 SAFE_DELETE(container);
}

原创粉丝点击