关于在symbian listbox中添加svg图片的问题

来源:互联网 发布:欧文17常规赛数据 编辑:程序博客网 时间:2024/05/16 04:43

 收藏
这几天想把程序变的漂亮点,就把以前的listbox改动成了CAknDoubleLargeStyleListBox类型,该动了以后的程序变动不是很大,就是改变了程序安装字符串格式的方法 和 加载了 svg图片下面就具体说下加载svg图片的步骤:

1:把svg 图片放在工程下面的gfx 目录下面

2:在group目录下面添加文件SvgImages.miflist 里面加上图片信息

/c16,1 ../gfx/qgn_menu_ATestList2.svg
/c16,1 ../gfx/todisk.svg
/c16,1 ../gfx/tonet.svg
/c16,1 ../gfx/todisk2.svg
/c16,1 ../gfx/todisk3.svg
/c16,1 ../gfx/todisk4.svg
/c16,1 ../gfx/todisk5.svg
/c16,1 ../gfx/tonet1.svg
/c16,1 ../gfx/tonet2.svg
/c16,1 ../gfx/tonet3.svg
/c16,1 ../gfx/tonet4.svg
/c16,1 ../gfx/todiskcopy.svg

2:把程序下面的xxxxx.mk改动下改成包含SvgImages.miflist文件的

RESOURCE :
 mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) /FSvgImages.miflist

4:在inf目录下面加上mk文件,这样就可以进行编译

5:PRJ_PLATFORMS
WINSCW ARMV5 GCCE

PRJ_EXPORTS

PRJ_MMPFILES

gnumakefile icons_aif_scalable_dc.mk

ATestList2.mmp

 6:在pkg文件里加上文件打包信息"$(EPOCROOT)epoc32/data/z/resource/apps/ATestList2_aif.mif" -"!:/resource/apps/ATestList2_aif.mif"
"$(EPOCROOT)epoc32/data/z/resource/apps/ATestList2.mbm" -"!:/resource/apps/ATestList2.mbm"

不加的话在模拟器上调试是没有任何问题的,但是到了真机上就会出现问题,找不到资源了 我因为这个原因找了一天半 比较郁闷

以上步骤以后我们就可以正常使用了: 下面是关键的类:

bld.inf:

view plaincopy to clipboardprint?
PRJ_PLATFORMS  
WINSCW ARMV5 GCCE  
 
PRJ_EXPORTS  
 
PRJ_MMPFILES  
 
gnumakefile icons_aif_scalable_dc.mk  
 
ATestList2.mmp 
PRJ_PLATFORMS
WINSCW ARMV5 GCCE

PRJ_EXPORTS

PRJ_MMPFILES

gnumakefile icons_aif_scalable_dc.mk

ATestList2.mmp

Icons_aif_scalable_dc.mk 文件:

view plaincopy to clipboardprint?
# ============================================================================ 
#  Name  : Icons_aif_scalable_dc.mk 
#  Part of  : ATestList2 

#  Description: 
#  
# ============================================================================  
 
 
ifeq (WINS,$(findstring WINS, $(PLATFORM)))  
ZDIR=$(EPOCROOT)epoc32/release/$(PLATFORM)/$(CFG)/Z  
else 
ZDIR=$(EPOCROOT)epoc32/data/z  
endif 
 
 
# ---------------------------------------------------------------------------- 
# TODO: Configure these 
# ----------------------------------------------------------------------------  
 
TARGETDIR=$(ZDIR)/resource/apps  
ICONTARGETFILENAME=$(TARGETDIR)/ATestList2_aif.mif  
HEADERDIR=$(EPOCROOT)epoc32/include  
HEADERFILENAME=$(HEADERDIR)/ATestList2_aif.mbg  
 
ICONDIR=../gfx  
 
do_nothing :  
    @rem do_nothing  
 
MAKMAKE : do_nothing  
 
BLD : do_nothing  
 
CLEAN : do_nothing  
 
LIB : do_nothing  
 
CLEANLIB : do_nothing 
 
# ---------------------------------------------------------------------------- 
# TODO: Configure these. 

# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by 
# MifConv if the mask detph is defined. 

# NOTE 2: Usually, source paths should not be included in the bitmap 
# definitions. MifConv searches for the icons in all icon directories in a 
# predefined order, which is currently /s60/icons, /s60/bitmaps2. 
# The directory /s60/icons is included in the search only if the feature flag 
# __SCALABLE_ICONS is defined. 
# ---------------------------------------------------------------------------- 
# NOTE: if you have JUSTINTIME enabled for your S60 3rd FP1 or newer SDK 
# and this command crashes, consider adding "/X" to the command line. 
# See <http://forum.nokia.com/document/Forum_Nokia_Technical_Library_v1_35/contents/FNTL/Build_process_fails_at_mif_file_creation_in_S60_3rd_Ed_FP1_SDK.htm> 
# ----------------------------------------------------------------------------  
 
RESOURCE :    
    mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) /FSvgImages.miflist  
          
FREEZE : do_nothing  
 
SAVESPACE : do_nothing  
 
RELEASABLES :  
    @echo $(ICONTARGETFILENAME)  
 
FINAL : do_nothing 
# ============================================================================
#  Name  : Icons_aif_scalable_dc.mk
#  Part of  : ATestList2
#
#  Description:
#
# ============================================================================


ifeq (WINS,$(findstring WINS, $(PLATFORM)))
ZDIR=$(EPOCROOT)epoc32/release/$(PLATFORM)/$(CFG)/Z
else
ZDIR=$(EPOCROOT)epoc32/data/z
endif


# ----------------------------------------------------------------------------
# TODO: Configure these
# ----------------------------------------------------------------------------

TARGETDIR=$(ZDIR)/resource/apps
ICONTARGETFILENAME=$(TARGETDIR)/ATestList2_aif.mif
HEADERDIR=$(EPOCROOT)epoc32/include
HEADERFILENAME=$(HEADERDIR)/ATestList2_aif.mbg

ICONDIR=../gfx

do_nothing :
 @rem do_nothing

MAKMAKE : do_nothing

BLD : do_nothing

CLEAN : do_nothing

LIB : do_nothing

CLEANLIB : do_nothing

# ----------------------------------------------------------------------------
# TODO: Configure these.
#
# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
# MifConv if the mask detph is defined.
#
# NOTE 2: Usually, source paths should not be included in the bitmap
# definitions. MifConv searches for the icons in all icon directories in a
# predefined order, which is currently /s60/icons, /s60/bitmaps2.
# The directory /s60/icons is included in the search only if the feature flag
# __SCALABLE_ICONS is defined.
# ----------------------------------------------------------------------------
# NOTE: if you have JUSTINTIME enabled for your S60 3rd FP1 or newer SDK
# and this command crashes, consider adding "/X" to the command line.
# See <http://forum.nokia.com/document/Forum_Nokia_Technical_Library_v1_35/contents/FNTL/Build_process_fails_at_mif_file_creation_in_S60_3rd_Ed_FP1_SDK.htm>
# ----------------------------------------------------------------------------

RESOURCE : 
 mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) /FSvgImages.miflist
  
FREEZE : do_nothing

SAVESPACE : do_nothing

RELEASABLES :
 @echo $(ICONTARGETFILENAME)

FINAL : do_nothing
 

SvgImages.miflist

view plaincopy to clipboardprint?
/c16,1 ../gfx/qgn_menu_ATestList2.svg  
/c16,1 ../gfx/todisk.svg  
/c16,1 ../gfx/tonet.svg  
/c16,1 ../gfx/todisk2.svg  
/c16,1 ../gfx/todisk3.svg  
/c16,1 ../gfx/todisk4.svg  
/c16,1 ../gfx/todisk5.svg  
/c16,1 ../gfx/tonet1.svg  
/c16,1 ../gfx/tonet2.svg  
/c16,1 ../gfx/tonet3.svg  
/c16,1 ../gfx/tonet4.svg  
/c16,1 ../gfx/todiskcopy.svg 
/c16,1 ../gfx/qgn_menu_ATestList2.svg
/c16,1 ../gfx/todisk.svg
/c16,1 ../gfx/tonet.svg
/c16,1 ../gfx/todisk2.svg
/c16,1 ../gfx/todisk3.svg
/c16,1 ../gfx/todisk4.svg
/c16,1 ../gfx/todisk5.svg
/c16,1 ../gfx/tonet1.svg
/c16,1 ../gfx/tonet2.svg
/c16,1 ../gfx/tonet3.svg
/c16,1 ../gfx/tonet4.svg
/c16,1 ../gfx/todiskcopy.svg

