載入系統皮膚

哈幾油發表於2010-12-18
//支援皮膚需要這兩個標頭檔案 container裡面加 #include #include //UI建構函式CONSTRUCTL裡面實現,預設已經有了 BaseConstructL( EAknEnableSkin ); //container標頭檔案裡面定義 CAknsBasicBackgroundControlContext *iBgContext; //constructL函式裡面實現 iBgContext = CAknsBasicBackgroundControlContext::NewL(KAknsIIDQsnBgAreaMain, aRect, ETrue); //使用當前皮膚來繪製背景 Draw函式實現 MAknsSkinInstance* skin = AknsUtils::SkinInstance(); //MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); AknsDrawUtils::Background( skin, iBgContext, this, gc, aRect ); //載入系統皮膚需要用到的函式 TTypeUid::Ptr CEagleEyeMainContainer::MopSupplyObject(TTypeUid aId) { if (iBgContext ) { return MAknsControlContext::SupplyMopObject( aId, iBgContext ); } return CCoeControl::MopSupplyObject(aId); } //MMP檔案中需在加入LIB庫 LIBRARY aknskins.lib aknskinsrv.lib aknswallpaperutils.lib //上面的語句加上就可以實現載入系統皮膚,但是DrawNow時會出現閃屏,消除閃屏還需要加入如下程式碼,先把皮膚載入到CFBSBITMAP型別的變數中. //CONSTRUCTL offScreenBitmap = new (ELeave) CFbsBitmap(); User::LeaveIfError( offScreenBitmap->Create( aRect.Size(), EColor4K ) ); bitmapDevice = CFbsBitmapDevice::NewL( offScreenBitmap ); User::LeaveIfError( bitmapDevice->CreateContext( bitGc ) ); AknsDrawUtils::DrawBackground( AknsUtils::SkinInstance(), iBgContext,this,*bitGc,TPoint(0,0),aRect, KAknsDrawParamDefault ); //DRAW,把前面繪製背景的語句去掉,換成下面的語句 gc.BitBlt( Rect().iTl,offScreenBitmap ); //上面的操作完成後有可能視窗區有可能會不滿屏,應該是CONSTRUCTL裡面的SET(RECT)函式的位置問題.

相關文章