使用CPicture在文本(RichTextEditor)中插入图像

西门旻
2023-12-01
 

适用版本:

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/

 类似资料: