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

📄 s60uicodeexcontrol.cpp

📁 一个UI的程序
💻 CPP
字号:
/*
* ==============================================================================
*  Name        : S60UICodeExControl.cpp
*  Part of     : S60UICodeEx
*  Interface   :
*  Description :
*  Version     :
*
*  Copyright (c) 2005-2006 Nokia Corporation.
*  This material, including documentation and any related
*  computer programs, is protected by copyright controlled by
*  Nokia Corporation.
* ==============================================================================
*/

// INCLUDE FILES
#include <eikenv.h>
#include <aknutils.h>
#include "akndef.h"
#include <e32svr.h>
#include "S60UICodeExControl.h"
#include "S60UICodeExRotateControl.h"
#include "S60UICodeExTextControl.h"
#include "S60UICodeEx.hrh"

// ============================ MEMBER FUNCTIONS ==============================

// ----------------------------------------------------------------------------
// CS60UICodeExControl::ConstructL
// Symbian 2nd phase constructor.
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::ConstructL(const TRect& aRect, CAknViewAppUi* /*aAppUi*/)
    {
	CreateWindowL();
	
	iRotateButtonBox = TRect( 0,0,0,0 );
	
	#ifndef __WINS__
	    _LIT(KMBMFileName,"c:\\private\\8000ABBA\\pictures.mbm");
	#else
	   	_LIT(KMBMFileName,"c:\\pictures.mbm");
	#endif

	iBitmap = new (ELeave) CFbsBitmap();
	
	 // Load the bitmap from an .mbm file 
    TInt result = iBitmap->Load(KMBMFileName, 0);
	iTextBox = TRect( 0,0,0,0 );       

    iScaler = CMdaBitmapScaler::NewL();
	
	iRotateControl = CS60UICodeExRotateControl::NewL( iRotateButtonBox, this );
    iTextControl = CS60UICodeExTextControl::NewL( iTextBox, this );   
    
    // Calculates initial position for the controls
	TInt textBoxX = STATIC_CAST( TInt, aRect.iBr.iX*0.05 );		
		TInt textBoxY = STATIC_CAST( TInt, aRect.iBr.iY*0.3 );
		
		TSize textBoxSize( STATIC_CAST( TInt, aRect.iBr.iX*0.9 ),
			STATIC_CAST( TInt, aRect.iBr.iY*0.16 ) );		
		iTextBox = TRect( TPoint( textBoxX, textBoxY ), textBoxSize );		
		iTextControl->SetRect( iTextBox );						
		
		TInt rotateButtonX = STATIC_CAST( TInt, aRect.iBr.iX*0.33 );
		TInt rotateButtonY = STATIC_CAST( TInt, aRect.iBr.iY*0.6 );
		TSize rotateButtonSize( STATIC_CAST( TInt, aRect.iBr.iX*0.225 ),
			STATIC_CAST( TInt, aRect.iBr.iY*0.16 ) );
		iRotateButtonBox = TRect( TPoint( rotateButtonX, rotateButtonY ), rotateButtonSize );
		iRotateControl->SetRect( iRotateButtonBox );
		
	iControlFocus =  ERotateButton;
    SetRect( aRect );

	ActivateL();
    
    // Scales the background picture without using aspect ratio. Set the last parameter to ETrue,
    // if using aspect ratio when scaling is wanted.
    iScaler->ScaleL( *this, *iBitmap, iSize, EFalse );
    }

// ----------------------------------------------------------------------------
// CS60UICodeExControl::~CS60UICodeExControl
// Destructor.
// ----------------------------------------------------------------------------
//
CS60UICodeExControl::~CS60UICodeExControl()
    {
	delete iRotateControl;
	delete iTextControl;
	delete iScaler;
	delete iBitmap;
    }

// ----------------------------------------------------------------------------
// CS60UICodeExControl::CountComponentControls
// 
// ----------------------------------------------------------------------------
//
TInt CS60UICodeExControl::CountComponentControls() const
    {
	return 2;
    }

// ----------------------------------------------------------------------------
// CS60UICodeExControl::ComponentControl
// 
// ----------------------------------------------------------------------------
//
CCoeControl* CS60UICodeExControl::ComponentControl(TInt aIndex) const
    {
    switch ( aIndex )
        {
        case 0:
            return iRotateControl;
            break;
        case 1:
            return iTextControl;
            break;
        default: 
			return NULL;    
        }
    }
    

// ----------------------------------------------------------------------------
// CS60UICodeExControl::SetText
// 
// ----------------------------------------------------------------------------
//    
void CS60UICodeExControl::SetText( TDes* aText )
	{
	iText = aText;
    iTextControl->SetText( *iText );  
	}

// ----------------------------------------------------------------------------
// CS60UICodeExControl::HandleControlEventL
// 
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::HandleControlEventL(CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/)
    {
    }
    
// ----------------------------------------------------------------------------
// CS60UICodeExControl::HandleResourceChange
// Sets new rect for this control everytime when some resource changes.
// Also, background picture is rescaled.
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::HandleResourceChange(TInt aType)
    {
	CCoeControl::HandleResourceChange(aType);
	
	SetRect(iEikonEnv->EikAppUi()->ClientRect());
	if( aType == KEikDynamicLayoutVariantSwitch || aType == KAknHardwareLayoutSwitch)
	    {	   
	
	    iScaler->ScaleL( *this, *iBitmap, iSize, EFalse );
	    }	    
    }

// ----------------------------------------------------------------------------
// CS60UICodeExControl::MiuoCreateComplete
// 
// ----------------------------------------------------------------------------
//    
void CS60UICodeExControl::MiuoCreateComplete( TInt /*aError*/ )
    {
    
    }
// ----------------------------------------------------------------------------
// CS60UICodeExControl::MiuoOpenComplete
// 
// ----------------------------------------------------------------------------
//  		
void CS60UICodeExControl::MiuoOpenComplete( TInt /*aError*/ )
    {
    
    }

// ----------------------------------------------------------------------------
// CS60UICodeExControl::MiuoConvertComplete
// 
// ----------------------------------------------------------------------------
//  
void CS60UICodeExControl::MiuoConvertComplete( TInt /*aError*/ )
    {    
    DrawNow();
    }
    
// ----------------------------------------------------------------------------
// CS60UICodeExControl::OfferKeyEventL
// 
// ----------------------------------------------------------------------------
// 
TKeyResponse CS60UICodeExControl::OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType)
	{
	if(aType == EEventKey)
		{
		//If in Landscape mode, then Left/Right changes controls focus
		if ( iEikonEnv->ScreenDevice()->CurrentScreenMode() ) 
			{	
			if( aKeyEvent.iScanCode == EStdKeyLeftArrow )
				{
				if( iControlFocus == ETextBox )
					{
					iRotateControl->ControlFocusGained( ETrue );	
					iTextControl->ControlFocusGained( EFalse );
					iControlFocus = ERotateButton;
					}
				else
					{				
					iRotateControl->ControlFocusGained( EFalse  );	
					iTextControl->ControlFocusGained( ETrue );	
					iControlFocus = ETextBox;
					}
		
				return EKeyWasConsumed;
				}				
			else if(aKeyEvent.iScanCode == EStdKeyRightArrow)
				{
				if( iControlFocus == ETextBox )
					{
					iRotateControl->ControlFocusGained( ETrue );	
					iTextControl->ControlFocusGained( EFalse );
					iControlFocus = ERotateButton;
					}
				else
					{				
					iRotateControl->ControlFocusGained( EFalse  );	
					iTextControl->ControlFocusGained( ETrue );	
					iControlFocus = ETextBox;
					}
				return EKeyWasConsumed;
				}
			else if( aKeyEvent.iScanCode == EStdKeyEnter || aKeyEvent.iScanCode == EStdKeyDevice3 )
				{
				if( iControlFocus == ETextBox )
					{
					iEikonEnv->EikAppUi()->HandleCommandL( ES60ExCmdInsertText );	
					}
				if( iControlFocus == ERotateButton )
					{
					iEikonEnv->EikAppUi()->HandleCommandL( ES60ExCmdRotate );	
					}
				return EKeyWasConsumed;	
				}
			}
			
        //If in portrait mode, then Up/Down changes controls focus		
		if ( !iEikonEnv->ScreenDevice()->CurrentScreenMode() ) 
			{	
			if( aKeyEvent.iScanCode == EStdKeyUpArrow )
				{
				if( iControlFocus == ETextBox )
					{
					iRotateControl->ControlFocusGained( ETrue );	
					iTextControl->ControlFocusGained( EFalse );
					iControlFocus = ERotateButton;
					}
				else
					{				
					iRotateControl->ControlFocusGained( EFalse  );	
					iTextControl->ControlFocusGained( ETrue );	
					iControlFocus = ETextBox;
					}
		
				return EKeyWasConsumed;
				}				
			else if(aKeyEvent.iScanCode == EStdKeyDownArrow)
				{
				if( iControlFocus == ETextBox )
					{
					iRotateControl->ControlFocusGained( ETrue );	
					iTextControl->ControlFocusGained( EFalse );
					iControlFocus = ERotateButton;
					}
				else
					{				
					iRotateControl->ControlFocusGained( EFalse  );	
					iTextControl->ControlFocusGained( ETrue );	
					iControlFocus = ETextBox;
					}
				return EKeyWasConsumed;
				}
			else if( aKeyEvent.iScanCode == EStdKeyEnter || aKeyEvent.iScanCode == EStdKeyDevice3 )
				{
				if( iControlFocus == ETextBox )
					{
					iEikonEnv->EikAppUi()->HandleCommandL( ES60ExCmdInsertText );	
					}
				if( iControlFocus == ERotateButton )
					{
					iEikonEnv->EikAppUi()->HandleCommandL( ES60ExCmdRotate );	
					}
				return EKeyWasConsumed;	
				}
			}
		}
	return EKeyWasNotConsumed;
	}