ATestList2.pkg

view plaincopy to clipboardprint?
; ATestList2.pkg  
; This is an auto-generated PKG file by Carbide.  
; This file uses variables specific to Carbide builds that will not work  
; on command-line builds. If you want to use this generated PKG file from the  
; command-line tools you will need to modify the variables with the appropriate  
; values: $(EPOCROOT), $(PLATFORM), $(TARGET)  
; Also, the resource file entries should be changed to match the language  
; used in the build. For example, if building for LANGUAGE_01, change the file  
; extensions .rsc to .r01.  
;  
;Language - standard language definitions  
&EN  
 
; standard SIS file header 
#{"ATestList2"},(0xEE8D6E0D),1,0,0  
 
;Localised Vendor name  
%{"Vendor-EN"}  
 
;Unique Vendor name  
:"Vendor" 
 
;Supports Series 60 v 3.0  
[0x101F7961], 0, 0, 0, {"Series60ProductID"}  
 
;Files to install  
;You should change the source paths to match that of your environment  
;<source> <destination>  
"$(EPOCROOT)Epoc32/release/$(PLATFORM)/$(TARGET)/ATestList2.exe"        -"!:/sys/bin/ATestList2.exe" 
"$(EPOCROOT)Epoc32/data/z/resource/apps/ATestList2.r01"     -"!:/resource/apps/ATestList2.r01" 
"$(EPOCROOT)Epoc32/data/z/private/10003a3f/apps/ATestList2_reg.r01" -"!:/private/10003a3f/import/apps/ATestList2_reg.r01" 
"$(EPOCROOT)epoc32/data/z/resource/apps/ATestList2_aif.mif" -"!:/resource/apps/ATestList2_aif.mif" 
"$(EPOCROOT)epoc32/data/z/resource/apps/ATestList2.mbm" -"!:/resource/apps/ATestList2.mbm" 
; Add any installation notes if applicable  
;"ATestList2.txt"                     -"!:/private/0xEE8D6E0D/ATestList2.txt" 
; ATestList2.pkg
; This is an auto-generated PKG file by Carbide.
; This file uses variables specific to Carbide builds that will not work
; on command-line builds. If you want to use this generated PKG file from the
; command-line tools you will need to modify the variables with the appropriate
; values: $(EPOCROOT), $(PLATFORM), $(TARGET)
; Also, the resource file entries should be changed to match the language
; used in the build. For example, if building for LANGUAGE_01, change the file
; extensions .rsc to .r01.
;
;Language - standard language definitions
&EN

; standard SIS file header
#{"ATestList2"},(0xEE8D6E0D),1,0,0

;Localised Vendor name
%{"Vendor-EN"}

;Unique Vendor name
:"Vendor"

;Supports Series 60 v 3.0
[0x101F7961], 0, 0, 0, {"Series60ProductID"}

;Files to install
;You should change the source paths to match that of your environment
;<source> <destination>
"$(EPOCROOT)Epoc32/release/$(PLATFORM)/$(TARGET)/ATestList2.exe"  -"!:/sys/bin/ATestList2.exe"
"$(EPOCROOT)Epoc32/data/z/resource/apps/ATestList2.r01"  -"!:/resource/apps/ATestList2.r01"
"$(EPOCROOT)Epoc32/data/z/private/10003a3f/apps/ATestList2_reg.r01" -"!:/private/10003a3f/import/apps/ATestList2_reg.r01"
"$(EPOCROOT)epoc32/data/z/resource/apps/ATestList2_aif.mif" -"!:/resource/apps/ATestList2_aif.mif"
"$(EPOCROOT)epoc32/data/z/resource/apps/ATestList2.mbm" -"!:/resource/apps/ATestList2.mbm"
; Add any installation notes if applicable
;"ATestList2.txt"       -"!:/private/0xEE8D6E0D/ATestList2.txt"

 

文件使用类:ATestList2ListBox.h

view plaincopy to clipboardprint?
/* 
======================================================================== 
 Name        : ATestList2ListBox.h 
 Author      : SMSExampleParser 
 Copyright   : Your copyright notice 
 Description :  
======================================================================== 
*/
#ifndef ATESTLIST2LISTBOX_H 
#define ATESTLIST2LISTBOX_H  
 
// [[[ begin generated region: do not modify [Generated Includes] 
#include <coecntrl.h>      
#include <akniconutils.h> 
#include <gulicon.h>  
// ]]] end generated region [Generated Includes]  
 
 
// [[[ begin [Event Handler Includes]  
// ]]] end [Event Handler Includes]  
 
// [[[ begin generated region: do not modify [Generated Forward Declarations]  
class MEikCommandObserver;        
class CAknDoubleLargeStyleListBox;  
class CEikTextListBox;  
// ]]] end generated region [Generated Forward Declarations]  
 
/** 
 * Container class for ATestList2ListBox 
 *  
 * @class   CATestList2ListBox ATestList2ListBox.h 
 */ 
class CATestList2ListBox : public CCoeControl  
    {  
public:  
    // constructors and destructor  
    CATestList2ListBox();  
    static CATestList2ListBox* NewL(   
        const TRect& aRect,   
        const CCoeControl* aParent,   
        MEikCommandObserver* aCommandObserver );  
    static CATestList2ListBox* NewLC(   
        const TRect& aRect,   
        const CCoeControl* aParent,   
        MEikCommandObserver* aCommandObserver );  
    void ConstructL(   
        const TRect& aRect,   
        const CCoeControl* aParent,   
        MEikCommandObserver* aCommandObserver );  
    virtual ~CATestList2ListBox();  
 
public:  
    // from base class CCoeControl  
    TInt CountComponentControls() const;  
    CCoeControl* ComponentControl( TInt aIndex ) const;  
    TKeyResponse OfferKeyEventL(   
            const TKeyEvent& aKeyEvent,   
            TEventCode aType );  
    void HandleResourceChange( TInt aType );  
      
protected:  
    // from base class CCoeControl  
    void SizeChanged();  
 
private:  
    // from base class CCoeControl  
    void Draw( const TRect& aRect ) const;  
 
private:  
    void InitializeControlsL();  
    void LayoutControls();  
    CCoeControl* iFocusControl;  
    MEikCommandObserver* iCommandObserver;  
    // [[[ begin generated region: do not modify [Generated Methods]  
public:   
    static void AddListBoxItemL(   
            CEikTextListBox* aListBox,  
            const TDesC& aString );  
    static RArray< TInt >* GetSelectedListBoxItemsLC( CEikTextListBox* aListBox );  
    static void DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox );  
    CAknDoubleLargeStyleListBox* ListBox();  
    static void CreateListBoxItemL( TDes& aBuffer,   
            TInt aIconIndex,  
            const TDesC& aMainText,  
            const TDesC& aSecondaryText );  
    void AddListBoxResourceArrayItemL( TInt aResourceId, TInt aIconIndex );  
    void SetupListBoxIconsL();  
    static CGulIcon* LoadAndScaleIconL(  
            const TDesC& aFileName,  
            TInt aBitmapId,  
            TInt aMaskId,  
            TSize* aSize,  
            TScaleMode aScaleMode ,  
            TInt i);  
    TBool HandleMarkableListCommandL( TInt aCommand );  
    // ]]] end generated region [Generated Methods]  
      
    // [[[ begin generated region: do not modify [Generated Type Declarations]  
public:   
    // ]]] end generated region [Generated Type Declarations]  
      
    // [[[ begin generated region: do not modify [Generated Instance Variables]  
private:   
    CAknDoubleLargeStyleListBox* iListBox;  
    // ]]] end generated region [Generated Instance Variables]  
      
      
    // [[[ begin [Overridden Methods]  
protected:   
    // ]]] end [Overridden Methods]  
      
      
    // [[[ begin [User Handlers]  
protected:   
    // ]]] end [User Handlers]  
      
