适用版本:
Series 60 2nd FP3, Series 60 3rd
有时候在文字中插入一些图片可以帮助我们更好的表达我们的意图,就像上图一样。Series 60提供了RichTextEditor(CEikRichTextEditor)来实现这一功能。下面简述一下在RichTextEditor中插入图片的流程:首先,在RichTextEditor中插入的图片都是CPicture类型,我们需要定义一个继承自CPicture的类作为插入的图片类。一个典型的图片类CMyPicture如下定义:
#ifndef CMYPICTURE_H #define CMYPICTURE_H // INCLUDES #include TwipsToPixels(TRect(TPoint(),iSizeInTwips)); bitmapRect.Move(aTopLeft); aGc.Reset(); aGc.SetClippingRect(aClipRect); aGc.DrawBitmap(bitmapRect, iBitmap); } 完整的CMyPicture类实现如下: // INCLUDE FILES #include "MyPicture.h" #include // --------------------------------------------------------- // Constructor // --------------------------------------------------------- // CMyPicture::CMyPicture( TSize aSize, CFbsBitmap& aBitmap ) : iSizeInTwips(aSize), iBitmap(&aBitmap) { } // --------------------------------------------------------- // LineBreakPossible() // --------------------------------------------------------- // TBool CMyPicture::LineBreakPossible( TUint /*aClass*/, TBool /*aBeforePicture*/, TBool /*aHaveSpaces*/ ) const { return EFalse; } // --------------------------------------------------------- // Draw() // --------------------------------------------------------- // void CMyPicture::Draw( CGraphicsContext& aGc, const TPoint& aTopLeft, const TRect& aClipRect, MGraphicsDeviceMap* aMap ) const { TRect bitmapRect=aMap->TwipsToPixels(TRect(TPoint(),iSizeInTwips)); bitmapRect.Move(aTopLeft); aGc.Reset(); aGc.SetClippingRect(aClipRect); aGc.DrawBitmap(bitmapRect, iBitmap); } // --------------------------------------------------------- // ExternalizeL() // --------------------------------------------------------- // void CMyPicture::ExternalizeL( RWriteStream& /*aStream*/ ) const { // No implementation required } // --------------------------------------------------------- // SetOriginalSizeInTwips() // --------------------------------------------------------- // void CMyPicture::SetOriginalSizeInTwips( TSize aSize ) { iSizeInTwips = aSize; } // --------------------------------------------------------- // GetOriginalSizeInTwips() // --------------------------------------------------------- // void CMyPicture::GetOriginalSizeInTwips( TSize& aSize ) const { aSize = iSizeInTwips; } //EOF
这样我们就定义了一个插入的图片类,在RichTextEditor中我们可以使用一个类似如下的InsertMyPictureL插入函数进行插入图片了。
void CRTEContainer::InsertMyPictureL(TInt aPos) { CMyPicture* picture; // Create a CPicture derived class which will draw our image, depending this Size picture = new( ELeave )CMyPicture(TSize(KKImageWidth,KImageHeight), *(iBitmap->At(iBitmap->Count()-1)/*process the last item of iBitmap*/)); CleanupStack::PushL(picture); // Prepare the Picture header, which will be instered into the Richtext TPictureHeader header; header.iPicture =TSwizzle(picture); iRtEd->RichText()->InsertL( aPos,header); CleanupStack::Pop(); // picture - Richtext take the ownership }
完整的示例代码可以在Forum Nokia获取[1]
使用以上的方案插入的图片背景始终是白色的,如果要插入带背景的图片请参
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17096048/viewspace-590712/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17096048/viewspace-590712/