zoukankan      html  css  js  c++  java
  • 自定义的symbian图片控件,可在任意的位置放图片(转)


    首先给出这个控件类:

    头文件:

    #ifndef CMyPicture_H
    #define CMyPicture_H

    // INCLUDES
    #include <e32std.h>
    #include <e32base.h>
    #include <f32file.h>
    #include <fbs.h>
    #include <coecntrl.h>

    // CLASS DECLARATION


    //class RFs;
    class CMyPicture : public CCoeControl
    {
    public: // Constructors and destructor

     /**
            * Destructor.
            */
     ~CMyPicture();

            /**
            * Two-phased constructor.
            */
     static CMyPicture* NewL();

            /**
            * Two-phased constructor.
            */
     static CMyPicture* NewLC();

    public:

     /**
            * Constructor for performing 1st stage construction
            */
     CMyPicture();

     /**
            * EPOC default constructor for performing 2nd stage construction
            */
     void ConstructL();

     virtual void Draw(const TRect& aRect) const;
     void SetPicture(TDesC& aFilePath);
     void SetVisiable(TBool aVisiable);
     void GetPng(RFs& aFs,const TDesC& afilepath,CFbsBitmap* iBitmap,CFbsBitmap* iBmpMask );
    private:
     TBuf<100> iFilePath;
     RFs fs;
     CFbsBitmap* iBitmapBack;
     CFbsBitmap* iBitmapBackMask;
     TBool iBVisiable;

    };

    #endif // CMyPicture_H

    然后是cpp文件:

    #include "CMyPicture.h"
    #include <eikenv.h>
    #include <ImageConversion.h>

    CMyPicture::CMyPicture()
    {
     // No implementation required
    }


    CMyPicture::~CMyPicture()
    {
    }

    CMyPicture* CMyPicture::NewLC()
    {
     CMyPicture* self = new (ELeave)CMyPicture();
     CleanupStack::PushL(self);
     self->ConstructL();
     return self;
    }

    CMyPicture* CMyPicture::NewL()
    {
     CMyPicture* self=CMyPicture::NewLC();
     CleanupStack::Pop(); // self;
     return self;
    }

    void CMyPicture::ConstructL()
    {

     CreateWindowL();
     fs=iEikonEnv->FsSession();
     iBitmapBack=new (ELeave) CFbsBitmap();
     iBitmapBackMask=new (ELeave) CFbsBitmap();
     _LIT(KBackPath,"c:\\system\\apps\\SG\\back2.png");
     GetPng(fs,KBackPath,iBitmapBack,iBitmapBackMask);
     iBVisiable = ETrue;
    }

    void CMyPicture::SetPicture(TDesC& aFilePath)

    {
     iFilePath = aFilePath;

    }

    void CMyPicture::SetVisiable(TBool aVisiable)

    {
     iBVisiable = aVisiable;
     DrawNow();
    }

    void CMyPicture::GetPng(RFs &aFs,const TDesC &afilepath,CFbsBitmap *iBitmap,CFbsBitmap* iBmpMask)

    {
     _LIT8(MimeType, "image/png");
     CImageDecoder* imageDecoder = CImageDecoder::FileNewL(aFs,afilepath,
                                                         MimeType, 
                     CImageDecoder::EOptionAlwaysThread
                     );
     iBitmap->Create(imageDecoder->FrameInfo().iOverallSizeInPixels, 
                  imageDecoder->FrameInfo().iFrameDisplayMode /*was EColor4K*/);
     // its a EColor16M
     iBmpMask->Create(imageDecoder->FrameInfo().iOverallSizeInPixels,EGray256 /*was EGray2*/ );
     TRequestStatus status;
     imageDecoder->Convert( &status, *iBitmap, *iBmpMask );
     User::WaitForRequest( status );
     delete imageDecoder;

    }

    void CMyPicture::Draw(const TRect& aRect) const
    {
     CWindowGc& gc = SystemGc();
     if (iBVisiable) 
     {
      TRect bmpEmaPieceRect(TPoint(0,0),iBitmapBack->SizeInPixels());
      gc.BitBltMasked(TPoint(10,10),iBitmapBack,bmpEmaPieceRect,iBitmapBackMask,ETrue);
     }

    }

    使用这个类就可以实现自定义图片控件了。

  • 相关阅读:
    用JavaScript往DIV动态添加内容
    【转】javascript入门系列演示·三种弹出对话框的用法实例
    ASP.Net:Table类的使用
    vs2010设置 "行号显示"
    HTML相对路径 当前目录、上级目录、根目录、下级目录表示法
    【转】算法基础(二):栈的应用 --- 迷宫解题
    【转】CSS中怎么让DIV居中
    【转】如何让DIV水平和垂直居中
    SQL : 在SQL Server 2008(Or Express)中如何Open并编辑数据表【转】
    SQL2005中设置自动编号字段【转】
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/1862851.html
Copyright © 2011-2022 走看看