// ----------------------------------------------------------------------------
// CS60UICodeExControl::SizeChanged
// Called by framework when the view size is changed
// ---------------------------------------------------------
//
void CS60UICodeExControl::SizeChanged()
	{
	TRect rect = Rect();
	
	iScaler->ScaleL( *this, *iBitmap, iSize, EFalse );
	
	if ( iEikonEnv->ScreenDevice()->CurrentScreenMode() ) //Landscape
		{
		TInt textBoxX = STATIC_CAST( TInt, rect.iBr.iX*0.05 );		
		TInt textBoxY = STATIC_CAST( TInt, rect.iBr.iY*0.33 );
		TSize textBoxSize( STATIC_CAST( TInt, rect.iBr.iX*0.5 ),
			STATIC_CAST( TInt, rect.iBr.iY*0.225 ) );		
		iTextBox = TRect( TPoint( textBoxX, textBoxY ), textBoxSize );		
		iTextControl->SetRect( iTextBox );
		
		
		TInt rotateButtonX = STATIC_CAST( TInt, rect.iBr.iX*0.6 );		
		TInt rotateButtonY = STATIC_CAST( TInt, rect.iBr.iY*0.33 );
		TSize rotateButtonSize( STATIC_CAST( TInt, rect.iBr.iX*0.16 ),
			STATIC_CAST( TInt, rect.iBr.iY*0.225 ) );		
		iRotateButtonBox = TRect( TPoint( rotateButtonX, rotateButtonY ), rotateButtonSize );				
		iRotateControl->SetRect( iRotateButtonBox );
		
		}
	else // portrait
		{
		TInt textBoxX = STATIC_CAST( TInt, rect.iBr.iX*0.05 );		
		TInt textBoxY = STATIC_CAST( TInt, rect.iBr.iY*0.3 );		
		TSize textBoxSize( STATIC_CAST( TInt, rect.iBr.iX*0.9 ),
			STATIC_CAST( TInt, rect.iBr.iY*0.16 ) );		
		iTextBox = TRect( TPoint( textBoxX, textBoxY ), textBoxSize );		
		iTextControl->SetRect( iTextBox );		

		TInt rotateButtonX = STATIC_CAST( TInt, rect.iBr.iX/2 );
		TInt rotateButtonY = STATIC_CAST( TInt, rect.iBr.iY*0.6 );
		TSize rotateButtonSize( STATIC_CAST( TInt, rect.iBr.iX*0.225 ),
			STATIC_CAST( TInt, rect.iBr.iY*0.16 ) );
			
		rotateButtonX = rotateButtonX - rotateButtonSize.iWidth / 2;	
		iRotateButtonBox = TRect( TPoint( rotateButtonX, rotateButtonY ), rotateButtonSize );
		 
		iRotateControl->SetRect( iRotateButtonBox );
		}
	
	}

// ----------------------------------------------------------------------------
// CS60UICodeExControl::Draw
// 
// ----------------------------------------------------------------------------
// 	
void CS60UICodeExControl::Draw( const TRect& /*aRect*/ ) const
    {
  	CWindowGc& gc = SystemGc();  

  	gc.Clear( Rect() );
    gc.BitBlt( TPoint( 0, 0 ), iBitmap );
	}
	
// End of file.

⌨️ 快捷键说明

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