自定义的symbian图片控件,可在任意的位置放图片
2008-10-08 12:28
567 查看
首先给出这个控件类:
头文件:
#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);
}
}
使用这个类就可以实现自定义图片控件了。
头文件:
#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);
}
}
使用这个类就可以实现自定义图片控件了。
相关文章推荐
- 自定义的symbian图片控件,可在任意的位置放图片
- 自定义的symbian图片控件,可在任意的位置放图片
- 自定义的symbian图片控件,可在任意的位置放图片(转)
- 在控件的任意位置显示图片
- 在控件的任意位置显示图片
- symbian自定义闪烁图片控件
- UIButton图片文字控件位置自定义(图片居右文字居左、图片居中文字居中、图片居左文字消失等)
- js swipe 图片滑动控件实现 任意尺寸适用任意屏幕
- 自定义RadioButton的(btn图片和Text的位置)
- Android自定义View 简单实现多图片选择控件
- iOS截取特定区域的图片,然后拼接起来,可在图片上定制任意控件
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- 如何在html中把一个图片或者表格覆盖在一张已有图片上的任意位置
- 自定义圆形控件继承ImageView加载本地图片
- 基于文字识别---实现点击图片任意位置文字即可翻译的功能
- Control Study->AdRotator广告控件显示自定义配置文件中广告以及与DataGrid控件结合使用显示图片(示例代码下载)
- 微信公众平台开发(104) 自定义菜单扫一扫、发图片、发地理位置
- Qt自定义委托在QTableView中绘制控件、图片、文字
- Android 图片拖拽、放大缩小的自定义控件
- 自定义RatingBar控件,实现可自定义星星(或项目所需图片)的宽高,告别使用warp_content导致控件大小不可控