public:   
    enum TControls  
        {  
        // [[[ begin generated region: do not modify [Generated Contents]  
        EListBox,  
          
        // ]]] end generated region [Generated Contents]  
          
        // add any user-defined entries here...  
          
        ELastControl  
        };  
    enum TListBoxImages  
        {  
        // [[[ begin generated region: do not modify [Generated Enums]  
        EListBoxAtestlist2List_iconIndex = 0,  
        EListBoxAtestlist2List_iconIndex1,  
        EListBoxAtestlist2List_iconIndex2,  
        EListBoxAtestlist2List_iconIndex3,   
        EListBoxAtestlist2List_iconIndex4,   
        EListBoxAtestlist2List_iconIndex5,  
        EListBoxAtestlist2List_iconIndex6,  
        EListBoxAtestlist2List_iconIndex7,  
        EListBoxAtestlist2List_iconIndex8,  
        EListBoxAtestlist2List_iconIndex9,   
        EListBoxAtestlist2List_iconIndex10,   
          
        EListBoxFirstUserImageIndex  
          
        // ]]] end generated region [Generated Enums]  
          
        };  
    }; 
                 
#endif // ATESTLIST2LISTBOX_H 
/*
========================================================================
 Name        : ATestList2ListBox.h
 Author      : SMSExampleParser
 Copyright   : Your copyright notice
 Description :
========================================================================
*/
#ifndef ATESTLIST2LISTBOX_H
#define ATESTLIST2LISTBOX_H

// [[[ begin generated region: do not modify [Generated Includes]
#include <coecntrl.h>  
#include <akniconutils.h>
#include <gulicon.h>
// ]]] end generated region [Generated Includes]


// [[[ begin [Event Handler Includes]
// ]]] end [Event Handler Includes]

// [[[ begin generated region: do not modify [Generated Forward Declarations]
class MEikCommandObserver;  
class CAknDoubleLargeStyleListBox;
class CEikTextListBox;
// ]]] end generated region [Generated Forward Declarations]

/**
 * Container class for ATestList2ListBox
 *
 * @class CATestList2ListBox ATestList2ListBox.h
 */
class CATestList2ListBox : public CCoeControl
 {
public:
 // constructors and destructor
 CATestList2ListBox();
 static CATestList2ListBox* NewL(
  const TRect& aRect,
  const CCoeControl* aParent,
  MEikCommandObserver* aCommandObserver );
 static CATestList2ListBox* NewLC(
  const TRect& aRect,
  const CCoeControl* aParent,
  MEikCommandObserver* aCommandObserver );
 void ConstructL(
  const TRect& aRect,
  const CCoeControl* aParent,
  MEikCommandObserver* aCommandObserver );
 virtual ~CATestList2ListBox();

public:
 // from base class CCoeControl
 TInt CountComponentControls() const;
 CCoeControl* ComponentControl( TInt aIndex ) const;
 TKeyResponse OfferKeyEventL(
   const TKeyEvent& aKeyEvent,
   TEventCode aType );
 void HandleResourceChange( TInt aType );
 
protected:
 // from base class CCoeControl
 void SizeChanged();

private:
 // from base class CCoeControl
 void Draw( const TRect& aRect ) const;

private:
 void InitializeControlsL();
 void LayoutControls();
 CCoeControl* iFocusControl;
 MEikCommandObserver* iCommandObserver;
 // [[[ begin generated region: do not modify [Generated Methods]
public:
 static void AddListBoxItemL(
   CEikTextListBox* aListBox,
   const TDesC& aString );
 static RArray< TInt >* GetSelectedListBoxItemsLC( CEikTextListBox* aListBox );
 static void DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox );
 CAknDoubleLargeStyleListBox* ListBox();
 static void CreateListBoxItemL( TDes& aBuffer,
   TInt aIconIndex,
   const TDesC& aMainText,
   const TDesC& aSecondaryText );
 void AddListBoxResourceArrayItemL( TInt aResourceId, TInt aIconIndex );
 void SetupListBoxIconsL();
 static CGulIcon* LoadAndScaleIconL(
   const TDesC& aFileName,
   TInt aBitmapId,
   TInt aMaskId,
   TSize* aSize,
   TScaleMode aScaleMode ,
   TInt i);
 TBool HandleMarkableListCommandL( TInt aCommand );
 // ]]] end generated region [Generated Methods]
 
 // [[[ begin generated region: do not modify [Generated Type Declarations]
public:
 // ]]] end generated region [Generated Type Declarations]
 
 // [[[ begin generated region: do not modify [Generated Instance Variables]
private:
 CAknDoubleLargeStyleListBox* iListBox;
 // ]]] end generated region [Generated Instance Variables]
 
 
 // [[[ begin [Overridden Methods]
protected:
 // ]]] end [Overridden Methods]
 
 
 // [[[ begin [User Handlers]
protected:
 // ]]] end [User Handlers]
 
public:
 enum TControls
  {
  // [[[ begin generated region: do not modify [Generated Contents]
  EListBox,
  
  // ]]] end generated region [Generated Contents]
  
  // add any user-defined entries here...
  
  ELastControl
  };
 enum TListBoxImages
  {
  // [[[ begin generated region: do not modify [Generated Enums]
  EListBoxAtestlist2List_iconIndex = 0,
  EListBoxAtestlist2List_iconIndex1,
  EListBoxAtestlist2List_iconIndex2,
  EListBoxAtestlist2List_iconIndex3,
  EListBoxAtestlist2List_iconIndex4,
  EListBoxAtestlist2List_iconIndex5,
  EListBoxAtestlist2List_iconIndex6,
  EListBoxAtestlist2List_iconIndex7,
  EListBoxAtestlist2List_iconIndex8,
  EListBoxAtestlist2List_iconIndex9,
  EListBoxAtestlist2List_iconIndex10,
  
  EListBoxFirstUserImageIndex
  
  // ]]] end generated region [Generated Enums]
  
  };
 };
    
#endif // ATESTLIST2LISTBOX_H
 

ATestList2ListBox.cpp

view plaincopy to clipboardprint?
/* 
======================================================================== 
 Name        : ATestList2ListBox.cpp 
 Author      : SMSExampleParser 
 Copyright   : Your copyright notice 
 Description :  
======================================================================== 
*/ 
// [[[ begin generated region: do not modify [Generated System Includes] 
#include <barsread.h> 
#include <stringloader.h> 
#include <aknlists.h> 
#include <eikenv.h> 
#include <akniconarray.h> 
#include <eikclbd.h> 
#include <aknviewappui.h> 
#include <eikappui.h> 
#include <ATestList2.mbg> 
#include <ATestList2_aif.mbg>//swb 真有啊 天啊 
#include <ATestList2.rsg>  
// ]]] end generated region [Generated System Includes]  
 
// [[[ begin generated region: do not modify [Generated User Includes] 
#include "ATestList2ListBox.h" 
#include "ATestList2ListBoxView.h" 
#include "ATestList2.hrh"  
// ]]] end generated region [Generated User Includes]  
 
// [[[ begin generated region: do not modify [Generated Constants]  
_LIT( KATestList2File, "//resource//apps//ATestList2.mbm" );  
_LIT(KATestList2SVGFile, "//resource//apps//ATestList2_aif.mbm");  
// ]]] end generated region [Generated Constants]  
 
/** 
 * First phase of Symbian two-phase construction. Should not  
 * contain any code that could leave. 
 */ 
CATestList2ListBox::CATestList2ListBox()  
    {  
    // [[[ begin generated region: do not modify [Generated Contents]  
    iListBox = NULL;  
    // ]]] end generated region [Generated Contents]  
      
    }  
/**  
 * Destroy child controls. 
 */ 
CATestList2ListBox::~CATestList2ListBox()  
    {  
    // [[[ begin generated region: do not modify [Generated Contents]  
    delete iListBox;  
    iListBox = NULL;  
    // ]]] end generated region [Generated Contents]  
      
    }  
                  
/** 
 * Construct the control (first phase). 
 *  Creates an instance and initializes it. 
 *  Instance is not left on cleanup stack. 
 * @param aRect bounding rectangle 
 * @param aParent owning parent, or NULL 
 * @param aCommandObserver command observer 
 * @return initialized instance of CATestList2ListBox 
 */ 
