0

.pkg ファイルのこの行を使用してデバイスにコピーする .mbm ファイルがあります。

"$(EPOCROOT)epoc32\data\z\resource\apps\MyApp.mbm" -"!:\resource\apps\MyApp.mbm"

次に、コンテナの描画機能でこれを行います..

_LIT(KMBMFile , "\\resource\\apps\\MyApp.mbm" );
CFbsBitmap* iBitmap;

iBitmap->Load(KMBMFile, 0);
gc.BitBlt(Rect().iTl, iBitmap);

ただし、この行iBitmap->Load(KMBMFile, 0);は KERN-EXEC:0 PANIC を発生させます

「このパニックは、指定されたオブジェクト インデックス番号 (生のハンドル番号) を使用して、カーネルが現在のプロセスまたは現在のスレッドのオブジェクト インデックスでオブジェクトを見つけられない場合に発生します。」

誰かが私が間違っている場所を見つけることができますか?

ありがとう!

4

4 に答える 4

3

初期化されていないポインターを逆参照していましたが、これも使用できます。

// remember to include the EIK environemnt include file
#include <eikenv.h>

_LIT(KMBMFile , "\\resource\\apps\\MyApp.mbm" );
CFbsBitmap* iBitmap;

iBitmap = iEikonEnv->CreateBitmapL( KMBMFile, 0 );
gc.BitBlt( Rect().iTl, iBitmap );
于 2009-01-06T14:02:03.453 に答える
2

私はこの問題を解決したので、将来の閲覧者のためにここに回答を投稿します..

このようなスニペットを使用して、MMP ファイルに MBM ファイルを作成します。

START BITMAP    MyApp.mbm
HEADER
TARGETPATH      \resource\apps
SOURCEPATH      ..\gfx
SOURCE          c24 background.bmp
END

.bmp 画像が Photoshop などから 32 ビットで保存されていることを確認してください

次に、PKG ファイルで MBM ファイルがデバイスにコピーされていることを確認します。

"$(EPOCROOT)epoc32\data\z\resource\apps\MyApp.mbm" -"!:\resource\apps\MyApp.mbm"

次に、コンテナの draw 関数で、次のようなコードを使用します。

_LIT(KMBMFile , "C:\\RESOURCE\\APPS\\MyApp.mbm" );
CFbsBitmap* iBitmap = new (ELeave) CFbsBitmap;
TInt retval = iBitmap->Load(KMBMFile, 0);
gc.BitBlt(Rect().iTl, iBitmap);

これにより、画面の左上にビットマップが描画されます(背景画像に役立ちます)

于 2009-01-06T13:59:49.667 に答える
1

CCoeControl::Draw()コードは失敗してはならず、確実に離れてはなりません (末尾に .. がありませんL)。上記のコード スニペットには、iBitmapコンストラクターとiBitmap->Load(). ビットマップは、割り当てではなく、事前に割り当てておく必要がDraw()あります。放置すると、悪いことが起こります。

また、慣例により、クラスメンバー変数のみが「i」で始まりますが、iBitmap上記ではありません。

詳細については、 Symbian コーディング標準を参照してください。

于 2009-01-07T08:29:49.660 に答える
0

::Draw関数でiBitmapを作成しないでください。CoeControlのConstructLでこれを行うのが最善です。理論的には、:: Load呼び出しは、いくつかの理由で失敗する可能性があるため、:: Drawで処理できますが、すべてが致命的であるとは限りません。ただし、コントロールを作成するときにこれを簡単に行うことができるので、少し考えてみるのが最善かもしれません。コントロールが基本的にビットマップを含むためだけにある場合は、ConstructLで実行する必要があります。コントロールが行うことがいくつかある場合は、::Drawで処理することをお勧めします。

于 2009-03-26T10:15:22.053 に答える