2011-08-02 9 views
0

最近、私はSymbian開発を研究しています。 CDirectScreenAccessを使用してデバイスに直接描画する場合、問題が発生します。 私のコードは以下の通りです:私はこのプロジェクトをビルドするときSymbianデベロッパのCDirectScreenAccessに関する質問

//MySnakeAppView.h 
class CMySnakeAppView : public CCoeControl 
{ 
... 
private: 
void ConstructL(const TRect& aRect); 
CDirectScreenAccess* iDSA; 
void Restart(RDirectScreenAccess::TTerminationReasons aReason); 
void AbortNow(RDirectScreenAccess::TTerminationReasons aReason); 
void DrawGraphics(); 
... 
} 

//MySnakeAppView.cpp 

void CMySnakeAppView::ConstructL(const TRect& aRect) 
    { 
// Create a window for this application view 
CreateWindowL(); 

// Set the windows size 
SetRect(aRect); 

// Activate the window, which makes it ready to be drawn 
ActivateL(); 


CEikonEnv* env = CEikonEnv::Static(); 
iDSA = CDirectScreenAccess::NewL(env->WsSession(), *env->ScreenDevice(), Window(), *this); 

iDSA->StartL(); 
DrawGraphics(); 
} 
void CMySnakeAppView::DrawGraphics() 
    { 
CFbsBitGc *gc = iDSA->Gc(); 
TRgb colorRed = AKN_LAF_COLOR(35); 
gc->SetPenColor(colorRed); 
gc->DrawRect(TRect(0,0,100,100)); 
iDSA->ScreenDevice()->Update(); 

} 
void CMySnakeAppView::Restart(RDirectScreenAccess::TTerminationReasons aReason) 
    { 

    iDSA->StartL(); 
    DrawGraphics(); 
    } 
void CMySnakeAppView::AbortNow(RDirectScreenAccess::TTerminationReasons aReason) 
    { 

    iDSA->Cancel(); 
    } 

は、それがコード IDSA = CDirectScreenAccess :: NEWL(env-> WsSession()、* env-> ScreenDevice()、窓(と間違っています)、 *この); これはその書き込みミスです: - : IDSA = CDirectScreenAccess :: NEWL(env-> WsSession()、* envを 'MDirectScreenAccess &' に 'CMySnakeAppView' から違法な暗黙の型変換を、私はこのようにそれを行うとき - > ScreenDevice()、Window()、(MDirectScreenAccess &)* this);それはのistanceではないので

が建物の中に間違いはありませんが、まだプロジェクトに誤りがあり、私はなぜ知らない、私は、あなたが*これを渡すことはできません

答えて

1

あなたCMySnakeAppViewMDirectScreenAccessから派生する必要があります - あなたはすでにあなただけの宣言を逃している、右のメソッドを実装しているように見える:あなたの助けのための

class CMySnakeAppView : public CCoeControl, public MDirectScreenAccess 
+0

はい私はこれが好きです、そしてそれは動作します!ありがとう! – user710756

+0

彼の答えを受け入れる – James

1

あなたの助けが必要MDirectScreenAccessクラスもそれを継承するクラスの継承ではありません。手動でキャストすることはできますが、それはエラーです。 MDirectScreenAccessから継承し、そこからiDSAを構築するクラスを構築する必要があります。ここを見てください:

http://www.developer.nokia.com/Community/Wiki/Anti-tearing_with_CDirectScreenBitmap

+0

感謝を。私はそれが好きですそしてそれは動作します〜 – user710756