CATestList2ListBox* CATestList2ListBox::NewL(   
        const TRect& aRect,   
        const CCoeControl* aParent,   
        MEikCommandObserver* aCommandObserver )  
    {  
    CATestList2ListBox* self = CATestList2ListBox::NewLC(   
            aRect,   
            aParent,   
            aCommandObserver );  
    CleanupStack::Pop( self );  
    return self;  
    }  
 
/** 
 * Construct the control (first phase). 
 *  Creates an instance and initializes it. 
 *  Instance is left on cleanup stack. 
 * @param aRect The rectangle for this window 
 * @param aParent owning parent, or NULL 
 * @param aCommandObserver command observer 
 * @return new instance of CATestList2ListBox 
 */ 
CATestList2ListBox* CATestList2ListBox::NewLC(   
        const TRect& aRect,   
        const CCoeControl* aParent,   
        MEikCommandObserver* aCommandObserver )  
    {  
    CATestList2ListBox* self = new ( ELeave ) CATestList2ListBox();  
    CleanupStack::PushL( self );  
    self->ConstructL( aRect, aParent, aCommandObserver );  
    return self;  
    }  
              
/** 
 * Construct the control (second phase). 
 *  Creates a window to contain the controls and activates it. 
 * @param aRect bounding rectangle 
 * @param aCommandObserver command observer 
 * @param aParent owning parent, or NULL 
 */   
void CATestList2ListBox::ConstructL(   
        const TRect& aRect,   
        const CCoeControl* aParent,   
        MEikCommandObserver* aCommandObserver )  
    {  
    if ( aParent == NULL )  
        {  
        CreateWindowL();  
        }  
    else 
        {  
        SetContainerWindowL( *aParent );  
        }  
    iFocusControl = NULL;  
    iCommandObserver = aCommandObserver;  
    InitializeControlsL();  
    SetRect( aRect );  
    ActivateL();  
    // [[[ begin generated region: do not modify [Post-ActivateL initializations]  
    // ]]] end generated region [Post-ActivateL initializations]  
      
    }  
              
/** 
* Return the number of controls in the container (override) 
* @return count 
*/ 
TInt CATestList2ListBox::CountComponentControls() const 
    {  
    return ( int ) ELastControl;  
    }  
                  
/** 
* Get the control with the given index (override) 
* @param aIndex Control index [0...n) (limited by #CountComponentControls) 
* @return Pointer to control 
*/ 
CCoeControl* CATestList2ListBox::ComponentControl( TInt aIndex ) const 
    {  
    // [[[ begin generated region: do not modify [Generated Contents]  
    switch ( aIndex )  
        {  
    case EListBox:  
        return iListBox;  
        }  
    // ]]] end generated region [Generated Contents]  
      
    // handle any user controls here...  
      
    return NULL;  
    }  
                  
/** 
 *  Handle resizing of the container. This implementation will lay out 
 *  full-sized controls like list boxes for any screen size, and will layout 
 *  labels, editors, etc. to the size they were given in the UI designer. 
 *  This code will need to be modified to adjust arbitrary controls to 
 *  any screen size. 
 */               
void CATestList2ListBox::SizeChanged()  
    {  
    CCoeControl::SizeChanged();  
    LayoutControls();  
    // [[[ begin generated region: do not modify [Generated Contents]  
              
    // ]]] end generated region [Generated Contents]  
      
    }  
                  
// [[[ begin generated function: do not modify  
/** 
 * Layout components as specified in the UI Designer 
 */ 
void CATestList2ListBox::LayoutControls()  
    {  
    iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );  
    }  
// ]]] end generated function  
 
/** 
 *  Handle key events. 
 */               
TKeyResponse CATestList2ListBox::OfferKeyEventL(   
        const TKeyEvent& aKeyEvent,   
        TEventCode aType )  
    {  
    // [[[ begin generated region: do not modify [Generated Contents]  
    if ( aKeyEvent.iCode == EKeyLeftArrow   
        || aKeyEvent.iCode == EKeyRightArrow )  
        {  
        // Listbox takes all events even if it doesn't use them  
        return EKeyWasNotConsumed;  
        }  
      
    // ]]] end generated region [Generated Contents]  
      
    if ( iFocusControl != NULL  
        && iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )  
        {  
        return EKeyWasConsumed;  
        }  
    return CCoeControl::OfferKeyEventL( aKeyEvent, aType );  
    }  
                  
// [[[ begin generated function: do not modify  
/** 
 *  Initialize each control upon creation. 
 */               
void CATestList2ListBox::InitializeControlsL()//这个就是初始化控件的方法  
    {  
    iListBox = new ( ELeave ) CAknDoubleLargeStyleListBox;//初始化listBox  
    iListBox->SetContainerWindowL( *this );//设置list的  
        {  
        TResourceReader reader;//一个资源解析器  
        iEikonEnv->CreateResourceReaderLC( reader, R_ATEST_LIST2_LIST_BOX_LIST_BOX );//读取资源  
        iListBox->ConstructFromResourceL( reader );//构造资源  
        CleanupStack::PopAndDestroy(); // reader internal state  
        }  
    // the listbox owns the items in the list and will free them  
    iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );//这个是说list拥有item并且负责处理他们  
      
    // setup the icon array so graphics-style boxes work//设置list的图标  
    SetupListBoxIconsL();  
      
      
    // add list items  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM1,  
            EListBoxAtestlist2List_iconIndex );  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM2,  
            EListBoxAtestlist2List_iconIndex1 );  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM3,  
            EListBoxAtestlist2List_iconIndex2 );  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM4,  
            EListBoxAtestlist2List_iconIndex3 );  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM5,  
            EListBoxAtestlist2List_iconIndex4 );  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM6,  
            EListBoxAtestlist2List_iconIndex5 );  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM7,  
            EListBoxAtestlist2List_iconIndex6 );  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM8,  
            EListBoxAtestlist2List_iconIndex7 );  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM9,  
            EListBoxAtestlist2List_iconIndex8 );  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM10,  
            EListBoxAtestlist2List_iconIndex9 );  
    AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM11,  
            EListBoxAtestlist2List_iconIndex10 );  
    iListBox->SetFocus( ETrue );// 获得交点  
    iFocusControl = iListBox;  
      
    }  
// ]]] end generated function  
 
/**  
 * Handle global resource changes, such as scalable UI or skin events (override) 
 */ 
void CATestList2ListBox::HandleResourceChange( TInt aType )  
    {  
    CCoeControl::HandleResourceChange( aType );  
    SetRect( iAvkonViewAppUi->View( TUid::Uid( EATestList2ListBoxViewId ) )->ClientRect() );  
    // [[[ begin generated region: do not modify [Generated Contents]  
    // ]]] end generated region [Generated Contents]  
      
    }  
                  
/** 
 *  Draw container contents. 
 */               
void CATestList2ListBox::Draw( const TRect& aRect ) const 
    {  
    // [[[ begin generated region: do not modify [Generated Contents]  
    CWindowGc& gc = SystemGc();  
    gc.Clear( aRect );  
      
    // ]]] end generated region [Generated Contents]  
      
    }  
                  
// [[[ begin generated function: do not modify  
/** 
 *  Add a list box item to a list. 
 */ 
void CATestList2ListBox::AddListBoxItemL(   
        CEikTextListBox* aListBox,  
        const TDesC& aString )  
    {  
    CTextListBoxModel* model = aListBox->Model();//得到listbox的model  
    CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );//得到ilistbox 的数组  
    itemArray->AppendL( aString );//添加本数组  
    aListBox->HandleItemAdditionL();//当listbox的model改变的时候 用这个功能来改变他们内在的这个状态  
    }  
 
// ]]] end generated function  
 
// [[[ begin generated function: do not modify  
/** 
 * Get the array of selected item indices, with respect to the list model. 
 * The array is sorted in ascending order. 
 * The array should be destroyed with two calls to CleanupStack::PopAndDestroy(), 
 * the first with no argument (referring to the internal resource) and the 
 * second with the array pointer. 
 * @return newly allocated array, which is left on the cleanup stack; 
 *  or NULL for empty list.  
 */ 
RArray< TInt >* CATestList2ListBox::GetSelectedListBoxItemsLC( CEikTextListBox* aListBox )  
    {  
    CAknFilteredTextListBoxModel* model =   
        static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );  
    if ( model->NumberOfItems() == 0 )  
        return NULL;  
          
    // get currently selected indices  
    const CListBoxView::CSelectionIndexArray* selectionIndexes =  
        aListBox->SelectionIndexes();  
    TInt selectedIndexesCount = selectionIndexes->Count();  
    if ( selectedIndexesCount == 0 )  
        return NULL;  
          
    // copy the indices and sort numerically  
    RArray<TInt>* orderedSelectedIndices =   
        new (ELeave) RArray< TInt >( selectedIndexesCount );  
      
    // push the allocated array  
    CleanupStack::PushL( orderedSelectedIndices );  
      
    // dispose the array resource  
    CleanupClosePushL( *orderedSelectedIndices );  
      
    // see if the search field is enabled  
    CAknListBoxFilterItems* filter = model->Filter();  
    if ( filter != NULL )  
        {  
        // when filtering enabled, translate indices back to underlying model  
        for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )  
            {  
            TInt filteredItem = ( *selectionIndexes ) [ idx ];  
            TInt actualItem = filter->FilteredItemIndex ( filteredItem );  
            orderedSelectedIndices->InsertInOrder( actualItem );  
            }  
        }  
    else 
        {  
        // the selection indices refer directly to the model  
        for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )  
            orderedSelectedIndices->InsertInOrder( ( *selectionIndexes ) [ idx ] );  
        }     
          
    return orderedSelectedIndices;  
    }  
 
// ]]] end generated function  
 
// [[[ begin generated function: do not modify  
/** 
 * Delete the selected item or items from the list box. 
 */ 
void CATestList2ListBox::DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox )  
    {  
    CAknFilteredTextListBoxModel* model =   
        static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );  
    if ( model->NumberOfItems() == 0 )  
        return;  
      
    RArray< TInt >* orderedSelectedIndices = GetSelectedListBoxItemsLC( aListBox );         
    if ( !orderedSelectedIndices )  
        return;  
          
    // Delete selected items from bottom up so indices don't change on us  
    CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );  
    TInt currentItem = 0;  
      
    for ( TInt idx = orderedSelectedIndices->Count(); idx-- > 0; )   
        {  
        currentItem = ( *orderedSelectedIndices )[ idx ];  
        itemArray->Delete ( currentItem );  
        }  
      
    // dispose the array resources  
    CleanupStack::PopAndDestroy();  
      
    // dispose the array pointer  
    CleanupStack::PopAndDestroy( orderedSelectedIndices );  
      
    // refresh listbox's cursor now that items are deleted  
    AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(  
        aListBox, currentItem, ETrue );  
    }  
 
// ]]] end generated function  
 
// [[[ begin generated function: do not modify  
/** 
 *  Get the listbox. 
 */ 
CAknDoubleLargeStyleListBox* CATestList2ListBox::ListBox()  
    {  
    return iListBox;  
    }  
 
// ]]] end generated function  
 
// [[[ begin generated function: do not modify  
/** 
 *  Create a list box item with the given column values. 
 */ 
void CATestList2ListBox::CreateListBoxItemL( TDes& aBuffer,   
        TInt aIconIndex,  
        const TDesC& aMainText,  
        const TDesC& aSecondaryText )  
    {  
    _LIT ( KStringHeader, "%d/t%S/t%S" );  
      
    aBuffer.Format( KStringHeader(), aIconIndex, &aMainText, &aSecondaryText );//字符串格式是这样的 图片位置,上面位置 下面位置  
    }   
                  
// ]]] end generated function  
 
// [[[ begin generated function: do not modify  
/** 
 *  Add an item to the list by reading the text items from the array resource 
 *  and setting a single image property (if available) from an index 
 *  in the list box's icon array. 
 *  @param aResourceId id of an ARRAY resource containing the textual 
 *  items in the columns 
 *  @param aIconIndex the index in the icon array, or -1 
 */ 
void CATestList2ListBox::AddListBoxResourceArrayItemL( TInt aResourceId, TInt aIconIndex )  
    {  
    CDesCArray* array = iCoeEnv->ReadDesCArrayResourceL( aResourceId );//通过资源ID来读取资源  
    CleanupStack::PushL( array );  
    // This is intended to be large enough, but if you get   
    // a USER 11 panic, consider reducing string sizes.  
    TBuf<512> listString;   
    //这个是调整格式  
    CreateListBoxItemL( listString, aIconIndex, ( *array ) [ 0 ], ( *array ) [ 1 ] );//得到每一个item  
      
    //这个是添加格式  
    AddListBoxItemL( iListBox, listString );  
      
    CleanupStack::PopAndDestroy( array );  
    }   
                  
// ]]] end generated function  
 
// [[[ begin generated function: do not modify  
/** 
 *  Set up the list's icon array. 
 */ 
void CATestList2ListBox::SetupListBoxIconsL()  
    {  
    CArrayPtr< CGulIcon >* icons = NULL;  //定义图象数组      
    icons = new (ELeave) CAknIconArray( 11 );//初始化图象  
    CleanupStack::PushL( icons );  
    CGulIcon* icon;//创建图标对象  
    // for EListBoxAtestlist2List_iconIndex  
    for(int i=0;i<11;i++)  
        {  
        icon = LoadAndScaleIconL(  
                KATestList2File, EMbmAtestlist2List_icon, EMbmAtestlist2List_icon_mask,  
                NULL, EAspectRatioPreserved,i );//创建图标  
        CleanupStack::PushL( icon );  
        icons->AppendL( icon );  
        CleanupStack::Pop( icon );  
        }  
 
    CleanupStack::Pop( icons );  
      
    if ( icons != NULL )  
        {  
        iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );//设置图片的图标数组 这样在以后的地方就好用了  
        }  
    }  
/**  
 *  Handle commands relating to markable lists. 
 */ 
TBool CATestList2ListBox::HandleMarkableListCommandL( TInt aCommand )  
    {  
    return EFalse;  
    }  
 
// ]]] end generated function  
 
// [[[ begin generated function: do not modify  
/** 
 *  This routine loads and scales a bitmap or icon. 
 * 
 *  @param aFileName the MBM or MIF filename 
 *  @param aBitmapId the bitmap id 
 *  @param aMaskId the mask id or -1 for none 
 *  @param aSize the TSize for the icon, or NULL to use real size 
 *  @param aScaleMode one of the EAspectRatio* enums when scaling 
 * 
 */ 
CGulIcon* CATestList2ListBox::LoadAndScaleIconL(   
        const TDesC& aFileName,  
        TInt aBitmapId,   
        TInt aMaskId,   
        TSize* aSize,   
        TScaleMode aScaleMode,TInt i)  
    {  
    //icon = LoadAndScaleIconL(  
    //      KATestList2File, EMbmAtestlist2List_icon, EMbmAtestlist2List_icon_mask,  
    //      NULL, EAspectRatioPreserved );  
    CFbsBitmap* bitmap;  
    CFbsBitmap* mask;  
    if(i==0)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk, EMbmAtestlist2_aifTodisk_mask );  
        }  
    if(i==1)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTonet, EMbmAtestlist2_aifTonet_mask );  
        }  
    if(i==2)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk2, EMbmAtestlist2_aifTonet2_mask );  
        }  
    if(i==3)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk3, EMbmAtestlist2_aifTodisk3_mask );  
        }  
    if(i==4)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk4, EMbmAtestlist2_aifTodisk4_mask );  
        }  
    if(i==5)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk5, EMbmAtestlist2_aifTodisk5_mask );  
        }  
    if(i==6)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTonet1, EMbmAtestlist2_aifTonet1_mask );  
        }  
    if(i==7)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTonet2, EMbmAtestlist2_aifTonet2_mask );  
        }  
    if(i==8)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTonet3, EMbmAtestlist2_aifTonet3_mask );  
        }  
    if(i==9)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTonet4, EMbmAtestlist2_aifTonet4_mask );  
        }  
    if(i==10)  
        {  
        AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk3, EMbmAtestlist2_aifTodisk3_mask );  
        }  
    //  AknIconUtils::CreateIconL( bitmap, mask, aFileName, aBitmapId, aMaskId );  
      
    TSize size;  
    if ( aSize == NULL )  
        {  
        // Use size from the image header.  In case of SVG,  
        // we preserve the image data for a while longer, since ordinarily  
        // it is disposed at the first GetContentDimensions() or SetSize() call.  
        AknIconUtils::PreserveIconData( bitmap );//得到图象数据  
        AknIconUtils::GetContentDimensions( bitmap, size );//得到上下文的尺寸 这里就改变了size 晕 不知道如何作到的  
        }  
    else 
        {  
        size = *aSize;//NULL  
        }  
      
    AknIconUtils::SetSize( bitmap, size, aScaleMode );//添加图象    
    AknIconUtils::SetSize( mask, size, aScaleMode );//添加mask EAspectRatioPreserved  
      
    if ( aSize == NULL )  
        {  
        AknIconUtils::DestroyIconData( bitmap );  
        }  
      
    return CGulIcon::NewL( bitmap, mask );//  
    }  
 
// ]]] end generated function 
/*
========================================================================
 Name        : ATestList2ListBox.cpp
 Author      : SMSExampleParser
 Copyright   : Your copyright notice
 Description :
========================================================================
*/
// [[[ begin generated region: do not modify [Generated System Includes]
#include <barsread.h>
#include <stringloader.h>
#include <aknlists.h>
#include <eikenv.h>
#include <akniconarray.h>
#include <eikclbd.h>
#include <aknviewappui.h>
#include <eikappui.h>
#include <ATestList2.mbg>
#include <ATestList2_aif.mbg>//swb 真有啊 天啊
#include <ATestList2.rsg>
// ]]] end generated region [Generated System Includes]

// [[[ begin generated region: do not modify [Generated User Includes]
#include "ATestList2ListBox.h"
#include "ATestList2ListBoxView.h"
#include "ATestList2.hrh"
// ]]] end generated region [Generated User Includes]

// [[[ begin generated region: do not modify [Generated Constants]
_LIT( KATestList2File, "//resource//apps//ATestList2.mbm" );
_LIT(KATestList2SVGFile, "//resource//apps//ATestList2_aif.mbm");
// ]]] end generated region [Generated Constants]

/**
 * First phase of Symbian two-phase construction. Should not
 * contain any code that could leave.
 */
CATestList2ListBox::CATestList2ListBox()
 {
 // [[[ begin generated region: do not modify [Generated Contents]
 iListBox = NULL;
 // ]]] end generated region [Generated Contents]
 
 }
/**
 * Destroy child controls.
 */
CATestList2ListBox::~CATestList2ListBox()
 {
 // [[[ begin generated region: do not modify [Generated Contents]
 delete iListBox;
 iListBox = NULL;
 // ]]] end generated region [Generated Contents]
 
 }
    
/**
 * Construct the control (first phase).
 *  Creates an instance and initializes it.
 *  Instance is not left on cleanup stack.
 * @param aRect bounding rectangle
 * @param aParent owning parent, or NULL
 * @param aCommandObserver command observer
 * @return initialized instance of CATestList2ListBox
 */
CATestList2ListBox* CATestList2ListBox::NewL(
  const TRect& aRect,
  const CCoeControl* aParent,
  MEikCommandObserver* aCommandObserver )
 {
 CATestList2ListBox* self = CATestList2ListBox::NewLC(
   aRect,
   aParent,
   aCommandObserver );
 CleanupStack::Pop( self );
 return self;
 }

/**
 * Construct the control (first phase).
 *  Creates an instance and initializes it.
 *  Instance is left on cleanup stack.
 * @param aRect The rectangle for this window
 * @param aParent owning parent, or NULL
 * @param aCommandObserver command observer
 * @return new instance of CATestList2ListBox
 */
CATestList2ListBox* CATestList2ListBox::NewLC(
  const TRect& aRect,
  const CCoeControl* aParent,
  MEikCommandObserver* aCommandObserver )
 {
 CATestList2ListBox* self = new ( ELeave ) CATestList2ListBox();
 CleanupStack::PushL( self );
 self->ConstructL( aRect, aParent, aCommandObserver );
 return self;
 }
   
/**
 * Construct the control (second phase).
 *  Creates a window to contain the controls and activates it.
 * @param aRect bounding rectangle
 * @param aCommandObserver command observer
 * @param aParent owning parent, or NULL
 */
void CATestList2ListBox::ConstructL(
  const TRect& aRect,
  const CCoeControl* aParent,
  MEikCommandObserver* aCommandObserver )
 {
 if ( aParent == NULL )
     {
  CreateWindowL();
     }
 else
     {
     SetContainerWindowL( *aParent );
     }
 iFocusControl = NULL;
 iCommandObserver = aCommandObserver;
 InitializeControlsL();
 SetRect( aRect );
 ActivateL();
 // [[[ begin generated region: do not modify [Post-ActivateL initializations]
 // ]]] end generated region [Post-ActivateL initializations]
 
 }
   
/**
* Return the number of controls in the container (override)
* @return count
*/
TInt CATestList2ListBox::CountComponentControls() const
 {
 return ( int ) ELastControl;
 }
    
/**
* Get the control with the given index (override)
* @param aIndex Control index [0...n) (limited by #CountComponentControls)
* @return Pointer to control
*/
CCoeControl* CATestList2ListBox::ComponentControl( TInt aIndex ) const
 {
 // [[[ begin generated region: do not modify [Generated Contents]
 switch ( aIndex )
  {
 case EListBox:
  return iListBox;
  }
 // ]]] end generated region [Generated Contents]
 
 // handle any user controls here...
 
 return NULL;
 }
    
/**
 * Handle resizing of the container. This implementation will lay out
 *  full-sized controls like list boxes for any screen size, and will layout
 *  labels, editors, etc. to the size they were given in the UI designer.
 *  This code will need to be modified to adjust arbitrary controls to
 *  any screen size.
 */    
void CATestList2ListBox::SizeChanged()
 {
 CCoeControl::SizeChanged();
 LayoutControls();
 // [[[ begin generated region: do not modify [Generated Contents]
   
 // ]]] end generated region [Generated Contents]
 
 }
    
// [[[ begin generated function: do not modify
/**
 * Layout components as specified in the UI Designer
 */
void CATestList2ListBox::LayoutControls()
 {
 iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );
 }
// ]]] end generated function

/**
 * Handle key events.
 */    
TKeyResponse CATestList2ListBox::OfferKeyEventL(
  const TKeyEvent& aKeyEvent,
  TEventCode aType )
 {
 // [[[ begin generated region: do not modify [Generated Contents]
 if ( aKeyEvent.iCode == EKeyLeftArrow
  || aKeyEvent.iCode == EKeyRightArrow )
  {
  // Listbox takes all events even if it doesn't use them
  return EKeyWasNotConsumed;
  }
 
 // ]]] end generated region [Generated Contents]
 
 if ( iFocusControl != NULL
  && iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
  {
  return EKeyWasConsumed;
  }
 return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
 }
    
// [[[ begin generated function: do not modify
/**
 * Initialize each control upon creation.
 */    
void CATestList2ListBox::InitializeControlsL()//这个就是初始化控件的方法
 {
 iListBox = new ( ELeave ) CAknDoubleLargeStyleListBox;//初始化listBox
 iListBox->SetContainerWindowL( *this );//设置list的
  {
  TResourceReader reader;//一个资源解析器
  iEikonEnv->CreateResourceReaderLC( reader, R_ATEST_LIST2_LIST_BOX_LIST_BOX );//读取资源
  iListBox->ConstructFromResourceL( reader );//构造资源
  CleanupStack::PopAndDestroy(); // reader internal state
  }
 // the listbox owns the items in the list and will free them
 iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );//这个是说list拥有item并且负责处理他们
 
 // setup the icon array so graphics-style boxes work//设置list的图标
 SetupListBoxIconsL();
 
 
 // add list items
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM1,
   EListBoxAtestlist2List_iconIndex );
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM2,
   EListBoxAtestlist2List_iconIndex1 );
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM3,
   EListBoxAtestlist2List_iconIndex2 );
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM4,
   EListBoxAtestlist2List_iconIndex3 );
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM5,
   EListBoxAtestlist2List_iconIndex4 );
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM6,
   EListBoxAtestlist2List_iconIndex5 );
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM7,
   EListBoxAtestlist2List_iconIndex6 );
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM8,
   EListBoxAtestlist2List_iconIndex7 );
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM9,
   EListBoxAtestlist2List_iconIndex8 );
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM10,
   EListBoxAtestlist2List_iconIndex9 );
 AddListBoxResourceArrayItemL( R_ATEST_LIST2_LIST_BOX_LISTBOX_ITEM11,
   EListBoxAtestlist2List_iconIndex10 );
 iListBox->SetFocus( ETrue );// 获得交点
 iFocusControl = iListBox;
 
 }
