1:任何窗体内调用DrawNow来绘制的时候,如果这个窗体从没有用SetRect来设置过,则进行重绘时是没有任何效果的,通过调试发现Draw( )的CALLBACK方法里,系统给你传递的TRect是0,0,0,0,但第一次是可以的,因为从最上层传递过一个ApplicationRect
在用户自己写的绘图方法里,一般是这样的过程:
ActivateGc( ); CWindowGc& gc = SystemGc( ); .... DeactivateGc( );
//等同于下面的: CWindowGc& gc = SystemGc( ); gc->Activate( *Window( ) ); gc->Deactivate( );
注意不要使用Window( )->BeginRedraw( )和Window( )->EndRedraw( );
2:关于双缓冲 需要使用的类:CFbsBitmap,CFbsBitmapDevice,CFbsBitmapGc 过程:
CFbsBitmap* pBuffer; CFbsBitmapDevice* pDevice; CFbsBitGc* pGc;
pBuffer = new( ELeave )CFbsBitmap; CleanupStack::PushL( pBuffer ) pBuffer->Create( size,EColor4K ); pDevice = CFbsBitmapDevice::NewL( *pBuffer ); pDevice->CreateContext( pGc );
3:为什么我在框架体系内用BitBltMasked绘制透明图片时根本不透明,在透明区域显示的是灰色或其他颜色?? 用BitBltMasked绘制的时候需要注意,遮罩图的透明部分是用画刷填充的。所以如果想要达到透明效果,必须:
gc.SetBrushStyle( CGraphicsContext::ENullBrush );
4:为什么用CMdaImageFileToBitmapUtility类来装载GIF动画时只能显示第一张??
其实CMdaImageFileToBitmapUtility在Open的方法里只解压GIF动画序列的第一张,此时你用FrameCount()返回的 是1,只有在成功的转化第一侦以后, FrameCount()才会返回2,这个时候才可以继续用ConvertL()来转化第二张 |