// ]]] end generated function

/**
 * Handle global resource changes, such as scalable UI or skin events (override)
 */
void CATestList2ListBox::HandleResourceChange( TInt aType )
 {
 CCoeControl::HandleResourceChange( aType );
 SetRect( iAvkonViewAppUi->View( TUid::Uid( EATestList2ListBoxViewId ) )->ClientRect() );
 // [[[ begin generated region: do not modify [Generated Contents]
 // ]]] end generated region [Generated Contents]
 
 }
    
/**
 * Draw container contents.
 */    
void CATestList2ListBox::Draw( const TRect& aRect ) const
 {
 // [[[ begin generated region: do not modify [Generated Contents]
 CWindowGc& gc = SystemGc();
 gc.Clear( aRect );
 
 // ]]] end generated region [Generated Contents]
 
 }
    
// [[[ begin generated function: do not modify
/**
 * Add a list box item to a list.
 */
void CATestList2ListBox::AddListBoxItemL(
  CEikTextListBox* aListBox,
  const TDesC& aString )
 {
 CTextListBoxModel* model = aListBox->Model();//得到listbox的model
 CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );//得到ilistbox 的数组
 itemArray->AppendL( aString );//添加本数组
 aListBox->HandleItemAdditionL();//当listbox的model改变的时候 用这个功能来改变他们内在的这个状态
 }

// ]]] end generated function

// [[[ begin generated function: do not modify
/**
 * Get the array of selected item indices, with respect to the list model.
 * The array is sorted in ascending order.
 * The array should be destroyed with two calls to CleanupStack::PopAndDestroy(),
 * the first with no argument (referring to the internal resource) and the
 * second with the array pointer.
 * @return newly allocated array, which is left on the cleanup stack;
 * or NULL for empty list.
 */
RArray< TInt >* CATestList2ListBox::GetSelectedListBoxItemsLC( CEikTextListBox* aListBox )
 {
 CAknFilteredTextListBoxModel* model =
  static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
 if ( model->NumberOfItems() == 0 )
  return NULL;
  
 // get currently selected indices
 const CListBoxView::CSelectionIndexArray* selectionIndexes =
  aListBox->SelectionIndexes();
 TInt selectedIndexesCount = selectionIndexes->Count();
 if ( selectedIndexesCount == 0 )
  return NULL;
  
 // copy the indices and sort numerically
 RArray<TInt>* orderedSelectedIndices =
  new (ELeave) RArray< TInt >( selectedIndexesCount );
 
 // push the allocated array
 CleanupStack::PushL( orderedSelectedIndices );
 
 // dispose the array resource
 CleanupClosePushL( *orderedSelectedIndices );
 
 // see if the search field is enabled
 CAknListBoxFilterItems* filter = model->Filter();
 if ( filter != NULL )
  {
  // when filtering enabled, translate indices back to underlying model
  for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
   {
   TInt filteredItem = ( *selectionIndexes ) [ idx ];
   TInt actualItem = filter->FilteredItemIndex ( filteredItem );
   orderedSelectedIndices->InsertInOrder( actualItem );
   }
  }
 else
  {
  // the selection indices refer directly to the model
  for ( TInt idx = 0; idx < selectedIndexesCount; idx++ )
   orderedSelectedIndices->InsertInOrder( ( *selectionIndexes ) [ idx ] );
  } 
  
 return orderedSelectedIndices;
 }

// ]]] end generated function

// [[[ begin generated function: do not modify
/**
 * Delete the selected item or items from the list box.
 */
void CATestList2ListBox::DeleteSelectedListBoxItemsL( CEikTextListBox* aListBox )
 {
 CAknFilteredTextListBoxModel* model =
  static_cast< CAknFilteredTextListBoxModel *> ( aListBox->Model() );
 if ( model->NumberOfItems() == 0 )
  return;
 
 RArray< TInt >* orderedSelectedIndices = GetSelectedListBoxItemsLC( aListBox );  
 if ( !orderedSelectedIndices )
  return;
  
 // Delete selected items from bottom up so indices don't change on us
 CDesCArray* itemArray = static_cast< CDesCArray* > ( model->ItemTextArray() );
 TInt currentItem = 0;
 
 for ( TInt idx = orderedSelectedIndices->Count(); idx-- > 0; )
  {
  currentItem = ( *orderedSelectedIndices )[ idx ];
  itemArray->Delete ( currentItem );
  }
 
 // dispose the array resources
 CleanupStack::PopAndDestroy();
 
 // dispose the array pointer
 CleanupStack::PopAndDestroy( orderedSelectedIndices );
 
 // refresh listbox's cursor now that items are deleted
 AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(
  aListBox, currentItem, ETrue );
 }

// ]]] end generated function

// [[[ begin generated function: do not modify
/**
 * Get the listbox.
 */
CAknDoubleLargeStyleListBox* CATestList2ListBox::ListBox()
 {
 return iListBox;
 }

// ]]] end generated function

// [[[ begin generated function: do not modify
/**
 * Create a list box item with the given column values.
 */
void CATestList2ListBox::CreateListBoxItemL( TDes& aBuffer,
  TInt aIconIndex,
  const TDesC& aMainText,
  const TDesC& aSecondaryText )
 {
 _LIT ( KStringHeader, "%d/t%S/t%S" );
 
 aBuffer.Format( KStringHeader(), aIconIndex, &aMainText, &aSecondaryText );//字符串格式是这样的 图片位置,上面位置 下面位置
 }
    
// ]]] end generated function

// [[[ begin generated function: do not modify
/**
 * Add an item to the list by reading the text items from the array resource
 * and setting a single image property (if available) from an index
 * in the list box's icon array.
 * @param aResourceId id of an ARRAY resource containing the textual
 * items in the columns
 * @param aIconIndex the index in the icon array, or -1
 */
void CATestList2ListBox::AddListBoxResourceArrayItemL( TInt aResourceId, TInt aIconIndex )
 {
 CDesCArray* array = iCoeEnv->ReadDesCArrayResourceL( aResourceId );//通过资源ID来读取资源
 CleanupStack::PushL( array );
 // This is intended to be large enough, but if you get
 // a USER 11 panic, consider reducing string sizes.
 TBuf<512> listString;
 //这个是调整格式
 CreateListBoxItemL( listString, aIconIndex, ( *array ) [ 0 ], ( *array ) [ 1 ] );//得到每一个item
 
 //这个是添加格式
 AddListBoxItemL( iListBox, listString );
 
 CleanupStack::PopAndDestroy( array );
 }
    
// ]]] end generated function

// [[[ begin generated function: do not modify
/**
 * Set up the list's icon array.
 */
void CATestList2ListBox::SetupListBoxIconsL()
 {
 CArrayPtr< CGulIcon >* icons = NULL; //定义图象数组 
 icons = new (ELeave) CAknIconArray( 11 );//初始化图象
 CleanupStack::PushL( icons );
 CGulIcon* icon;//创建图标对象
 // for EListBoxAtestlist2List_iconIndex
 for(int i=0;i<11;i++)
  {
  icon = LoadAndScaleIconL(
    KATestList2File, EMbmAtestlist2List_icon, EMbmAtestlist2List_icon_mask,
    NULL, EAspectRatioPreserved,i );//创建图标
  CleanupStack::PushL( icon );
  icons->AppendL( icon );
  CleanupStack::Pop( icon );
  }

 CleanupStack::Pop( icons );
 
 if ( icons != NULL )
  {
  iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );//设置图片的图标数组 这样在以后的地方就好用了
  }
 }
/**
 * Handle commands relating to markable lists.
 */
TBool CATestList2ListBox::HandleMarkableListCommandL( TInt aCommand )
 {
 return EFalse;
 }

// ]]] end generated function

// [[[ begin generated function: do not modify
/**
 * This routine loads and scales a bitmap or icon.
 *
 * @param aFileName the MBM or MIF filename
 * @param aBitmapId the bitmap id
 * @param aMaskId the mask id or -1 for none
 * @param aSize the TSize for the icon, or NULL to use real size
 * @param aScaleMode one of the EAspectRatio* enums when scaling
 *
 */
CGulIcon* CATestList2ListBox::LoadAndScaleIconL(
  const TDesC& aFileName,
  TInt aBitmapId,
  TInt aMaskId,
  TSize* aSize,
  TScaleMode aScaleMode,TInt i)
 {
 //icon = LoadAndScaleIconL(
 //  KATestList2File, EMbmAtestlist2List_icon, EMbmAtestlist2List_icon_mask,
 //  NULL, EAspectRatioPreserved );
 CFbsBitmap* bitmap;
 CFbsBitmap* mask;
 if(i==0)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk, EMbmAtestlist2_aifTodisk_mask );
  }
 if(i==1)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTonet, EMbmAtestlist2_aifTonet_mask );
  }
 if(i==2)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk2, EMbmAtestlist2_aifTonet2_mask );
  }
 if(i==3)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk3, EMbmAtestlist2_aifTodisk3_mask );
  }
 if(i==4)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk4, EMbmAtestlist2_aifTodisk4_mask );
  }
 if(i==5)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk5, EMbmAtestlist2_aifTodisk5_mask );
  }
 if(i==6)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTonet1, EMbmAtestlist2_aifTonet1_mask );
  }
 if(i==7)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTonet2, EMbmAtestlist2_aifTonet2_mask );
  }
 if(i==8)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTonet3, EMbmAtestlist2_aifTonet3_mask );
  }
 if(i==9)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTonet4, EMbmAtestlist2_aifTonet4_mask );
  }
 if(i==10)
  {
  AknIconUtils::CreateIconL( bitmap, mask, KATestList2SVGFile, EMbmAtestlist2_aifTodisk3, EMbmAtestlist2_aifTodisk3_mask );
  }
 // AknIconUtils::CreateIconL( bitmap, mask, aFileName, aBitmapId, aMaskId );
 
 TSize size;
 if ( aSize == NULL )
  {
  // Use size from the image header.  In case of SVG,
  // we preserve the image data for a while longer, since ordinarily
  // it is disposed at the first GetContentDimensions() or SetSize() call.
  AknIconUtils::PreserveIconData( bitmap );//得到图象数据
  AknIconUtils::GetContentDimensions( bitmap, size );//得到上下文的尺寸 这里就改变了size 晕 不知道如何作到的
  }
 else
  {
  size = *aSize;//NULL
  }
 
 AknIconUtils::SetSize( bitmap, size, aScaleMode );//添加图象 
 AknIconUtils::SetSize( mask, size, aScaleMode );//添加mask EAspectRatioPreserved
 
 if ( aSize == NULL )
  {
  AknIconUtils::DestroyIconData( bitmap );
  }
 
 return CGulIcon::NewL( bitmap, mask );//
 }

// ]]] end generated function

 

资源文件ATestList2ListBox.rssi

view plaincopy to clipboardprint?
/* 
======================================================================== 
 Name        : ATestList2ListBox.rssi 
 Author      : SMSExampleParser 
 Copyright   : Your copyright notice 
 Description :  
======================================================================== 
*/
#include "ATestList2ListBox.loc"  
 
RESOURCE AVKON_VIEW r_atest_list2_list_box_atest_list2_list_box_view  
    {  
    cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;  
    menubar = r_atest_list2_list_box_options_menu;  
    toolbar = 0;  
    }  
RESOURCE MENU_BAR r_atest_list2_list_box_options_menu  
    {  
    }  
RESOURCE STATUS_PANE_APP_MODEL r_atest_list2_list_box_status_pane  
    {  
    panes =  
        {  
        SPANE_PANE  
            {  
            id = EEikStatusPaneUidTitle;  
            type = EAknCtTitlePane;  
            resource = r_atest_list2_list_box_title_resource;  
            }  
        };  
    }  
RESOURCE TITLE_PANE r_atest_list2_list_box_title_resource  
    {  
    txt = STR_ATestList2ListBoxView_3;  
    }  
RESOURCE LISTBOX r_atest_list2_list_box_list_box  
    {  
    flags = EAknListBoxSelectionList;  
    }  
RESOURCE ARRAY r_atest_list2_list_box_listbox_item1  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_4;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_5;  
            }  
        };  
    }  
 
RESOURCE ARRAY r_atest_list2_list_box_listbox_item2  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_6;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_7;  
            }  
        };  
    }  
 
RESOURCE ARRAY r_atest_list2_list_box_listbox_item3  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_8;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_9;  
            }  
        };  
    }  
RESOURCE ARRAY r_atest_list2_list_box_listbox_item4  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_10;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_11;  
            }  
        };  
    }  
 
RESOURCE ARRAY r_atest_list2_list_box_listbox_item5  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_12;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_13;  
            }  
        };  
    }  
RESOURCE ARRAY r_atest_list2_list_box_listbox_item6  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_14;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_15;  
            }  
        };  
    }  
RESOURCE ARRAY r_atest_list2_list_box_listbox_item7  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_16;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_17;  
            }  
        };  
    }  
 
RESOURCE ARRAY r_atest_list2_list_box_listbox_item8  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_18;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_19;  
            }  
        };  
    }  
RESOURCE ARRAY r_atest_list2_list_box_listbox_item9  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_20;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_21;  
            }  
        };  
    }  
 
RESOURCE ARRAY r_atest_list2_list_box_listbox_item10  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_22;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_23;  
            }  
        };  
    }  
RESOURCE ARRAY r_atest_list2_list_box_listbox_item11  
    {  
    items =  
        {  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_24;  
            },  
        LBUF  
            {  
            txt = STR_ATestList2ListBoxView_25;  
            }  
        };  
    } 
/*
========================================================================
 Name        : ATestList2ListBox.rssi
 Author      : SMSExampleParser
 Copyright   : Your copyright notice
 Description :
========================================================================
*/
#include "ATestList2ListBox.loc"

RESOURCE AVKON_VIEW r_atest_list2_list_box_atest_list2_list_box_view
 {
 cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
 menubar = r_atest_list2_list_box_options_menu;
 toolbar = 0;
 }
RESOURCE MENU_BAR r_atest_list2_list_box_options_menu
 {
 }
RESOURCE STATUS_PANE_APP_MODEL r_atest_list2_list_box_status_pane
 {
 panes =
  {
  SPANE_PANE
   {
   id = EEikStatusPaneUidTitle;
   type = EAknCtTitlePane;
   resource = r_atest_list2_list_box_title_resource;
   }
  };
 }
RESOURCE TITLE_PANE r_atest_list2_list_box_title_resource
 {
 txt = STR_ATestList2ListBoxView_3;
 }
RESOURCE LISTBOX r_atest_list2_list_box_list_box
 {
 flags = EAknListBoxSelectionList;
 }
RESOURCE ARRAY r_atest_list2_list_box_listbox_item1
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_4;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_5;
   }
  };
 }

RESOURCE ARRAY r_atest_list2_list_box_listbox_item2
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_6;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_7;
   }
  };
 }

RESOURCE ARRAY r_atest_list2_list_box_listbox_item3
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_8;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_9;
   }
  };
 }
RESOURCE ARRAY r_atest_list2_list_box_listbox_item4
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_10;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_11;
   }
  };
 }

RESOURCE ARRAY r_atest_list2_list_box_listbox_item5
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_12;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_13;
   }
  };
 }
RESOURCE ARRAY r_atest_list2_list_box_listbox_item6
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_14;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_15;
   }
  };
 }
RESOURCE ARRAY r_atest_list2_list_box_listbox_item7
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_16;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_17;
   }
  };
 }

RESOURCE ARRAY r_atest_list2_list_box_listbox_item8
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_18;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_19;
   }
  };
 }
RESOURCE ARRAY r_atest_list2_list_box_listbox_item9
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_20;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_21;
   }
  };
 }

RESOURCE ARRAY r_atest_list2_list_box_listbox_item10
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_22;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_23;
   }
  };
 }
RESOURCE ARRAY r_atest_list2_list_box_listbox_item11
 {
 items =
  {
  LBUF
   {
   txt = STR_ATestList2ListBoxView_24;
   },
  LBUF
   {
   txt = STR_ATestList2ListBoxView_25;
   }
  };
 }
 

原创粉丝点击